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

📄 decl1lib.s

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

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

	esla	a
	esla	a
	esla	a
	esla	a									;a*=4	
	eadd	a		,si
	eadd	a		,rp2							;rp2:table of main Data Size
	eld		rp3		,a	

//Mp3_FrameSize
	eld		a		,@rp3						;a<-(frame size-padding)
//Mp3_FrameSizeEnd
	eld		sa		,#1							;padding:1-bit	
	push	a14
	jsr		GetNBitFromBitstreamOnlyMP3	
	pop		a14
	//skip for license 
	cmp		eq		,r5		,#3
	brf		Layer1Padding4ByteL1
	
	eld		c		,sg
	esla	c
	esla	c
	eadd	a		,c	
Layer1Padding4ByteL1
	eadd	a		,sg							;a<-frame size
	
	ecld	r0		,a
	ldw		@[a13+Index_FrameLength]	,r0		;frame size 
	
	eld		x0		,a							;x0:temporary buffer
// for invalid frame size
	cmp		gt		,r0		,#0x304
	brt		over_frame_sizeL1
	
	eld		a		,ma0
	esub	a		,x0							;a<-(valid data size)-(frame size)
	esub	a		,#3							;a<-(valid data size)-(frame size)-3
	ecld	r0		,ah
	cmp		ge		,r0		,#0
	brf		CheckSyncWordValidEmptyL1	
over_frame_sizeL1	
	eld		a		,rp0						;rp0:first read pointer
	esub	a		,ma0	
	eadd	a		,y0							;a<-next read pointer
	eadd	a		,x0
	eld		sg		,a
	enmsk	sg		,#11
	eld		a		,sg							;the content of A is modulo-value
	eadd	a		,#StartReadPointer			;Be causious !!!!
	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		a		,#0xfff						;a<-y1(#0xfff)
	eld		sa		,#12							;Sync word(0fffh):12-bit
	push	a14
	jsr		GetNBitFromBitstreamOnlyMP3		
	pop		a14

	ecp		a		,sg
	enop
	bra		ec0		,CheckSyncWordHeaderGoodL1	;ec0=z-flag	
	
	jmp		CheckSyncWordHeaderGoodL1
/////////////////	
ParsingHeaderLayerErrorL1
	esub	ma0		,p
	eld		a		,rp0						;rp0:first read pointer
	esub	a		,ma0	
	eadd	a		,y0							;a<-next read pointer
	eld		sg		,a
	enmsk	sg		,#11
	eld		a		,sg							;the content of A is modulo-value
	eadd	a		,#StartReadPointer			;Be causious !!!!	
	efz8	a
	jmp		CheckSyncWordLoopL1
//Valid data in the input buffer are not enough to parse header or decode frame.
CheckSyncWordHeaderGoodL1
	ld		r3		,#0
/////////////////////////////////////////////////////
	cmp		eq		,r5		,#0001b
	jpt		Layer3SyncL1
	cmp		eq		,r5		,#0010b
	jpt		Layer2SyncL1	
//////////////////////////////////////////////////////	
CheckSyncWordValidEmptyL1
	eld		a		,ma0

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

	eneg	a
	eadd	a		,rp0							;a<-used data size
	eadd	a		,y0							;a<-next read pointer
	ecld	r0		,a
	
	cmpu	ge		,r0		,#BitstreamEnd
	brf		buf_addr_passL1
	
	sub		r0		,#0x800	
buf_addr_passL1

	ldw		@[a13+Index_InputBufferRPointerL]	,r0
	ld		r0		,#0x20
	ldw		@[a13+Index_InputBufferRPointerH]	,r0
CheckStartSyncWordValidEmptyL1	
	ld		r0		,r3							;return condition
	ret

Layer3SyncL1
	eld		a		,#0
	eld		GLayerDiff	,a
	ld		r0		,#1
	ret
	
Layer2SyncL1
	eld		a		,#1
	eld		GLayerDiff	,a
	ld		r0		,#1
	ret		
	
//////////////////////////////////////////////////////////////////////////////////
//
//////////////////////////////////////////////////////////////////////////////////
SelectTableL1::
	eld		a		,rpd0.index_GPaddMode
	ecld	r0		,a
	srb		r0
	
	cmp		eq		,r0		,#3
	brf		next_condi1L1
	
	eld		a		,#1
	eld		rpd0.index_Gnch	,a
	eld		a		,#32
	eld		rpd0.index_Gbound	,a

	ldw		r1		,@[a13+Index_FrameBitRate]				//1010
	ecld	a		,r1										//1010
	efz8	a												//1010
	eld		rpd0.index_Gbitrate	,a							//1010
	
	jmp		condi_doneL1
next_condi1L1
	cmp		eq		,r0		,#1
	brf		next_condi2L1
	
	eld		a		,#2
	eld		rpd0.index_Gnch	,a	
	
	eld		a		,rpd0.index_GmodeExt
	eadd	a		,#1
	esla	a
	esla	a
	eld		rpd0.index_Gbound	,a
	
	ldw		r1		,@[a13+Index_FrameBitRate]		
	ecld	a		,r1
	efz8	a
	esra	a
	eld		rpd0.index_Gbitrate	,a
	jmp		condi_doneL1
next_condi2L1
	eld		a		,#2
	eld		rpd0.index_Gnch		,a
	eld		a		,#32
	eld		rpd0.index_Gbound	,a	
	
	ldw		r1		,@[a13+Index_FrameBitRate]		
	ecld	a		,r1
	efz8	a
	esra	a
	eld		rpd0.index_Gbitrate	,a	
condi_doneL1	

	eld		d		,#32			
	eld		rpd0.index_Gsblimit	,d
	
	nop
	ret	
//////////////////////////////////////////////////////////////////////////////////
//
//////////////////////////////////////////////////////////////////////////////////
BitAllocationL1::
	eld		rp0		,#Area_bitalloc
	eld		sa		,#4	

	eld		a		,rpd0.index_Gbound				// normal
	ecld	r6		,a
	dec		r6
BitAllocLoopInitL1
	eld		a		,rpd0.index_Gnch
	ecld	r7		,a
	ld		r5		,r7								// nch backup
	dec		r7
BitAllocLoopL1							
	push	a14
	jsr		GetNBitFromBitstreamOnlyMP3			
	pop		a14	
	eld		@rp0+d0	,sg								// LRLRLR.....
	
	bnzd	r7		,BitAllocLoopL1
	nop
	bnzd	r6		,BitAllocLoopInitL1
	nop

	eld		a		,rpd0.index_Gbound				// intensity
	eld		c		,rpd0.index_Gsblimit
	ecld	r0		,a
	ecld	r1		,c
AllocBound_chkL1	
	cmp		eq		,r0		,r1
	brt		none_intensityAllocL1
BitAllocIntensityLoopL1	
	push	a14
	jsr		GetNBitFromBitstreamOnlyMP3			
	pop		a14	
	eld		@rp0+d0	,sg								// Left Channel

	cmp		eq		,r5		,#2
	brf		mono_allocL1
	eld		@rp0+d0	,sg								// Right Channel		
mono_allocL1		
	inc		r0	
	bra		AllocBound_chkL1				
none_intensityAllocL1	
	ret	

//////////////////////////////////////////////////////////////////////////////////
//
//////////////////////////////////////////////////////////////////////////////////
ScalefactorsL1::
	eld		rp0		,#Area_bitalloc
	eld		rp2		,#Area_scalefactor0

	eld		a		,rpd0.index_Gnch
	ecld	r7		,a
	dec		r7
	eld		sa		,#6
ScalefactorLoopInitL1	
	eld		a		,rpd0.index_Gsblimit
	ecld	r6		,a
	dec		r6
ScalefactorLoopL1	
	eld		a		,@rp0+s0
	ecld	r1		,a
	cmp		eq		,r1		,#0
	brt		Scalefactor_zeroL1	
	
	push	a14
	jsr		GetNBitFromBitstreamOnlyMP3			
	pop		a14
	eld		a		,#tbl_scalefactor
	efz8	a
	eadd	a		,sg
	
	eld		rp3		,a
	eld		a		,@rp3
	eld		@rp2+d0	,a	
	
	jmp		Scalefactor_zeroEndL1	
Scalefactor_zeroL1	
	eld		a		,#0
	eld		@rp2+d0	,a
Scalefactor_zeroEndL1	
	cmp		eq		,r6		,#0
	brfd	ScalefactorLoopL1	
	dec		r6		

	cmp		eq		,r7		,#0
	brfd	ScalefactorLoopInitL1	
	dec		r7
	
	ret	
//////////////////////////////////////////////////////////////////////////////////
//
//////////////////////////////////////////////////////////////////////////////////	
DequantizerL1::
	eld		rp0		,#Area_bitalloc
	eld		rp2		,#Area_scalefactor0

	eld		a		,rpd0.index_Ggr	
	eld		x0		,a
	eld		y0		,#64
	emul	x0y0
	eld		a		,pl
	esra	a	
	eadd	a		,#Area_fraction
	eld		rp3		,a
		
	eld		a		,rpd0.index_Gnch
	ecld	r2		,a
	dec		r2
DequantizerLoopInitL1
	eld		a		,rpd0.index_Gbound				// normal
	ecld	r6		,a
	dec		r6
DequantizerLoopL1
	eld		a		,@rp0+s0
	ecld	r0		,a
	cmp		eq		,r0		,#0
	brt		Dequantizer_zeroL1			
		
	push	a14
	jsr		DequantizerL1_Sub
	pop		a14

	jmp		Dequantizer_zeroEndL1	
Dequantizer_zeroL1
	eld		a		,#0
	eld		@rp3+d0	,a
//
	erps	rp2+s0							// scalefactor address increase
//	
Dequantizer_zeroEndL1	
	cmp		eq		,r6		,#0
	brfd	DequantizerLoopL1
	dec		r6
	
	cmp		eq		,r2		,#0
	brfd	DequantizerLoopInitL1
	dec		r2	


/////////////////////////////////////////////////////////////////
	eld		a		,rpd0.index_Gbound				// intensity
	eld		c		,rpd0.index_Gsblimit
	ecld	r2		,a
	ecld	r1		,c
DequanBound_chkL1	
	cmp		eq		,r2		,r1
	brt		none_intensityDequanL1
DequanIntensityLoopL1
	eld		a		,@rp0+s1						// only Left
	ecld	r0		,a
	cmp		eq		,r0		,#0
	brt		DequanIntensity_zeroL1			
	
	push	a14
	jsr		DequantizerL1_Sub
	pop		a14

//
	erps	rp2+s0							// scalefactor address increase
//			
	eld		@rp3+d0	,ma0						// R		
	
	jmp		DequanIntensity_zeroEndL1	
DequanIntensity_zeroL1
	eld		a		,#0
	eld		@rp3+d0	,a							// L
	eld		@rp3+d0	,a							// R
//
	erps	rp2+s1							// scalefactor address increase
//	
DequanIntensity_zeroEndL1	
	inc		r2	
	jmp		DequanBound_chkL1
none_intensityDequanL1
	ret
//////////////////////////////////////////////////////////////////////////////////
//
//	
//////////////////////////////////////////////////////////////////////////////////	
DequantizerL1_Sub::	
	eadd	a		,#1						// nb
	eld		sa		,a
	esub	a		,#1	
	
	push	a14
	jsr		GetNBitFromBitstreamOnlyMP3			
	pop		a14

	eld		rpd1.index_Grpi	,rp1
	eld		c		,sg						// sample
	eld		x0		,c
	eld		c		,#tbl_factor
	eadd	c		,a
	eld		rp1		,c
	eld		y0		,@rp1
	emul	x0y0	
	emld	ma0		,x0y0	

	eld		d		,#tbl_offset
	eadd	d		,a
	eld		rp1		,d
	eld		x0		,@rp1
	eld		y0		,#1
	emul	x0y0

	eadd	ma0		,p

	esra	ma0

	eld		c		,ma0l
	eld		y0		,@rp2+s0		// rp2 -> scalefactor	
	eld		x0		,c
	emul	x0y0
	emld	ma0		,x0y0
	esla	ma0
	ernd	ma0
	eld		@rp3+d0	,ma0
	eld		rp1		,rpd1.index_Grpi
	
	ret	
//////////////////////////////////////////////////////////////////////////////////
//	
//	
//////////////////////////////////////////////////////////////////////////////////
Separate_channelL1::
	eld		rp0		,#Area_fraction
	eld		rp2		,#Area_leftChannel

	esd0	s0		,#0
	esd2	d0		,#1
	eld		d		,#0
	
	ld		r7		,#32-1
Separate_leftInitL1
	eld		c		,#Area_fraction
	eadd	c		,d
	eld		rp0		,c
	eadd	d		,#2
	
	ld		r6		,#12-1	
Separate_leftL1	
	eld		a		,@rp0+s0
	erpn	rp0		,#64
	bnzd	r6		,Separate_leftL1
	eld		@rp2+d0	,a
	
	bnzd	r7		,Separate_leftInitL1
	nop

	esd0	s0		,#1

	eld		rp0		,#Area_fraction
	eld		rp2		,#Area_rightChannel

	esd0	s0		,#0
	esd2	d0		,#1
	eld		d		,#0
	
	ld		r7		,#32-1
Separate_rightInitL1
	eld		c		,#Area_fraction+2
	eadd	c		,d
	eld		rp0		,c
	eadd	d		,#2
	
	ld		r6		,#12-1	
Separate_rightL1
	eld		a		,@rp0+s0
	erpn	rp0		,#64
	bnzd	r6		,Separate_rightL1
	eld		@rp2+d0	,a
	
	bnzd	r7		,Separate_rightInitL1
	nop

	esd0	s0		,#1

	ret	
//////////////////////////////////////////////////////
//	YDMA Load (for mp1 table)
//////////////////////////////////////////////////////		
//	0x9f00	(Y-memory block1 )
//////////////////////////////////////////////////////
Load_L1table::
/*
	ld		r0			,#0x0
	ld		a12			,#YDMACFG
	ldb		@[a12+0]	,r0
	
	ld		r0			,#0x1d	
	ld		a12			,#YDMAIADRH
	ldb		@[a12+0]	,r0
	ld		r0			,#0x00
	ld		a12			,#YDMAIADRL
	ldb		@[a12+0]	,r0
	
	ld		r0			,#0x00	 
	ld		a12			,#YDMAEADRX
	ldb		@[a12+0]	,r0
 	ld		r0			,#0x6e	
	ld		a12			,#YDMAEADRH
	ldb		@[a12+0]	,r0
	ld		r0			,#0x80	 	
	ld		a12			,#YDMAEADRL
	ldb		@[a12+0]	,r0
	
	ld		r0			,#0x0	
	ld		a12			,#YDMANUMH
	ldb		@[a12+0]	,r0
 	ld		r0			,#0x6c+48	
 	ld		a12			,#YDMANUML
	ldb		@[a12+0]	,r0 

	ld		r0			,#0x50			// block1
	ld		a12			,#YDMACOM
	ldb		@[a12+0]	,r0

	nop
	nop
	nop
%66	
	ldb		r0			,@[a12+0]
	and		r0			,#3
	cmp		eq,r0		,#0
	brf		%b66
*/	
	ret
	
	end		

⌨️ 快捷键说明

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