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

📄 spf_dec.s

📁 关于DVD上的PCM的解码的代码,PCM的DSP压缩,解调的算法,用RISC32指令来写.
💻 S
📖 第 1 页 / 共 2 页
字号:
	mov	a3(1*4), r3
	
	movi	AGRAdr0, local_temp_buf_byte
	mov	r3, a2(1*4)		//save 1/2 left-over word
	mov	a0(1*4), r3
	j	Lchannel_continue


L5_second_blk:

	movi	AGRAdr0, local_temp_buf_byte
	nop
	shr	r3, a0(1*4), 16		//get 1/2 left-over word
	shl	r4, a2(0*4), 16
	or	a3(1*4), r3, r4
	shr	r3, a2(1*4), 16
	shl	r4, a2(0*4), 16
	or	a3(1*4), r3, r4
	shr	r3, a2(1*4), 16
	mov	a3(1*4), r3
	jsr	r29, SUB_5_channel

	movi	AGRAdr0, local_temp_buf_byte
	mov	r3, a2(1*4)		//save 1 left-over word
	mov	a0(1*4), r3
	j	Lchannel_continue

L5_third_blk:

/*	movi	AGRAdr0, local_temp_buf_byte
	nop
	mov	r3, a0(1*4)
	mov	a3(1*4), r3
	mov	r3, a2(1*4)
	mov	a3(1*4), r3
	mov	r3, a2(0*4)
	andi	a3(1*4), r3, 0xffff
	jsr	r29, SUB_5_channel
*/
	
L5_fourth_blk:	
L5_fifth_blk:	
		
	j	Lchannel_continue

L6_channel:
L7_channel:
L8_channel:	
Lchannel_continue:

	nop
	nop
	j	Lupdate_channel_count

//------------------------ 96k -----------------------------------	
L96k_case:

	tsti	r10, 1
	beq	L1_channel_96k
	tsti	r10, 2
	beq	L2_channel_96k
	tsti	r10, 3
	beq	L3_channel_96k
	tsti	r10, 4
	beq	L4_channel_96k
	tsti	r10, 5
	beq	L5_channel_96k
	tsti	r10, 6
	beq	L6_channel_96k
	tsti	r10, 7
	beq	L7_channel_96k
	tsti	r10, 8
	beq	L8_channel_96k

//---------------------------------------------------
L1_channel_96k:	

	movi	TrapReg,0
	nop
	nop
#ifdef	NON_DEF
	loop	64, L1_channel_loop_96k
	mov	r3, a2(1*4)
	andi	r3, 0xffff		//throw away second sample
	mov	a3(1*4), r3
	mov	a3(1*4), r0		//clear the non-existing channels
	mov	a3(1*4), r0
	mov	a3(1*4), r0
	mov	a3(1*4), r0
	mov	a3(1*4), r0
L1_channel_loop_96k:	
#else
	loop	128, L1_channel_loop_96k
	mov	r3, a2(1*4)
	andi	r3, 0xffff		//throw away second sample
	mov	a3(1*4), r3
	mov	a3(1*4), r0		//clear the non-existing channels
	mov	a3(1*4), r0
L1_channel_loop_96k:
#endif
	movi	TrapReg,1<<2
	
	j	Lchannel_continue_96k

//---------------------------------------------------
L2_channel_96k:

	movi	TrapReg,0
	nop
	nop
#ifdef	NON_DEF
	movi	r1, 0xffff
	loop	32, L2_channel_loop_96k
	and	r3, r1, a2(0*4)
	mov	a3(1*4), r3		//L
	shr	r3, a2(2*4), 16
	mov	a3(1*4), r3		//R
	mov	a3(1*4), r0		//clear the non-existing channels
	mov	a3(1*4), r0
	mov	a3(1*4), r0
	mov	a3(1*4), r0
L2_channel_loop_96k:
#else
	loop	64, L2_channel_loop_96k
	mov	r3, a2(2*4)
	mov	a3(1*4), r3
	mov	a3(1*4), r0		//clear the non-existing channels
	mov	a3(1*4), r0
L2_channel_loop_96k:
#endif
	movi	TrapReg,1<<2
	
	j	Lchannel_continue_96k

//---------------------------------------------------
L3_channel_96k:

	tsti	r19, 0
	beq	L3_first_blk_96k
	tsti	r19, 1
	beq	L3_second_blk_96k
	tsti	r19, 2
	beq	L3_third_blk_96k

L3_first_blk_96k:

	jsr	r29, SUB_3_channel_96k
	movi	AGRAdr0, local_temp_buf_byte
	mov	r3, a2(1*4)		//save 2 left-over words
	mov	a0(1*4), r3
	mov	r3, a2(1*4)
	mov	a0(1*4), r3
	j	Lchannel_continue_96k

L3_second_blk_96k:

	movi	AGRAdr0, local_temp_buf_byte
	nop
	mov	r3, a0(1*4)		//get left-over from previous block
	mov	a3(1*4), r3
	mov	r3, a0(0*4)
	andi	r3, 0xffff
	mov	a3(1*4), r3
	mov	a3(1*4), r0		//clear the non-existing channels
	shr	r3, a0(1*4), 16
	shl	r4, a2(0*4), 16		//get new data
	or	a3(1*4), r3, r4
	shr	r3, a2(1*4), 16
	mov	a3(1*4), r3
	mov	a3(1*4), r0		//clear the non-existing channels
	
	jsr	r29, SUB_3_channel_96k
	
	movi	AGRAdr0, local_temp_buf_byte
	mov	r3, a2(1*4)		//save 1 left-over words
	mov	a0(1*4), r3
	j	Lchannel_continue_96k

L3_third_blk_96k:

	movi	AGRAdr0, local_temp_buf_byte
	nop
	mov	r3, a0(1*4)		//get left-over from previous block
	mov	a3(1*4), r3
	mov	r3, a2(0*4)		//get new data
	andi	r3, 0xffff 
	mov	a3(1*4), r3
	mov	a3(1*4), r0		//clear the non-existing channels
	shr	r3, a2(1*4), 16
	shl	r4, a2(0*4), 16		//get new data
	or	a3(1*4), r3, r4
	shr	r3, a2(1*4), 16
	mov	a3(1*4), r3
	mov	a3(1*4), r0		//clear the non-existing channels
	
	jsr	r29, SUB_3_channel_96k
	
	j	Lchannel_continue_96k

//---------------------------------------------------
L4_channel_96k:
	movi	TrapReg,0
	nop
	nop
#ifdef	NON_DEF
	loop	32, L4_channel_loop_96k
#else
	loop	64, L4_channel_loop_96k
#endif
	mov	r3, a2(0*4)
	mov	a3(1*4), r3
	mov	r3, a2(0*4)
	mov	a3(1*4), r3
	mov	a3(1*4), r0		//clear the non-existing channels
L4_channel_loop_96k:
	movi	TrapReg,1<<2
	
	j	Lchannel_continue_96k

//---------------------------------------------------
L5_channel_96k:
	tsti	r19, 0
	beq	L5_first_blk_96k
	tsti	r19, 1
	beq	L5_second_blk_96k
	tsti	r19, 2
	beq	L5_third_blk_96k
	tsti	r19, 3
	beq	L5_fourth_blk_96k
	tsti	r19, 4
	beq	L5_fifth_blk_96k
	
L5_first_blk_96k:
	
	jsr	r29, SUB_5_channel_96k
	mov	r3, a2(1*4)
	mov	a3(1*4), r3
	mov	r3, a2(1*4)
	mov	a3(1*4), r3
	mov	r3, a2(0*4)
	andi	r3, 0xffff
	mov	a3(1*4), r3
	
	movi	AGRAdr0, local_temp_buf_byte
	mov	r3, a2(1*4)		//save 1/2 left-over word
	mov	a0(1*4), r3
	j	Lchannel_continue_96k


L5_second_blk_96k:

	movi	AGRAdr0, local_temp_buf_byte
	nop
	shr	r3, a0(1*4), 16		//get 1/2 left-over word
	shl	r4, a2(0*4), 16
	or	a3(1*4), r3, r4
	shr	r3, a2(1*4), 16
	shl	r4, a2(0*4), 16
	or	a3(1*4), r3, r4
	shr	r3, a2(1*4), 16
	mov	a3(1*4), r3
	jsr	r29, SUB_5_channel_96k

	movi	AGRAdr0, local_temp_buf_byte
	mov	r3, a2(1*4)		//save 1 left-over word
	mov	a0(1*4), r3
	j	Lchannel_continue_96k

L5_third_blk_96k:

/*	movi	AGRAdr0, local_temp_buf_byte
	nop
	mov	r3, a0(1*4)
	mov	a3(1*4), r3
	mov	r3, a2(1*4)
	mov	a3(1*4), r3
	mov	r3, a2(0*4)
	andi	a3(1*4), r3, 0xffff
	jsr	r29, SUB_5_channel_96k
*/
	
L5_fourth_blk_96k:	
L5_fifth_blk_96k:	
		
	j	Lchannel_continue_96k

L6_channel_96k:
L7_channel_96k:
L8_channel_96k:	
Lchannel_continue_96k:

//-----------------------------------------------------

		
Lupdate_channel_count:		
	
	addi	r19, 1			//inc channel count

	addi	r18, 1
	tst	r18, r17
	blt	Lchannel_loop_start
	
//****************************************************		
	

			
	movb	r1,LBblknum
	addi	r1,1
	tsti	r1, 6
	blte	blk_ok
	movi	r1,1		; starts with 1
blk_ok:	
	movb	LBblknum,r1

	mult	r4, r13, r17		//#blk * #chan
	dlw	r1, Stream_Start
	dlw	r2, Stream_End
#ifdef	NON_DEF
	shl	r4, 6			//*16*4
#else
	shl	r4, 7			//*32*4
#endif
	add	r0, r21, r4
	multi	r10, r4, 3		//*6/2 (6 blk per PTS.16-bit per word)
	tst	r0, r2
	blt	end_PCM_decode
	subi	r0, PCM_IBUF_SIZE	;circular IBUF read ptr
end_PCM_decode:
//	dsw	r0, Stream_Rd_Ptr	;update IBUF read ptr
	SvStrRdPtr	r0
#if LS388
	rswi	r0, Comm_Reg3		//for host
	andi	r10,r0,0xffff
	movh	r3,LIold_rd_ptr
	tst	r10,r3
	bgte	1f
	addi	r10,PCM_IBUF_SIZE
1:	sub	r10,r3
	movh	LIold_rd_ptr,r0
	movw	r3,LWbytecount
	add	r3,r10
	movw	LWbytecount,r3
#else	// LS388
	movh	LIfrmsize, r10		;for PTS
#endif	// LS388
	dsw	r4, MIN_IBUF_VAR	;for testing buffer emptyness 

.if	0
	dlw	r1, Stream_Start
	dlw	r2, Stream_End
	addi	r0, r21, OBUF_SIZE/6
//	dsw	r0, Stream_Rd_Ptr	;update IBUF read ptr
	SvStrRdPtr	r0
	tst	r0, r2
	blt	end_PCM_decode
//	dsw	r1, Stream_Rd_Ptr	;reset IBUF read ptr
	SvStrRdPtr	r1
end_PCM_decode:	
.endif
	
	j	r31
	
	 
// sub-routines
	
SUB_3_channel:
	movi	TrapReg,0
	nop
	nop	
	loop	42, L3_channel_loop
	mov	r3, a2(1*4)
	mov	a3(1*4), r3
	mov	r3, a2(0*4)
	andi	r3, 0xffff
	mov	a3(1*4), r3
	mov	a3(1*4), r0	//clear the non-existing channels
	shr	r3, a2(1*4), 16
	shl	r4, a2(0*4), 16
	or	a3(1*4), r3, r4
	shr	r3, a2(1*4), 16
	mov	a3(1*4), r3
	mov	a3(1*4), r0	//clear the non-existing channels
L3_channel_loop:
	movi	TrapReg,1<<2
	j	r29

SUB_5_channel:
	movi	TrapReg,0
	nop
	nop		
	loop	25, L5_channel_loop
	mov	r3, a2(1*4)
	mov	a3(1*4), r3
	mov	r3, a2(1*4)
	mov	a3(1*4), r3
	mov	r3, a2(0*4)
	andi	r3, 0xffff
	mov	a3(1*4), r3
	shr	r3, a2(1*4), 16
	shl	r4, a2(0*4), 16
	or	a3(1*4), r3, r4
	shr	r3, a2(1*4), 16
	shl	r4, a2(0*4), 16
	or	a3(1*4), r3, r4
	shr	r3, a2(1*4), 16
	mov	a3(1*4), r3
L5_channel_loop:
	movi	TrapReg,1<<2
	j	r29

SUB_3_channel_96k:
	movi	TrapReg,0
	nop
	nop
	loop	42, L3_channel_loop_96k
	mov	r3, a2(1*4)
	mov	a3(1*4), r3
	mov	r3, a2(0*4)
	andi	r3, 0xffff
	mov	a3(1*4), r3
	mov	a3(1*4), r0	//clear the non-existing channels
	shr	r3, a2(1*4), 16
	shl	r4, a2(0*4), 16
	or	a3(1*4), r3, r4
	shr	r3, a2(1*4), 16
	mov	a3(1*4), r3
	mov	a3(1*4), r0	//clear the non-existing channels
L3_channel_loop_96k:
	movi	TrapReg,1<<2
	j	r29

SUB_5_channel_96k:
	movi	TrapReg,0
	nop
	nop
	loop	25, L5_channel_loop_96k
	mov	r3, a2(1*4)
	mov	a3(1*4), r3
	mov	r3, a2(1*4)
	mov	a3(1*4), r3
	mov	r3, a2(0*4)
	andi	r3, 0xffff
	mov	a3(1*4), r3
	shr	r3, a2(1*4), 16
	shl	r4, a2(0*4), 16
	or	a3(1*4), r3, r4
	shr	r3, a2(1*4), 16
	shl	r4, a2(0*4), 16
	or	a3(1*4), r3, r4
	shr	r3, a2(1*4), 16
	mov	a3(1*4), r3
L5_channel_loop_96k:
	movi	TrapReg,1<<2
	j	r29

	

⌨️ 快捷键说明

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