📄 ptencode.asm
字号:
PTENCODE_DEBUG .SET 0
;&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
.IF PTENCODE_DEBUG
.version 50
.mmregs
.MLIB "MAC.LIB"
.BSS ACCBUF,2
.BSS PINDEX,1
.DATA
PITCH_TAB .int 0e039h,0e568h,0e9d3h,0ee3dh,0f2c1h,0f8ach,00h,0473h,0829h,0bc7h
.int 0ea0h,010feh,0133bh,014e5h,01677h,017d7h,018f6h,01a1dh,01b33h,01c31h
.int 01d48h,01e56h,01f75h,020a4h,021fch,023beh,0262dh,0293fh,02c9ch,03148h
.int 0387bh,03fb6h
.TEXT
CALL C50_INIT
LDP #ACCBUF
CALL PTENCODE
HERE B $
.ENDIF
;=======CODE TOPPGAIN AND GET INDEX IN PINDEX==============================
;AR0,AR1
;ACC,ACCB,BRCR
;PINDEX,TOPPGAIN
;======================================================
PTENCODE
;=====================================
; low = dist = fabs(input - *pitch2max5);
; *index = 0;
;=====================================
ZAP
SACL PINDEX
LAR AR0,#PITCH_TAB
MAR *,AR0
LACC TOPPGAIN
SUB *+
ABS
SACB
;=====================================
; for (i = 1; i < 32; i++)
; { dist = fabs(input - pitch2max5[i]);
; if (dist < low)
; { low = dist; *index = i; }
; }
;=====================================
LACC #30
SAMM BRCR
LAR AR1,#0
LACC TOPPGAIN
RPTB PTENCODE_FOR-1
SUB *+,0,AR1
ABS
CRLT
MAR *+,AR0
XC 2,C ;EXECUTE IF DIST<LOW
LAMM AR1
SACL PINDEX
LACC TOPPGAIN
PTENCODE_FOR
;=====================================
; return (pitch2max5[*index]);
;=====================================
LACC #PITCH_TAB
ADD PINDEX
SAMM AR0 ;PIPELINE
RETD
LACC *
SACL TOPPGAIN
;=====================================
;=====================================
RET
.IF PTENCODE_DEBUG
.INCLUDE "C50_INIT.ASM"
.ENDIF
;=============================================
;float pitchencode(float input, int *index)
;{ int i;
; float dist, low;
; low = dist = fabs(input - *pitch2max5);
; *index = 0;
; for (i = 1; i < 32; i++)
; { dist = fabs(input - pitch2max5[i]);
; if (dist < low)
; { low = dist; *index = i; }
; }
; return (pitch2max5[*index]);
;}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -