?? equalizer.s
字號:
;-----------------------------------------------------------
; The following program will decoding MP3 bitstream
; by S/W Algorithm
; File Name: antalias.s
; copyright jj,Park 1999.2.7
; profile
; 1. 6/7//1999
; - update all
;-----------------------------------------------------------
.include "mp3_def.h"
.include "mp3_ext.h"
SizeOfEqualizerBand equ 22
MP3EqualizerSection
;---------------------------------------------------
;
;void Equalizer()
;{
; if (windowSwitching && blokType = 0x02)
; {
; if (mixedBlock) { //mixed block
; for (i = 0; i < 8;++i) {
; a = coef[i]; ma0 = coef[i+1];
; for (j = freqIndex_l[i];j < freqIndex_l[i+1];++j)
; in[j] *= a; a+=ma0;
; }
; for (i = 8,k = freqIndex_l[8]; i < 22;++i) {
; a = coef[i]; ma0 = coef[i+1];;
; freqLine = freqIndex_l[i+1] - freqIndex_l[i];
; for (j = freqIndex_l[i];j < freqLine;j++,k+=3) {
; if (j > shortEnd)
; j = k+1;
; in[k] *= a; a+=ma0;
; }
; }
; else{ //pure short
; for (i = 0,k = freqIndex_l[0]; i < 22;++i) {
; a = coef[i]; ma0 = coef[i+1];;
; freqLine = freqIndex_l[i+1] - freqIndex_l[i];
; for (j = freqIndex_l[i];j < freqLine;j++,k+=3) {
; if (j > shortEnd)
; j = k+1;
; in[k] *= a; a+=ma0;
; }
; }
; }
; else { //long block
; for (i = 0; i < 22;++i) {
; a = coef[i]; ma0 = coef[i+1];
; for (j = freqIndex_l[i];j < freqIndex_l[i+1];++j)
; in[j] *= a; a+=ma0;
; }
; }
;}
;0308,modification start
;f(x) = y1+x*(y2-y1)/(x2-x1)
;---------------------------------------------------
.if(0)
MP3Equalizer::
eld sd0 ,#((-1&0fh)<<12)|(2<<8)|((-1&0fh)<<4)|(1<<0) ;s0=1, d0=2
eld sd2 ,#((-1&0fh)<<12)|(1<<8)|((-1&0fh)<<4)|(2<<0)
eld sd3 ,#((-1&0fh)<<12)|(1<<8)|((1&0fh)<<4)|(1<<0) ;s0=1
// data,sfb band init
eld c ,rpd1.index_GLongSfBandIndex ;rp2:sfb band index
eld rp2 ,c
erpd rp2+d0 ;rp2<-rp2+1
eld b ,rpd1.index_GptrCurrentDecodingData ;input buffer pointer
eld rp0 ,b
// equalizer mode selection
ldb r0 ,@[a13+Index_EqualizerModeControl]
cmp eq ,r0 ,#5
brt EQ_UserMode
ecld a ,r0
efz16 a
eld x0 ,a
eld y0 ,#SizeOfEqualizerBand
emul x0y0
eld a ,pl
eadd a ,#tbl_EqualizerNormal
eld rp3 ,a
LongBlock
ld r7 ,#21
eld b ,@rp2+s1 ;b<-bands[i+1],rp2<-rp2-1
eld x0 ,@rp0+s0 ;
MP3EqualizerBandLoop
eld c ,@rp2+s0
esub b ,c ;b<-bands[i+1]-bands[i],
;rp2<-rp2+2
ecld r6 ,b
sr r6
dec r6
eld a ,@rp3+s0 ;b<-y1's coefficient
eld ma0 ,@rp3+s0 ;ma0<-(y2-y1)/(x2-x1)'s coefficient
MP3EqualizerFreqLoop
eld y0 ,a ;
emul x0y0 ,x0 ,@rp0+s1
eld b ,prn
eadd a ,ma0 ,@rp0+d0,b ;a<-y1+x*(y2-y1)/(x2-x1)
eld y0 ,a ;
emul x0y0 ,x0 ,@rp0+s1
eld b ,prn
bnzd r6 ,MP3EqualizerFreqLoop
eadd a ,ma0 ,@rp0+d0,b ;a<-y1+x*(y2-y1)/(x2-x1)
bnzd r7 ,MP3EqualizerBandLoop
eld b ,@rp2+s1
ret
// user mode process
EQ_UserMode
ret
.endif
//////////////////////////////////////////////////////////////////////////////////////
//
//////////////////////////////////////////////////////////////////////////////////////
MP3Equalizer::
eld sd0 ,#((-1&0fh)<<12)|(2<<8)|((-1&0fh)<<4)|(1<<0) ;s0=1, d0=2
eld sd2 ,#((-1&0fh)<<12)|(1<<8)|((-1&0fh)<<4)|(2<<0)
eld sd3 ,#((-1&0fh)<<12)|(1<<8)|((1&0fh)<<4)|(1<<0) ;s0=1
eld rp3 ,#tbl_Mp3EQ_Info
eld b ,rpd1.index_GptrCurrentDecodingData ;input buffer pointer
eld rp0 ,b
// equalizer mode selection
eld rp2 ,#tbl_Equalizer
erpd rp2+d0 ;rp2<-rp2+1
LongBlock
// ld r7 ,#10-1
ld r7 ,#9-1
eld x0 ,@rp0+s0 ;
eld b ,@rp2+s1 ;b<-bands[i+1],rp2<-rp2-1
MP3EqualizerBandLoop
// eld y0 ,b
eld c ,@rp2+s0 ;b<-bands[i+1]-bands[i],
esub b ,c
eld y1 ,b
eld x1 ,@rp3+s0 ;step
emul x1y1
eld b ,prn
eld ma0 ,b ;ma<-(y2-y1)/(x2-x1)'s coefficient
eld b ,@rp3+s0 ;band num
esra b
ecld r6 ,b ;r2<-frequency lines
cmp eq ,r6 ,#0
brt pass_one_data
dec r6
pass_one_data
// eld a ,y0 ;b<-y1's coefficient
eld a ,c ;b<-y1's coefficient
MP3EqualizerFreqLoop
eld y0 ,a ;
emul x0y0 ,x0 ,@rp0+s1
eld b ,prn
eadd a ,ma0 ,@rp0+d0,b ;a<-y1+x*(y2-y1)/(x2-x1) ;a<-y1+x*(y2-y1)/(x2-x1)
eld y0 ,a ;
emul x0y0 ,x0 ,@rp0+s1
eld b ,prn
bnzd r6 ,MP3EqualizerFreqLoop
eadd a ,ma0 ,@rp0+d0,b ;a<-y1+x*(y2-y1)/(x2-x1)
bnzd r7 ,MP3EqualizerBandLoop
eld b ,@rp2+s1
////////////////////////////////////////////////////////////
// last band
eld b ,@rp2+s1
eld c ,@rp2+s0 ;b<-bands[i+1]-bands[i],
esub b ,c
eld y1 ,b
eld x1 ,@rp3+s0 ;step
emul x1y1
eld b ,prn
eld ma0 ,b ;ma<-(y2-y1)/(x2-x1)'s coefficient
eld b ,@rp3+s0 ;band num
esra b
ecld r6 ,b ;r2<-frequency lines
sub r6 ,#2
;b<-y1's coefficient
eld a ,c ;b<-y1's coefficient
MP3EqualizerFreqLoop2
eld y0 ,a ;
emul x0y0 ,x0 ,@rp0+s1
eld b ,prn
eadd a ,ma0 ,@rp0+d0,b ;a<-y1+x*(y2-y1)/(x2-x1) ;a<-y1+x*(y2-y1)/(x2-x1)
eld y0 ,a ;
emul x0y0 ,x0 ,@rp0+s1
eld b ,prn
bnzd r6 ,MP3EqualizerFreqLoop2
eadd a ,ma0 ,@rp0+d0,b
ret
//////////////////////////////////////////////////////////////////////////////////////
//
//////////////////////////////////////////////////////////////////////////////////////
MP3SpectrumDisplay::
eld sd0 ,#((-1&0fh)<<12)|(2<<8)|((-1&0fh)<<4)|(1<<0)
eld sd3 ,#((-1&0fh)<<12)|(1<<8)|((1&0fh)<<4)|(1<<0)
ldw r0 ,@[a10+Index_pSpectrumDisplay]
ldw r1 ,@[a10+Index_pSpectrumDisplay+2]
// for test
// ld r0 ,#0x20
// ld r1 ,#0x6000
////////////////////////
ld e12 ,r0
ld r12 ,r1
eld rp3 ,#tbl_Mp3EQ_Info
eld b ,rpd1.index_GptrCurrentDecodingData
eld rp0 ,b
ld r7 ,#10-1
TenBand_Loop
eld y0 ,@rp3+s0
eld b ,@rp3+s0
ecld r6 ,b
cmp eq ,r6 ,#0
brt pass_one_dataSP
dec r6
pass_one_dataSP
eld a ,#0
OneBandLoop
eld c ,@rp0+s0
eabs c
bnzd r6 ,OneBandLoop
eadd a ,c
eld x0 ,a
emul x0y0
eld a ,p
eld b ,pl
ecld r0 ,ah
ecld r1 ,a
slb r0
srb r1
and r1 ,#0x00ff
add r0 ,r1
ldw @[a12+0],r0
ecld r0 ,a
ecld r1 ,bh
slb r0
add r0 ,r1
ldw @[a12+2],r0
bnzd r7 ,TenBand_Loop
add a12 ,#4
ret
//////////////////////////////////////////////////////////////////////////////////////
//
//////////////////////////////////////////////////////////////////////////////////////
MP3LevelMeter::
eld sd0 ,#((-1&0fh)<<12)|(2<<8)|((-1&0fh)<<4)|(1<<0)
eld b ,rpd1.index_GptrCurrentDecodingData
eld rp0 ,b
eld y0 ,#0x38E3 //1/576
ld r6 ,#576-1
eld a ,#0
FrameBandLoop
eld c ,@rp0+s0
eabs c
bnzd r6 ,FrameBandLoop
eadd a ,c
eld x0 ,a
emul x0y0
eld a ,p
eld b ,pl
ecld r0 ,ah
ecld r1 ,a
slb r0
srb r1
and r1 ,#0x00ff
add r0 ,r1 //H16
ecld r2 ,a
ecld r1 ,bh
slb r2
add r2 ,r1 //L16
// for test////////////////////////////////////
// ld r3 ,#0x20
// ld r4 ,#0x6100
// ld e12 ,r3
// ld r12 ,r4
///////////////////////////////////////////////
ldb r1 ,@[a13+Index_ChannelLoop]
cmp eq ,r1 ,#0
brt RightChannelLevel
ldw @[a10+Index_LevelMeterValueL] ,r0
ldw @[a10+Index_LevelMeterValueL+2] ,r2
// for test
// ldw @[a12+0] ,r0
// ldw @[a12+2] ,r2
bra LevelEnd
RightChannelLevel
ldw @[a10+Index_LevelMeterValueR] ,r0
ldw @[a10+Index_LevelMeterValueR+2] ,r2
// for test
// ldw @[a12+4] ,r0
// ldw @[a12+6] ,r2
LevelEnd
ret
end
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -