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

📄 def_svcd_command.s

📁 关于DVD的MPEG2用的DSP代码,在DSP的实现MPEG的压缩,解压算法.
💻 S
字号:
;************************************************************************
; (c)1996 Copyright LuxSonor, Inc. All rights reserved
;
; Revision 1.0
;
;	
;	Module:	General command analyse
;
;	Initial version:	Cecile Foret June 1997
;	Modified:		Jinshi Huang 12/1/98 for LS388/LS500		
;
;	Calling	:			none
;	Called by:			test3.S
;	Return:				none
;	Param in:			none
;
;	Register for return adress=r11
; 
;	Default command configuration :
;	no trebble, no bass
;	no 3Dsound
;	keyshift, key=0.
;
;	COMMAND1=0x10NN	keyshift, NN=key, keyshift cannot be turn off
;						it has to return to default configuration NN=16
;	COMMAND1=0x300N	Trebble, N=filter, N=0: -17dB, N=7: 0dB,N=0xe: 17dB
;	COMMAND1=0x400N	Bass, N=filter, N=0: -17 dB, N=7: 0dB, N=0xe: 17 dB
;	COMMAND1=0x50NN	echo gain, NN=gain+1: the feed back filter
;						N=0 means turn off echo
;	COMMAND1=0x6000	no microphone is used (no mixing)
;			 =0x6001	microphone used (mixing required)
;
;************************************************************************

	.nolist
#include "regdef2.h"
#include "stereo_user.h"
#include "user2.h"
#include "memory2.h"

#ifdef	MSW_ADD_QSOUND
	.extern	QSOUND_CMD_BUF
#endif	// MSW_ADD_QSOUND
	.extern	AVF_CMD_BUF

	.list	
	.data	

	.global SUB_command

;***********************************************************************
;;; PCM_BUF definition
;***********************************************************************
; start @=0x79000, end @=0x7a000, 2K samples
#define PCM_BUF_START_B	0x9000

;
;*******************************************************************
;	Analyse the command 
;*******************************************************************
SUB_command:


;*******************************************************************
;*******************************************************************
;	KEYSHIFT COMMAND 
;*******************************************************************
;*******************************************************************
#ifdef	EFFECT
	movi	DcacheBase, MEM_SEG
	nop
#endif	//EFFECT
	dlw	r0, COMMAND1		; load the command register
	nop
#ifdef	EFFECT
	movi	DcacheBase, DataSeg
	nop
#endif	//EFFECT

#ifdef	MSW_ADD_QSOUND
;*******************************************************************
;	command QSOUND?
;*******************************************************************
	tsti	r0,CMD1_QSOUND
	beq	update_qsound_command
	tsti	r0,CMD1_QSOUND_A
	beq	update_qsound_command
	tsti	r0,CMD1_QSOUND_OFF
	bne	check_command_qsound_done
update_qsound_command:
	dsw	r0,QSOUND_CMD_BUF
	movi	r0,0
check_command_qsound_done:
#endif	// MSW_ADD_QSOUND

;*******************************************************************
;	command AVF?
;*******************************************************************
	andi	r1,r0,CMD1_AVF
	tsti	r1,CMD1_AVF
	bne	check_command_avf_done
	andi	r1,r0,CMD1_AVF_OFF
	andi	r2,r0,0x3
	tsti	r1,CMD1_AVF_OFF
	dlw	r1,AVF_CMD_BUF
	bne	avf_command_on
	not	r2
	and	r1,r2
	tsti	r1,CMD1_AVF
	bne	update_avf_command
	movi	r1,0
	j	update_avf_command
avf_command_on:
	or	r1,r0
update_avf_command:
	dsw	r1,AVF_CMD_BUF
	movi	r0,0
check_command_avf_done:

;*******************************************************************
;	command RESET?
;*******************************************************************
	tsti	r0, 0xbbbb	// 0xbbbb - restart and reload ROM code
	bne		check_command_aaaa
	movi	r3, _start
	j		reset_pcm_buf

check_command_aaaa:
	tsti	r0, 0xaaaa	// 0xaaaa - restart without reload ROM code
	bne		not_command_reset
	movi	r3, SUB_Audio_Effect

reset_pcm_buf:
	movi	DcacheBase,DataSeg
	movi	r0, PCM_BUF_START_B
	movi	r1, 0
	loop	8, reset_pcm_buf_loop	// 8*128*4=0x1000
	loop	128, reset_pcm_buf_loop
	dshr	r1, r0
	addi	r0, 0x2
	dshr	r1, r0
	addi	r0, 0x2
reset_pcm_buf_loop:

#ifdef	EFFECT
	movi	DcacheBase, MEM_SEG
	nop
#endif	//EFFECT
	dsw	r1, COMMAND1		; clear the command register
#ifdef	EFFECT
	movi	DcacheBase, DataSeg
	nop
#endif	//EFFECT
	j		r3

not_command_reset:
;*******************************************************************
;	check other commands?
;*******************************************************************
	shr		r1, r0,12			; r1=type of command
	andi	r2, r0, 0x00ff		; if r2=0, set the command OFF
;	subi	r2, 0x1				; r2=value of step (filter, key...)in all cases

	movi	r4, 0xffff			; to set something OFF

;*******************************************************************
;	no new command ?
;*******************************************************************
	tsti	r1, 0x0				
	beq		nothing_new			; no new command...let run as it runs...

;*******************************************************************
;	key command ?
;*******************************************************************
	tsti	r1, 0x1
	bne		not_keyshift		; key shift command

;	addi	r2, 0x1
#ifdef	EFFECT
	movh	r19,%keyshift_com
	tst	r2,r19
#else	//EFFECT
	tstsh	r2, %keyshift_com	; test if the previous key is the same...
#endif	//EFFECT
	beq		nothing_new

;****** set up the keyshift command *******************************
	movh	%keyshift_com, r2	; set up the new value of key
	movh	%Nkey_value, r2
	movi	r3, 0x1
	movh	%key_change, r3		; the key has to be changed
	j		nothing_new
not_keyshift:

;*******************************************************************
;	Bass command ?
;*******************************************************************
	tsti	r1, 0x4
	bne		not_bass
;****** set up bass command ****************************************
	movh	%bass_com, r2
	j		nothing_new
not_bass:


;*******************************************************************
;	Trebble command 
;*******************************************************************
	tsti	r1, 0x3
	bne		not_trebble
;****** set up trebble command *************************************
	movh	%trebble_com, r2
not_trebble:


;*******************************************************************
;	Echo command 
;*******************************************************************
	tsti	r1, 0x5
	bne		not_echo
;****** set up trebble command *************************************
	subi	r2, 0x1
	movh	%echo_com, r2	; r2 = number of gain 
not_echo:	

nothing_new:


;*******************************************************************
;	Micro command 
;*******************************************************************
	tsti	r1, 0x6
	bne		not_micro
;****** set up microphone command **********************************
	movh	%micro_com,r2	; if no micro, %micro_command=0xffff
	tstsi	r2, 0x0			; if no micro -> no echo either....
	bgte	not_micro
	movh	%echo_com, r4	; reset echo command to no echo...
not_micro:

;*******************************************************************
;	Reset command register 
;*******************************************************************
#ifdef	EFFECT
	movi	DcacheBase, MEM_SEG
	nop
#endif	//EFFECT
#ifdef	MSW_ADD_QSOUND
;*******************************************************************
;	command QSOUND?
;*******************************************************************
	dlw	r0,COMMAND1
	nop
	tsti	r0,CMD1_QSOUND
	beq	qsound_command_detected
	tsti	r0,CMD1_QSOUND_A
	beq	qsound_command_detected
	tsti	r0,CMD1_QSOUND_OFF
	bne	qsound_command_done
qsound_command_detected:
	dsw	r0,QSOUND_CMD_BUF
	j	clear_command1
qsound_command_done:
#endif	// MSW_ADD_QSOUND

;*******************************************************************
;	command AVF?
;*******************************************************************
	andi	r1,r0,CMD1_AVF
	tsti	r1,CMD1_AVF
	bne	check_command_avf_done1
	andi	r1,r0,CMD1_AVF_OFF
	andi	r2,r0,0x3
	tsti	r1,CMD1_AVF_OFF
	dlw	r1,AVF_CMD_BUF
	bne	avf_command_on1
	not	r2
	and	r1,r2
	tsti	r1,CMD1_AVF
	bne	update_avf_command1
	movi	r1,0
	j	update_avf_command1
avf_command_on1:
	or	r1,r0
update_avf_command1:
	dsw	r1,AVF_CMD_BUF
check_command_avf_done1:

clear_command1:
	movi	r0, 0x0
	dsw	r0, COMMAND1
#ifdef	EFFECT
	movi	DcacheBase, DataSeg
	nop
#endif	//EFFECT
	j		r11







⌨️ 快捷键说明

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