📄 lsp34.asm
字号:
LSP34_DEBUG .SET 0
.IF LSP34_DEBUG
.version 50
.mmregs
;--------
.BSS ACCBUF,2
.BSS IBUF,1
.BSS TJ,2
TEMPLSP .USECT "ONCHIP1",10
FINDEX .USECT "ONCHIP1",10
.data
;LSP .INT 34eh,8ceh,1093h,171eh,24a6h,27b3h,2d4dh,34b3h,39b5h,3b57h
;LSP .INT 411h,578h,0dc2h,18a7h,1dbfh,205dh,2980h,2b70h,32f3h,3601h
LSP .INT 61AH,69CH,0D83H,1420H,1C3EH,207BH,27CCH,2BC7H,320DH,3668H
; ;// 2, 10, 10, 10, 15, 6, 7, 7, 7, 6,
LSPTAB .COPY "LSPTAB.DAT"
BITS_1 .INT 7,15,15,15,15,7,7,7,7,7 ;//{3, 4, 4, 4, 4, 3, 3, 3, 3, 3};
;----------
.text
CALL C50_INIT
LDP #ACCBUF
CALL LSP34
HERE B $
.ENDIF
;------------
.BSS TLSP_0,1 ;LSP34
.BSS TLSP_1,1
.BSS TLSP_2,1
.BSS TLSP_0_M,1
.BSS TLSP_1_M,1
.BSS LOW,1
.BSS LEVELS,1
.BSS ERRORDN,1
.BSS ERRORUP,1
;=================================
LSP34
LDP #IBUF
LAR AR7,#P10_1
LAR AR0,#FINDEX
LAR AR1,#LSPTAB
LAR AR2,#LSP
LAR AR3,#BITS_1
LAR AR4,#TEMPLSP
LACC #2
SAMM INDX
;=================================
; for (i = 0; i < no; i++)
; { levels = (1 << bits[i]) - 1;
; low = dist = fabs(freq[i] - *newlsptab[i] );
; findex[i] = 0;
; TEMPLSP[I]=*newlsptab[i];
;=================================
LACL #0
SACL IBUF
MAR *,AR3
LSP34_FOR
LACC #LSPTAB
ADD IBUF,4
SAMM AR5 ;PIPELINE
;LACC *+,0,AR2
LACC *+,0,AR5
SACL LEVELS
LACC *+,0,AR4
SACL *,0,AR2;!!!!!!!!!!!!!!!
SUB *,0,AR0
ABS
SACL LOW
LACL #0
SACL *,0,AR2
;=========================================
; for (j = 1; j <= levels; j++)
; { dist = fabs(freq[i] - newlsptab[i][j]);
; if (dist < low)
; { low = dist; findex[i] = j; TEMPLSP[i]=newlsptab[i][j]; } }
;=========ARP=2================================
LACC LEVELS
SUB #1
SAMM BRCR
RPTB LSP34_FOR_J-1
LACC *,0,AR5
SUB *+,0,AR0
ABS
SACB
LACC LOW
EXAR
CRLT
BCND LSP34_FOR_J_1,NC ;jump if DIST>=LOW.. low<=dist
SACL LOW
LAMM BRCR
SUB LEVELS
ABS
SACL *,0,AR5
MAR *-
LACC *+,0,AR4
SACL *,0,AR2
LSP34_FOR_J_1
MAR *,AR2
NOP
LSP34_FOR_J
;=========================================
; if (i > 0)
; { if (newlsptab[i][findex[i]] <= newlsptab[i - 1][findex[i - 1]])
; {tlsp_0=newlsptab[i][findex[i]];
; tlsp_1=newlsptab[i-1][findex[i-1]];
; //tlsp_2=newlsptab[i-2][findex[i-2]];
; tlsp_0_m=newlsptab[i][mmin(findex[i] + 1, levels)];
; tlsp_1_m=newlsptab[i - 1][mmax(findex[i - 1] - 1, 0)];
;=========================================
LACC IBUF
BCND LSP34_NEXT_FOR,EQ
MAR *,AR4
LACC *-
SACL TLSP_0
SACB
LACC *+
SACL TLSP_1
CRLT ;jump if TLSP_1<TLSP_0
BCND LSP34_NEXT_FOR,C
SBRK #2
LACC *0+ ;INDX=2
SACL TLSP_2
MAR *,AR0
;-------------
LACC *-,0,AR5 ;tlsp_0_m=newlsptab[i][mmin(findex[i] + 1, levels)];
ADD #1
SACB
LACC LEVELS
CRLT ;TJ=ACCB=mmin(findex[i] + 1, levels)
SACL TJ
LACC #LSPTAB
ADD IBUF,4
ADDB;!!!!!!!!
SAMM AR5 ;PIPELINE
NOP
NOP
LACC *,0,AR0
SACL TLSP_0_M
;------------
LACC *+,0,AR5 ;tlsp_1_m=newlsptab[i - 1][mmax(findex[i - 1] - 1, 0)];
SUB #1
SACB
LACL #0
CRGT ;TJ[1]=ACCB=mmax(findex[i - 1] - 1, 0)
SACL TJ+1
LACC #LSPTAB-16
ADD IBUF,4
ADDB
SAMM AR5 ;PIPELINE
NOP
NOP
LACC *,0,AR2
SACL TLSP_1_M
;=========================================
; errorup = fabs(freq[i] - newlsptab[i][mmin(findex[i] + 1, levels)])
; + fabs(freq[i - 1] - newlsptab[i - 1][findex[i - 1]]);
;=========================================
LACC *-,0
SUB TLSP_0_M
ABS
SACB
LACC *+,0
SUB TLSP_1
ABS
ADDB
SACL ERRORUP
;=========================================
; errordn = fabs(freq[i] - newlsptab[i][findex[i]]) +
; fabs(freq[i - 1] - newlsptab[i - 1][mmax(findex[i - 1] - 1, 0)]);
;=========================================
LACC *-,0
SUB TLSP_0
ABS
SACB
LACC *+,0,AR0
SUB TLSP_1_M
ABS
ADDB
SACL ERRORDN
;=========================================
; if (errorup < errordn)
; { //findex[i] = mmin(findex[i] + 1, levels);
;=======ARP=0==================================; jump if errorup>=errordn
LACC ERRORDN
SACB
LACC ERRORUP
CRGT
BCND LSP34_DN,C
;=========================================
; { findex[i] = mmin(findex[i] + 1, levels);
; while (newlsptab[i][findex[i]] < newlsptab[i-1][findex[i-1]])
; findex[i] = mmin(findex[i] + 1, levels); }
;=======ARP=0==================================;
LSP34_UP
MAR *,AR0
LACC TJ
SACL *
;=========================================
; while (newlsptab[i][findex[i]] < newlsptab[i-1][findex[i-1]])
; findex[i] = mmin(findex[i] + 1, levels); }
;=======ARP=0==================================
LSP34_UP_WHILE
LACC #LSPTAB ;tlsp_0=newlsptab[i][findex[i]];
ADD IBUF,4
ADD *-,0
SAMM AR5 ;PIPELINE
;--------------------------
LACC #LSPTAB-16 ;tlsp_1=newlsptab[i-1][findex[i-1]];
ADD IBUF,4
ADD *+,0,AR5
SAMM AR6 ;PIPELINE
;-------
LACC *,0,AR4
SACL *,0,AR6
LACC *,0,AR4
;-------------------------jump if tlsp_0>=tlsp_1
SACB
LACC *,0,AR0
CRGT
BCND LSP34_NEXT_FOR,C
LACC *,0
ADD #1
SACB
LACC LEVELS
CRLT
;SACL TJ
SACL *,0,AR0
B LSP34_UP_WHILE
LSP34_DN
;=========================================
; else if (i == 1)
; { findex[i - 1] = mmax(findex[i - 1] - 1, 0);
; templsp[i-1] =newlsptab[i-1][findex[i-1]];}
;=========================================
LACC IBUF
SUB #1
BCND LSP34_DN_NOT1,GT
LSP34_DN_1
MAR *,AR0
MAR *-
LACC TJ+1
SACL *,0,AR4
;---------
LACC #LSPTAB-16
ADD IBUF,4
SAMM AR5
MAR *-,AR5
LACC *,0,AR4 ;ACC=newlsptab[i-1][findex[i-1]]
SACL *+
B LSP34_NEXT_FOR
;=========================================
; else if(newlsptab[i - 1][mmax(findex[i - 1] - 1, 0)]
; > newlsptab[i - 2][findex[i - 2]])
; findex[i - 1] = mmax(findex[i - 1] - 1, 0);
;=========================================
LSP34_DN_NOT1
LACC TLSP_1_M
SACB ;jump if tlsp_2>=tlsp_1_m
LACC TLSP_2
CRGT
BCND LSP34_UP,C
B LSP34_DN_1
;=========================================
LSP34_NEXT_FOR
LACC IBUF
ADD #1
SACL IBUF
MAR *,AR0
MAR *+,AR2
MAR *+,AR4
MAR *+,AR7
BANZ LSP34_FOR,*-,AR3
;=========================================
LSP34_END
LACC #TEMPLSP
SAMM BMAR
MAR *,AR0
LAR AR0,#LSP
RPT #P10_1
BLDD BMAR,*+
RET
;=================================
.IF LSP34_DEBUG
.INCLUDE "C50_INIT.ASM"
.INCLUDE "SET_CON.ASM"
.ENDIF
;=================================
; for (i = 0; i < no; i++)
; { levels = (1 << bits[i]) - 1;
; low = dist = fabs(freq[i] - *newlsptab[i] ); findex[i] = 0;
; for (j = 1; j <= levels; j++)
; { dist = fabs(freq[i] - newlsptab[i][j]);
; if (dist < low)
; { low = dist; findex[i] = j; templsp[i]=newlsptab[i][j]; }
; }
; if (i > 0)
; { if (newlsptab[i][findex[i]] <= newlsptab[i - 1][findex[i - 1]])
; { errorup = fabs(freq[i] - newlsptab[i][mmin(findex[i] + 1, levels)])
; + fabs(freq[i - 1] - newlsptab[i - 1][findex[i - 1]]);
; errordn = fabs(freq[i] - newlsptab[i][findex[i]]) +
; fabs(freq[i - 1] - newlsptab[i - 1][mmax(findex[i - 1] - 1, 0)]);
; if (errorup < errordn)
; { findex[i] = mmin(findex[i] + 1, levels);
; while (newlsptab[i][findex[i]] < newlsptab[i-1][findex[i-1]])
; findex[i] = mmin(findex[i] + 1, levels);
; }
; else if (i == 1)
; { findex[i - 1] = mmax(findex[i - 1] - 1, 0);
; templsp[i-1] =newlsptab[i-1][findex[i-1]];}
; else if (newlsptab[i - 1][mmax(findex[i - 1] - 1, 0)] >
; newlsptab[i - 2][findex[i - 2]])
; findex[i - 1] = mmax(findex[i - 1] - 1, 0);
; else
; { findex[i] = mmin(findex[i] + 1, levels);
; while (newlsptab[i][findex[i]] < newlsptab[i-1][findex[i-1]])
; findex[i] = mmin(findex[i] + 1, levels);
; } } } }
; for (i = 0; i < no; i++) freq[i] = newlsptab[i][findex[i]] ;
;}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -