📄 tlsppc.asm
字号:
.version 50
.mmregs
.BSS LPC0,1
.BSS LPC,10
.BSS XF,1
.BSS XX,1
.BSS ACCBUF,2
.BSS SIGNFLAG,1
;--------
P10 .SET 10
P10_1 .SET 9
P10_2 .SET P10-2
HP10 .SET P10/2
HP10_1 .SET HP10-1
;-----------
LSPPC_A .USECT "WARRAY",6*2
LSPPC_A1 .USECT "WARRAY",6*2
LSPPC_A2 .USECT "WARRAY",6*2
LSPPC_B .USECT "WARRAY",6*2
LSPPC_B1 .USECT "WARRAY",6*2
LSPPC_B2 .USECT "WARRAY",6*2
LSPPC_P .USECT "WARRAY",5
LSPPC_Q .USECT "WARRAY",5
;-----------
.data
LSP .INT 34eh,8ceh,1093h,171eh,24a6h,27b3h,2d4dh,34b3h,39b5h,3b57h
COSCOR .INT 0e216H,2078H,0fd54H,1eH,0ffffH
LSPCOS .COPY "LSPCOS.DAT" ;cos(i* pi * 0.5*(11.0-2*j)/N) *0x8000u
;----------
.text
CALL C50_INIT
call LSPPC
HERE: NOP
B HERE
;===================================================
LSPPC
LDP #XX
LACC #2
SAMM INDX
;===================================================
; for (i = 0; i < noh + 1; i++)
; { a[i] = 0.; a1[i] = 0.; a2[i] = 0.;
; b[i] = 0.; b1[i] = 0.; b2[i] = 0.; } //LONG
;===================================================
LACC #0
MAR *,AR0
LAR AR0,#LSPPC_A
RPT #11
SACL *+
LAR AR0,#LSPPC_A1
RPT #11
SACL *+
LAR AR0,#LSPPC_A2
RPT #11
SACL *+
LAR AR0,#LSPPC_B
RPT #11
SACL *+
LAR AR0,#LSPPC_B1
RPT #11
SACL *+
LAR AR0,#LSPPC_B2
RPT #11
SACL *+
;===================================================
; for (i = 0; i < noh; i++)
; { acc=(long)freq[2*i]*4l;
; p[i]=-wcos(acc); //2.14
; acc=(long)freq[2*i+1]*4l;
; q[i]=-wcos(acc); }
;===============ARP=0====================================
;LAR AR0,#LSP
LACC ADDR_LSP
SAMM AR0
LAR AR1,#LSPPC_P
LAR AR2,#LSPPC_Q
LAR AR7,#HP10_1
LSPPC_PQ
LACC *+,2,AR1
CALL WCOS
MAR *,AR1
NEG
SACL *+,0,AR0
LACC *+,2,AR2
CALL WCOS
MAR *,AR2
NEG
SACL *+,0,AR7
BANZ LSPPC_PQ,*-,AR0
;===================================================
; xf = 0.0;
; for (k = 0; k < no + 1; k++)
; { xx = 0.0;
; if (k == 0) xx = 0x7fff; //1.0; 4.12
; a[0] = xx + xf; b[0] = xx - xf;
; xf = xx;
;===================================================
LAR AR0,#LPC-1
LACC #0
SACL XF
LAR AR7,#P10
LSPPC_K
LACC #0
SACL XX
LAR AR3,#LSPPC_B
LAMM AR7
SUB #P10
BCND LSPPC_NOTK0,NEQ
LACC #7FFFH
SACL XX
LSPPC_NOTK0
MAR *,AR3
LACC XX
SUB XF
SACL *+ ;B[0]
SACH *-
LAR AR3,#LSPPC_A
LACC XX
ADD XF
SACL *+
SACH *-
LACC XX
SACL XF
;===================================================
; for (i = 0; i < noh; i++)
; { acc=a1[i]; j=0;
; while(acc>0x7fff || acc<-0x8000l) { acc>>=1;j++;}
; acc=acc*p[i]; acc=acc>>(14-j);
; a[i + 1] = a[i] + acc+ a2[i];
; a2[i] = a1[i]; a1[i] = a[i];}
;===================================================
LAR AR1,#LSPPC_P
LAR AR4,#LSPPC_A1
LAR AR5,#LSPPC_A2
LACC #HP10_1
SAMM BRCR
MAR *,AR4
RPTB LSPPC_IA-1
MAR *+
LACC *-,16
OR *,AR6
LAR AR6,#-2
RPT #15
NORM *+
SACH ACCBUF
NOP
NOP
MAR *,AR1
LT *+,AR3
MPY ACCBUF
LAMM AR6
SAMM TREG1
PAC
SATL
SACB
;---------
; a[i + 1] = a[i] + acc+ a2[i];
MAR *+
LACC *-,16
OR *0+,AR5
ADDB
SACB
MAR *+
LACC *-,16
OR *,AR3
ADDB
SACL *+
SACH *0-,0,AR4 ;->A[I]H
; **** a2[i] = a1[i];
MAR *+
LACC *-,16
OR *,AR5
SACL *+
SACH *+,0,AR3
; a1[i] = a[i];} ->A[I]H
LACC *-,16
OR *0+,AR4
SACL *+
SACH *+
LSPPC_IA
;===================================================
; for (i = 0; i < noh; i++)
; { acc=b1[i]; j=0;
; while(acc>0x7fff || acc<-0x8000l) { acc>>=1;j++;}
; acc=acc*q[i]; acc=acc>>(14-j);
; b[i + 1] = b[i] + acc+ b2[i];
; b2[i] = b1[i]; b1[i] = b[i]; }
;===================================================
LAR AR3,#LSPPC_B
LAR AR1,#LSPPC_Q
LAR AR4,#LSPPC_B1
LAR AR5,#LSPPC_B2
LACC #HP10_1
SAMM BRCR
MAR *,AR4
RPTB LSPPC_IB-1
MAR *+
LACC *-,16
OR *,AR6
LAR AR6,#-2
RPT #15
NORM *+
SACH ACCBUF
NOP
NOP
MAR *,AR1
LT *+,AR3
MPY ACCBUF
LAMM AR6
SAMM TREG1
PAC
SATL
SACB
;---------
; b[i + 1] = b[i] + acc+ b2[i];
MAR *+
LACC *-,16
OR *0+,AR5
ADDB
SACB
MAR *+
LACC *-,16
OR *,AR3
ADDB
SACL *+
SACH *0-,0,AR4 ;->A[I]H
; **** b2[i] = b1[i];
MAR *+
LACC *-,16
OR *,AR5
SACL *+
SACH *+,0,AR3
; b1[i] = b[i];} ->A[I]H
LACC *-,16
OR *0+,AR4
SACL *+
SACH *+
LSPPC_IB
;===================================================
; acc=(int)(a[noh] + b[noh])>>3;
; if (k != 0) pc[k] = acc;
;===================================================
LAR AR3,#LSPPC_A+11
LAR AR4,#LSPPC_B+11
MAR *,AR3
LACC *-,16
OR *,AR4
SACB
LACC *-,16
OR *,AR0
ADDB
RPT #2
SFR
SACL *+,0,AR7
BANZ LSPPC_K,*-,AR3
;===================================================
; pc[0] = 1.0*0x2000;
;===================================================
MAR *,AR0
LACC #2000H
LAR AR0,#LPC0
SACL *
;===================================================
RET
;===================================================
.include "c50_init.asm"
;---------------
.include "wcos1.asm"
.include "wcos.asm"
.end
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -