; PROGRAMMING RESTRICTIONS: ; SPEED HAS ABSOLUTE PRIORITY OVER SIZE ; THIS MODULE MUST BE AS FAST AS POSSIBLE ; P: 268+128=396 clks max ; S: 2 levels (for DO loops) ; USES R0, R1, R4, N4, R5, X0, X1, Y0, Y1, A, B SETUP RCVSUM OPT NOCC,CEX,CL,CM,NOFC,MC,MD,MEX,PS,NORC,NOU,W,NOXR PAGE 132,66,2,3,0 IF !@SCP('RCVSUM','GLOBAL') SECTION RCVSUM SETUP__ EQU 1 ENDIF ORG P; INCLUDE '..\DSP\DEFN.ASM' ; DSP ; COMMON DEFINITIONS for assembler : ; END ; LIST XDEF RCVSUM ; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ; notes COMMENT ~ ; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ; history ; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ; data X FAST ram VOLUSEL SUMUSEL Y FAST ram VOLSEL SUMSEL Y ram RCV_FRAME I/O IO_PCMCVT IO_SEL IO_USEL ; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ~ end of COMMENT ; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; CVT MACRO ;This macro converts 16-bit linear audio values to 8-bit A-law PCM ;P: 38+7*2=38+14=52 clks max ;S: 2 levels (for DO loop) ;uses A, B, R0, X1, Y1 TFR A,B ;SAVE LINEAR FOR SIGN ABS A #>TBL+7,R0 ;MAKE LINEAR POSITIVE ;LAST TABLE ENTRY DO #7,_LOOP ;DO "NORMALIZE" NORM R0,A ; TO FIND SEGMENT _LOOP JNN <_SEG0 ;SEG 0? LSL A ; NO, FORCE "1" INTO SIGN BIT _SEG0 ;(A1 SIGN BIT IS PCM BIT S0) MOVE A1,A ;SET A2 TO SIGN OF A1 ASR A ; AND SHIFT A1 S0 PUT IN PCM S1 ASR A ; AND PCM S2 AS COPIES OF S0 ;(SEG IS NOW 0 OR 7) MOVE P:R0,X1 ;GET SEGMENT MASK AND X1,A ; AND MAKE CORRECT SEG BITS LSL B ;BRING LINEAR SIGN BIT ROR A ; OVER TO PCM EOR Y1,A ;DO BIT INVERSIONS ENDM RCVSUM ; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ; MULTIPLY AND ACCUMULATE SELECT & UNSELECT ; P: 28+30*8=28+240=268 clks ; S: 2 levels (for DO loop) ; USES R0, R1, R4, R5, X0, Y0, Y1, A, B OPT CC MOVE #>RCV_FRAME+1, R1 ;point to receive frame slot#1 (in Y) MOVE #>IO_PCMCVT,R4 ;point to PCM-to-linear I/O location MOVE #