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

📄 findis.s

📁 samsung 9908DVD源代码,
💻 S
字号:
;-----------------------------------------------------------
;		The following program will decoding MP3 bitstream
;		by S/W Algorithm
;			File Name: find.s
;			copyright jj,Park      1999.2.7
;
;-----------------------------------------------------------
.include	"mp3_def.h"
.include	"mp3_ext.h"

		MP3FindisSection
;+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
;		Function
;			- Finds intensity-stereo mode's sfb,
;			- Because of being difficult to find is'sfb using the results of requantizer
;;	idl1	output		maxLongSfb
;	d		output		maxLongSfb	
;+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++	
FindJointStereoSfb::
	ldb		r0		,@[a13+Index_ChannelLoop]
	inc		r0
	ldb		r5		,@[a13+Index_Mode]				;(G_mpegChannelLoop==0)&(G_mpegMode==01)
	xor		r0		,r5
	cmp		eq		,r0		,#0
	brf		FindJointStereoSfbRet
	
	eld		sd0		,#((-1&0fh)<<12)|(1<<8)|((-1&0fh)<<4)|(0<<0)	
	eld		sd2		,sd0	
	eld		sd3		,#((-1&0fh)<<12)|(1<<8)|((-1&0fh)<<4)|(-3<<0)

	eld		b		,rpd0.index_blockType					;b[23:16]<-windowSwitchingFlag
															;b[15:8]<-blockType
															;b[7:0]<-mixedBlockFlag
	esra	b
	etst	nc		,t										;t<-!mixedBlockFlag
	efs8	b	

	eld		c		,#0x8100
	efs8	c

	ecld	r0		,b
	ecld	r1		,c

	cmp		eq		,r0		,r1
	brf		FindJSSfbLong

///caution
	cmpu	ge		,r0		,r1
	brt		FindJSPureShortBlock

;-----------------------------In case of mixed_block ---------------------------------------
	esec2	#sec_z											;ec2<-z-flag	
	ld		r0		,#0
	ecld	d		,r0
	ld		r6		,#2										;window size
FindJSSfbMixedLoop
	eld		rp3		,#Area_Scalefactor+SizeOfScalefactor+8+10*3+2				;last scalefactor pointer
	eld		c		,rpd1.index_GShortSfBandIndex			;The pointer of short band index	
	eld		rp2		,c
	erpn	rp2		,#13										;position-> [13]

	ld		r7		,#12-3									;sfb size(3,4,5,6,7,8,9,10,11,12)
	push	a14
	jsr		FindShortNonZeroSfb								;return r3
	pop		a14
	
	inc		r7
	ecld	r1		,d										;idl1 is backup of
	cmpu	ge		,r7		,r1
	brt		mixed_d	
	ecld	d		,r7										;update max_sfb		
mixed_d	
	eld		a		,rpd1.index_GZeroPart		
	esla8	a
	ecld	a		,r7
	eld		rpd1.index_GZeroPart	,a	
	eld		c		,rpd1.index_GShortSfBandIndex			;The pointer of short band index		
	eld		rp2		,c
	bnzd	r6		,FindJSSfbMixedLoop
	nop

	ecld	r0		,d										;max_sfb
	cmp		eq		,r0		,#0
	brf		FindJSSfbMixedExit

	esec1	#sec_c											;ec1=c
	eld		rp3		,#Area_Scalefactor+SizeOfScalefactor+7	;points the end_ptr of long_block	
	eld		c		,rpd1.index_GLongSfBandIndex
	eld		rp2		,c

	erpn	rp2		,#7
	ld		r6		,#7	

	jmp		FindJSSfbLongCommon
;-----------------------------In case of pure short_block ---------------------------------------
FindJSPureShortBlock
	esec2	#sec_z												;ec2<-z-flag	
	ld		r6		,#2										;r2<-window loop
FindJSPureShortWindowLoop
	eld		rp3		,#Area_Scalefactor+SizeOfScalefactor+13*3+2		;last scalefactor pointer
	eld		c		,rpd1.index_GShortSfBandIndex			;The pointer of short band index
	eld		rp2		,c
	erpn	rp2		,#13
	ld		r7		,#12										;sfb size
	
	push	a14
	jsr		FindShortNonZeroSfbUp
	pop		a14
	
	eld		a		,rpd1.index_GZeroPart		
	esla8	a
	ecld	r4		,a
	and		r4		,#0xff00
	or		r7		,r4
	ecld	a		,r7
	bnzd	r6		,FindJSPureShortWindowLoop
	eld		rpd1.index_GZeroPart,a							;rpd1.index_LZeroPart[23:16]<-window2 state
															;rpd1.index_LZeroPart[15:8]<-window1 state
															;rpd1.index_LZeroPart[7:0]<-window0 state	
FindJSSfbMixedExit
	esec2	#sec_t											;ec2<-t-flag	

	ret
	
;-----------------------------In case of Long_block ---------------------------------------
FindJSSfbLong
	eld		rp3		,#Area_Scalefactor+SizeOfScalefactor+21	;points the end_ptr of long_block
	eld		c		,rpd1.index_GLongSfBandIndex	
	eld		rp2		,c

	erpn	rp2		,#21
	ld		r2		,#21
FindJSSfbLongCommon
	esec2	#sec_z											;ec2<-z-flag	
	esec0	#sec_le											;ec1=c
	esec1	#sec_nn

	eld		b		,#575									;i
Sb_loop
	eld		a		,#Area_rightChannel
	eadd	a		,b	
	eld		rp0		,a
	eld		a		,@rp0
	ecp		a		,#0
	enop
	bra		ec2		,i_minus

	jmp		Sb_loopEnd
i_minus
	esub	b		,#1
	ecp		b		,#0
	enop
	bra		ec1		,Sb_loop
Sb_loopEnd
	eld		a		,b										;a->sb
	ecld	r6		,b
//	cmp		eq		,r6		,#0xffff
//	brf		pass_sfb2	
//	eld		a		,#0
//pass_sfb2	
	eld		b		,#0
	eld		si		,b	
Sb_bands		   	
	eld		b		,si
	eld		c		,rpd1.index_GLongSfBandIndex	   
	eadd	b		,c
	eld		rp2		,b
	eld		b		,@rp2

	ecp		b		,a
	enop
	bra		ec0		,Sb_bandsMid	
	
	jmp		Sb_bandsEnd
Sb_bandsMid	
	eld		b		,si
	eadd	b		,#1
	eld		si		,b

	jmp		Sb_bands	
Sb_bandsEnd
	eld		b		,si
	ecld	r6		,b
	eld		d		,#0
	ecld	d		,r6

	esec0	#sec_nz
	esec1	#sec_nc											;ec1=c	
	esec2	#sec_t											;ec2<-t-flag		
FindJointStereoSfbRet	

	ret
;---------------------------------------------------------------------
;		r3		Out		The starting sfb of intensity_stereo
;---------------------------------------------------------------------
FindShortNonZeroSfb:	
	eld		b		,#7										;for checking intensity mode
	eld		a		,@rp2+s1									;rp2-=1
FindShortNonZeroSfbLoop
	eld		c		,@rp2+s0
	esub	a		,c										;a<-frequency lines number
	ecld	r1		,a										;r1<-frequency lines number
	dec		r1
	
	eld		si		,a										;backup
	eld		a		,#0

	ld		r0		,r6										;r0<-window
win_loop
	eadd	a		,si
	cmp		eq		,r0		,#0
	brfd	win_loop
	dec		r0	

	eld		c		,@rp2+s0
	eadd	a		,c
	esla	a
	eld		c		,@rp2+s0
	eadd	a		,c
	
	eadd	a		,#Area_rightChannel-1
	eld		rp0		,a										;rp0<-3*sfBandIndex[sfreq].s[sfb]+(win+1)*lines-1

	eld		c		,@rp3+s0
	ecp		b		,c										;rp3-=3
	enop
	bra		ec2		,FindShortNonZeroExit					;ec2=z
	eld		a		,@rp0+s1
FindShortNonZeroFreqLoop	
	enop
	bra		ec0		,FindShortNonZeroExit					;ec0=nz	
	eld		a,		@rp0+s1									;due to delay	
	cmp		eq		,r1		,#0
	brfd	FindShortNonZeroFreqLoop						;frequency line loop
	dec		r1
	bnzd	r7		,FindShortNonZeroSfbLoop					;sfb loop
	eld		a		,@rp2+s1									;due to delay

FindShortNonZeroExit
	ret
FindShortNonZeroSfbUp:
	esec0	#sec_n
ShortSfbLoop	
	eld		a		,@rp2+s1								// a-> lines
	eld		c		,@rp2+s0
	esub	a		,c
	
	eld		si		,a										;backup
	eld		a		,#0
	ld		r0		,r6										;r0<-window
win_loop2
	eadd	a		,si										//si->lines
	cmp		eq		,r0		,#0
	brfd	win_loop2
	dec		r0
		
	eld		c		,@rp2+s0
	eadd	a		,c
	eld		c		,@rp2+s0
	eadd	a		,c
	eld		c		,@rp2+s0
	eadd	a		,c
	esub	a		,#1										//i
lines_loop
	eld		b		,si										//lines
	enop
	bra		ec0		,lines_loopEnd		   
	
	ecp		b		,#0
	enop
	bra		ec2		,lines_loopEnd		   

	eld		b		,#Area_rightChannel
	eadd	b		,a
	eld		rp0		,b
	eld		b		,@rp0
	ecp		b		,#0
	enop
	bra		ec2		,SfbLoopCnt		

	jmp		lines_loopBreak		   
SfbLoopCnt
	esub	a		,#1
	eld		b		,si
	esub	b		,#1
	eld		si		,b

	jmp		lines_loop	
lines_loopEnd	
	cmp		eq		,r7		,#0
	brfd	ShortSfbLoop
	dec		r7
//caution	
//	dec		r7
//
lines_loopBreak		   
	add		r7		,#1	
	esec0	#sec_nz	
	ret
	
	end

⌨️ 快捷键说明

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