📄 def_svcd_command.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 + -