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

📄 mp3decnew.s

📁 samsung 9908DVD源代码,
💻 S
📖 第 1 页 / 共 5 页
字号:
	ret
;+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
;	function: reconstruct variables in order to use 1024-buffer
;		  rp0: the current pointer for scalefactor and huffman code+etc
;		 si/a: the previous rest value resulting from shift
;			   because data is aligned byte, but fetched by word.
;	rpd0	rpdi.adr[4:0]
;			the base address of global variable for MPEG process
;	rpd1	rpdi.addr[4:0] / rpd1.adr[3:0]
;			the base address of global variable for MPEG process
;	especially, rpd0/rpd1 is not varied throughout routines
;
;+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
RestoreForDecoding::
	eld		c		,rpd1.index_GcopyRp1					;recover rp1
	eld		rp1		,c
	eld		b		,rpd1.index_GcopySr	
	eld		sr		,b									;recover SI register
	eld		b		,rpd1.index_GcopyB					;recover B register

	ret
StoreForNextDecoding::
	eld		rpd1.index_GcopyB,	b							;store B register
	eld		b		,rp1
	eld		rpd1.index_GcopyRp1,	b						;store rp1 register
	eld		b		,sr	
	eld		rpd1.index_GcopySr,	b							;store SI register

	ret
;+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
;		rp0						scalefactor pointer
;		idl1					scalefac_compress table pointer(for temp job)
;		idh						the pointer of ptr_mpegInformation
;		bank 1's mal is used for checking USED_BITS
;+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
GetScalefactor:
	eld		sd0		,#((-1&0fh)<<12)|(1<<8)|((6&0fh)<<4)|(5<<0)	

	eld		rp0		,#Area_Scalefactor						;scalefactor pointer
	
	ldb		r0		,@[a13+Index_Mode]						//2002 insert
	cmp		eq		,r0		,#const_mono					//2002 insert	
	brt		Mono_channel									//2002 insert
	
	ldb		r0		,@[a13+Index_ChannelLoop]
	cmp		eq		,r0		,#0
	brf		pass_channel		
	erpn	rp0		,#SizeOfScalefactor

	eld		a		,rpd1.index_Gscfi	
	eld		sg		,a
	enmsk	sg		,#4

	jmp		pass_channelEnd			
Mono_channel												//2002 insert
	erpn	rp0		,#SizeOfScalefactor						//2002 insert
	
pass_channel		
	eld		a		,rpd1.index_Gscfi	
	esra	a
	esra	a
	esra	a
	esra	a
	eld		sg		,a
pass_channelEnd		


	eld		a		,rpd0.index_scalefacCompress				
															;a[23:16]=global_gain
															;a[15:8]=scalefac_compress
															;a[7:0]=scalefac_compress					
															; 0x221638(tbl_scalefacCompress)
	ecld	r0		,a
	eld		a		,#tbl_scalefacCompress
	efz8	a
	esub	a		,#0x8000
	esla	a
	ecld	r1		,a
	add		r0		,r1										//#0x1638
	ld		r3		,#0x22
	ld		e12		,r3
	ld		r12		,r0	
															;compression table	
	ldb		r1		,@[a12+0]
	add		r12		,#16
	efz16	a	
	ecld	a		,r1
	eld		sa		,a										;sa<-slen1
	ldb		r2		,@[a12+0]
	ecld	a		,r2	
	eld		si		,a										;si<-slen2	
	eld		a		,rpd1.index_GranuleLoop
	ecld	r2		,a
	xor		r2		,#01

	es		me1
	ecr		ma0												;Clear USED_BITS	
	eld		a		,rpd0.index_blockType					;a[23:16]<-windowSwitchingFlag
															;a[15:8]<-blockType
															;a[7:0]<-mixedBlockFlag
	esra	a
	etst	nc		,t										;c<-mixedBlockFlag
	efs8	a
	ecp		a		,#((1<<16)|(const_shortBlock<<8))>>1 	;short&switching
	enop
	bra		ec0		,GetScalefactorLongBlock				;ec0:nz

	ld		r6		,#5										;short sfb(0 to 5)loop
	bra		ec2		,GetScalefactorShortBlock

	ld		r6		,#7										;long sfb(0 to 7)loop	
ScalefactorMixedLongLoop
	push	a14	
	jsr		GetNBitFromBitstreamMP3
	pop		a14
	bnzd	r6		,ScalefactorMixedLongLoop
	eld		@rp0+d0	,sg	

	ld		r6		,#2										;short sfb(3 to 5)loop	
GetScalefactorShortBlock

ScalefactorMixedShortSlen1Loop	
	push	a14
	jsr		GetNBitFromBitstreamMP3
	pop		a14

	eld		@rp0+d0	,sg
	
	push	a14
	jsr		GetNBitFromBitstreamMP3
	pop		a14

	eld		@rp0+d0	,sg

	push	a14
	jsr		GetNBitFromBitstreamMP3
	pop		a14

	bnzd	r6		,ScalefactorMixedShortSlen1Loop	
	eld		@rp0+d0	,sg
	
	eld		sa		,si										;sa<-slen2		
	ld		r6		,#5										;short sfb(6 to 11)loop		
ScalefactorMixedShortSlen2Loop	
	push	a14	
	jsr		GetNBitFromBitstreamMP3
	pop		a14

	eld		@rp0+d0	,sg
	
	push	a14
	jsr		GetNBitFromBitstreamMP3
	pop		a14

	eld		@rp0+d0	,sg

	push	a14
	jsr		GetNBitFromBitstreamMP3
	pop		a14

	bnzd	r6		,ScalefactorMixedShortSlen2Loop
	eld		@rp0+d0	,sg

	eld		a		,#0
	eld		@rp0+d0	,a										;fill a last sfb'scalefactor[0] with zero
	eld		@rp0+d0	,a										;fill a last sfb'scalefactor[1] with zero
	eld		@rp0+d0	,a										;fill a last sfb'scalefactor[2] with zero

	ret
/*
GetScalefactorLongBlock
	eld		a		,rpd1.index_Gscfi	
	ecld	r3		,a										;r3<-scfi
	and		r3		,#0xff
	sl		r3												;c<-scfi[0]
	cmpu	ge		,r3		,#0x100
	brf		Longscfi2Ext

	cmp		eq		,r2		,#0
	brf		GetScalefactorLongscfi2					;scfi[0]|gr=0,ugt=C&~Z	
Longscfi2Ext
	ld		r6		,#5										;0,1,2,3,4,5
ScalefactorLongscfi1Loop	
	push	a14
	jsr		GetNBitFromBitstreamMP3
	pop		a14
	bnzd	r6		,ScalefactorLongscfi1Loop
	eld		@rp0+d0	,sg

	jmp		Longscfi2Skip
GetScalefactorLongscfi2
	erps	rp0+s1											;rp0+=6
Longscfi2Skip
	and		r3		,#0xff
	sl		r3												;c<-scfi[1]
	cmpu	ge		,r3		,#0x100
	brf		Longscfi3Ext
	
	cmp		eq		,r2		,#0	
	brf		GetScalefactorLongscfi3					;;scfi[1]|gr=0,ugt=C&~Z
Longscfi3Ext
	ld		r6		,#4										;6,7,8,9,10
ScalefactorLongscfi2Loop
	push	a14
	jsr		GetNBitFromBitstreamMP3
	pop		a14

	bnzd	r6		,ScalefactorLongscfi2Loop	
	eld		@rp0+d0	,sg			

	jmp		Longscfi3Skip
GetScalefactorLongscfi3
	erps	rp0+s0											;rp0+=5
Longscfi3Skip	
	eld		sa		,si										;sa<-slen2
	and		r3		,#0xff										;c<-scfi[2]
	sl		r3		
	cmpu	ge		,r3		,#0x100
	brf		Longscfi4Ext
	
	cmp		eq		,r2		,#0
	brf		GetScalefactorLongscfi4							;;scfi[2]|gr=0,ugt=C&~Z
Longscfi4Ext	
	ld		r6		,#4										;11,12,13,14,15	
ScalefactorLongscfi3Loop	
	push	a14
	jsr		GetNBitFromBitstreamMP3
	pop		a14

	bnzd	r6		,ScalefactorLongscfi3Loop
	eld		@rp0+d0	,sg	

	jmp		Longscfi4Skip
GetScalefactorLongscfi4
	erps	rp0+s0											;rp0+=5
Longscfi4Skip
	eld		sa		,si										;sa<-slen2
	and		r3		,#0xff									;c<-scfi[3]
	sl		r3			
	cmpu	ge		,r3		,#0x100
	brf		Longscfi4ExtP
	cmp		eq		,r2		,#0
	brf		GetScalefactorLongscfi4Pass						;;scfi[3]|gr=0,ugt=C&~Z		
Longscfi4ExtP	
	ld		r6		,#4										;16,17,18,19,20
ScalefactorLongscfi4Loop	
	push	a14
	jsr		GetNBitFromBitstreamMP3
	pop		a14

	bnzd	r6		,ScalefactorLongscfi4Loop
	eld		@rp0+d0,sg

	jmp		Longscfi4PassSkip
GetScalefactorLongscfi4Pass
	erps	rp0+s0											;rp0+=5
Longscfi4PassSkip
	eld		a		,#0
	eld		@rp0+d0	,a										;save last scalefactor[i+1] with zero
	xor		r2		,#0x01
	cmp		eq		,r2		,#0
	brf		GetScalefactorRet	

	and		r3		,#0xff
	ecld	a		,r3
	eld		rpd1.index_Gscfi,	a
GetScalefactorRet
	ret
*/	
///////////////////////////////////////////////////////////////////////////////	
GetScalefactorLongBlock
	eld		a		,sg

	ecld	r0		,a										;r3<-scfi
	and		r0		,#0xff
	ld		r3		,r0

	and		r3		,#0x08
	cmp		eq		,r3		,#0x08
	brf		Longscfi1Loop									;scfi[0]|gr=0,ugt=C&~Z	

	cmp		eq		,r2		,#0								;G_mpegGranuleLoop=1,for gr=0	
	brt		Longscfi1Loop

	jmp		GetScalefactorLongscfi2
Longscfi1Loop												;scfi[0]|gr=0,ugt=C&~Z	
	ld		r6		,#5										;0,1,2,3,4,5
ScalefactorLongscfi1Loop	
	push	a14
	jsr		GetNBitFromBitstreamMP3
	pop		a14
	bnzd	r6		,ScalefactorLongscfi1Loop
	eld		@rp0+d0,sg
	jmp		Longscfi2Skip
	
GetScalefactorLongscfi2
	erps	rp0+s1											;rp0+=6
Longscfi2Skip
	ld		r3		,r0					
	and		r3		,#0x04
	cmp		eq		,r3		,#0x04
	brf		Longscfi2Loop									;scfi[0]|gr=0,ugt=C&~Z	
	
	cmp		eq		,r2		,#0										;G_mpegGranuleLoop=1,for gr=0		
	brt		Longscfi2Loop								;;scfi[1]|gr=0,ugt=C&~Z

	jmp		GetScalefactorLongscfi3

Longscfi2Loop
	ld		r6		,#4										;6,7,8,9,10
ScalefactorLongscfi2Loop
	push	a14
	jsr		GetNBitFromBitstreamMP3
	pop		a14
	bnzd	r6		,ScalefactorLongscfi2Loop
	eld		@rp0+d0	,sg			
	jmp		Longscfi3Skip
	
GetScalefactorLongscfi3
	erps	rp0+s0											;rp0+=5
Longscfi3Skip	
	eld		sa		,si										;sa<-slen2
	ld		r3		,r0
	and		r3		,#0x02
	cmp		eq		,r3		,#0x02
	brf		Longscfi3Loop	
	
	cmp		eq		,r2		,#0										;G_mpegGranuleLoop=1,for gr=0	
	brt		Longscfi3Loop						;;scfi[2]|gr=0,ugt=C&~Z
	
	jmp		GetScalefactorLongscfi4
	
Longscfi3Loop		
	ld		r6		,#4										;11,12,13,14,15
ScalefactorLongscfi3Loop	
	push	a14	
	jsr		GetNBitFromBitstreamMP3
	pop		a14
	bnzd	r6		,ScalefactorLongscfi3Loop
	eld		@rp0+d0,sg	
	jmp		Longscfi4Skip
	
GetScalefactorLongscfi4
	erps	rp0+s0											;rp0+=5
Longscfi4Skip
	eld		sa		,si										;sa<-slen2
	ld		r3		,r0
	and		r3		,#0x01
	cmp		eq		,r3		,#0x01
	brf		Longscfi4Loop	

	cmp		eq		,r2		,#0										;G_mpegGranuleLoop=1,for gr=0	
	brt		Longscfi4Loop					;;scfi[3]|gr=0,ugt=C&~Z	

	jmp		GetScalefactorLongscfi4Pass

Longscfi4Loop
	ld		r6		,#4										;16,17,18,19,20
ScalefactorLongscfi4Loop	
	push	a14
	jsr		GetNBitFromBitstreamMP3
	pop		a14
	bnzd	r6		,ScalefactorLongscfi4Loop
	eld		@rp0+d0	,sg
	jmp		Longscfi4PassSkip
	
GetScalefactorLongscfi4Pass
	erps	rp0+s0											;rp0+=5
Longscfi4PassSkip
	eld		a		,#0
	eld		@rp0+d0	,a										;save last scalefactor[i+1] with zero
GetScalefactorRet	
	ret	
;+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
;		rp0						scalefactor pointer
;+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
/*
GetScalefactorLSF:
	es		me1
	
	eld		sd0		,#((-1&0fh)<<12)|(1<<8)|((6&0fh)<<4)|(5<<0)	
	esd2	d0		,#1
	esd2	s0		,#1	
	esd3	s0		,#1
	eld		rp0		,#Area_Scalefactor						;scalefactor pointer
	ldb		r0		,@[a13+Index_ChannelLoop]
//	jr		nz,		$+3
	cmp		eq		,r0		,#0
	brf		scalefactor_ch
	erpn	rp0,	#SizeOfScalefactor
scalefactor_ch		
	eld		a,		rpd0.index_scalefacCompress				
															;a[23:16]=global_gain
															;a[15:8]=scalefac_compress
															;a[7:0]=scalefac_compress	
	efz8	a
	eld		rpd1.index_LlsfBackA	,a
	eld		rpd1.index_GcopyB	,b							;store B register
	esec2	#4


	eld		rp2		,#Area_new_slen
//
	eld		x0		,#0										;x0 -> blocktypenumber
	eld		a		,rpd0.index_blockType
	ecld	r1		,a
	srb		r1   	
  	cmp		eq		,r1		,#2
  	brf		n_zero
	eld		x0		,#1
	
	ecld	r1		,a
	and		r1		,#0xff
	cmp		eq		,r1		,#0
	brt		n_zero
	eld		x0		,#2
n_zero
	
	cmp		eq		,r0		,#1
	brt		bit_rev
	ld		r0		,#1
	jmp		bit_revEnd
bit_rev	
	ld		r0		,#0
bit_revEnd

	eld		a		,rpd1.index_GmpegModeExt										
	ecld	r1		,a
	and		r1		,#0xff
	
	cmp		eq		,r1		,#1
	brf		modeExtNotOr	
modeExtOr	
	cmp		eq		,r0		,#1
	brf		split_ch
      
	eld		a		,rpd1.index_LlsfBackA	
	esra	a		
	ecp		a		,#180
	bra		ec2		,else_comp1	
		
	eld		b		,#36
	push	a14
	jsr		ScaleDiv24
	pop		a14	
	eld		@rp2+d0	,a
	eld		a		,b
	eld		b		,#6
	push	a14
	jsr		ScaleDiv24
	pop		a14
	eld		@rp2+d0	,a
	eld		@rp2+d0	,b
	eld		a		,#0
	eld		@rp2+d0	,a
	
///	ld		r2		,#0
	eld		a		,rpd0.index_preFlag	
	ecld	r2		,a
	and		r2		,#0xff00
	ecld	a		,r2	
	eld		rpd0.index_preFlag	,a	
	eld		y0		,#3										;blocknumber
	jmp		split_chEnd	
else_comp1
///	ecp		a		,#244
///	bra		ec2		,else_comp2
	ecld	r5		,a
	cmpu	ge		,r5		,#244
	brt		else_comp2
	
	esub	a		,#180
	eld		x1		,a
	eld		b		,#64
	push	a14
	jsr		ScaleDiv24
	pop		a14
	esra	b
	esra	b
	esra	b
	esra	b
	eld		@rp2+d0	,b
	
	eld		a		,x1
	eld		b		,#16
	push	a14
	jsr		ScaleDiv24	
	pop		a14
	esra	b
	esra	b
	eld		@rp2+d0	,b
	
	eld		a		,x1
	eld		b		,#4
	push	a14
	jsr		ScaleDiv24
	pop		a14
	eld		@rp2+d0	,b
	
	eld		a		,#0
	eld		@rp2+d0	,a
	
	eld		a		,rpd0.index_preFlag	
	ecld	r2		,a
	and		r2		,#0xff00
	ecld	a		,r2	
	eld		rpd0.index_preFlag	,a	
	eld		y0		,#4										;blocknumber
		
	jmp		split_chEnd	
else_comp2        
	ecp		a		,#255
	bra		ec2		,else_comp3	

	esub	a		,#244
	eld		b		,#3
	push	a14		
	jsr		ScaleDiv24
	pop		a14
	eld		@rp2+d0	,a
	eld		@rp2+d0	,b
	
	eld		a		,#0
	eld		@rp2+d0	,a
	eld		@rp2+d0	,a
	
	eld		a		,rpd0.index_preFlag	
	ecld	r2		,a
	and		r2		,#0xff00
	ecld	a		,r2	
	eld		rpd0.index_preFlag	,a
	eld		y0		,#5										;blocknumber	
		
else_comp3
	jmp		split_chEnd	
		
modeExtNotOr
	cmp		eq		,r1		,#3
	brt		modeExtOr		

split_ch	
	eld		a		,rpd1.index_LlsfBackA		
///	ecp		a		,#400
///	bra		ec2		,else_comp11	
	ecld	r5		,a
	cmpu	ge		,r5		,#400
	brt		else_comp11
	
	esra	a
	esra	a
	esra	a
	esra	a	
	eld		b		,#5		
	push	a14
	jsr		ScaleDiv24
	pop		a14

	eld		@rp2+d0	,a
	eld		@rp2+d0	,b
	
	eld		a		,rpd1.index_LlsfBackA	
	eld		b		,#16
	push	a14
	jsr		ScaleDiv24
	pop		a14
	esra	b
	esra	b
	eld		@rp2+d0	,b
	
	eld		a		,rpd1.index_LlsfBackA	
	eld		b		,#4
	push	a14
	jsr		ScaleDiv24
	pop		a14
	eld		@rp2+d0	,b
	
	eld		a		,rpd0.index_preFlag	
	ecld	r2		,a
	and		r2		,#0xff00
	ecld	a		,r2	
	eld		rp

⌨️ 快捷键说明

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