home *** CD-ROM | disk | FTP | other *** search
/ Language/OS - Multiplatform Resource Library / LANGUAGE OS.iso / dsp / dspgroup / bell212.arc / TLSM.ASM < prev    next >
Encoding:
Assembly Source File  |  1986-07-25  |  15.0 KB  |  457 lines

  1.        TITL 'TMS32011 BASED BELL 103 MODEM'
  2.        IDT  'BEL103'
  3.        OPTION XREF,TUNLST
  4. **********************************************************
  5. *****    320 BASED BELL 103 MODEM             *****
  6. *****                             *****
  7. *****    WRITTEN BY PETER EHLIG                 *****
  8. *****    REVISION 1.1                     *****
  9. *****                             *****
  10. *****    COPYRIGHT TEXAS INSTRUMENTS,  07/25/86         *****
  11. *****                             *****
  12. **********************************************************
  13. *
  14.        DEF  RUN103,RSQ103
  15.        REF  COMD,TMS011,ANALOG,TONY0,TONY1
  16.        REF  ORGCOF,ANSCOF,HBSP,LBSP
  17.        PAGE
  18.        COPY TASKMAS.EQU
  19. *---------------------------------------------------------------*
  20. *  MODEM RUN MODES DECODED                    *
  21. *---------------------------------------------------------------*
  22. RSQ103 EQU  $
  23.        LAC  ONE,6       SET THE XMIT SQUELCH
  24.        OR   RECST       BIT IN THE
  25.        SACL RECST       STATUS BIT
  26. RUN103 EQU  $
  27.        LAC  ONE,7       MASK OFF THE ANSWER/ORIGINATE
  28.        AND  RECST       MODE BIT AND INITIALIZE
  29.        BZ   SETUP2       RUN BELL 103 MODEM IN ANSWER MODE
  30. *
  31. *************************************************
  32. *    FILTER INITIALIZATION SUBROUTINE    *
  33. *************************************************
  34. SETUP1 EQU  $    SET UP FOR ORIGINATE
  35.        LACK ORGCOF       POINT INITIALIZATION TOWARDS
  36.        SACL TEMP       ORIGINATE FILTERS COEFFICIENTS
  37.        LACK LBSP       GET SINE TABLE STEP
  38.        TBLR SPACE1       SPACE VALUE FOR TONE GENERATOR
  39.        ADD  ONE        AND GET NEXT VALUE
  40.        TBLR MARK1       FOR MARK TONE GENERATION
  41.        B    SETUP3
  42. SETUP2 EQU  $    SETUP FOR ANSWER
  43.        LACK ANSCOF       POINT INITIALIZATION TOWARDS
  44.        SACL TEMP       ANSWER FILTERS COEFFICIENTS
  45.        LACK HBSP       GET SINE TABLE STEP
  46.        TBLR SPACE1       SPACE VALUE FOR TONE GENERATOR
  47.        ADD  ONE        AND GET NEXT VALUE
  48.        TBLR MARK1       FOR MARK TONE GENERATION
  49. *
  50. SETUP3 EQU  $
  51.        LAC  ONE,8       DELAY DECODE ALGORITHM
  52.        SACL SAMPLE       UNTIL FILTERS STABILIZE
  53.        SACL TOTENG       DETECTED BEFORE SETTING EDT
  54.        ZAC           CLEAR
  55.        SACL TALF1       AND START WITH THIS
  56.        SACL TALF2       SECOND TONE STEP
  57.        SACL SPENG1       AND ALL THE
  58.        SACL SPENG2       ENERGY REGISTERS
  59.        SACL SPHLD1       OF THE SPACE
  60.        SACL SPHLD2       FILTER
  61.        SACL SPHLD3
  62.        SACL SPHLD4
  63.        SACL SPHLD5
  64.        SACL SPHLD6
  65.        SACL SPHLD7
  66.        SACL SPHLD8
  67.        SACL MKENG1       AND ALL THE
  68.        SACL MKENG2       ENERGY REGISTERS
  69.        SACL MKHLD1       OF THE MARK
  70.        SACL MKHLD2       FILTER
  71.        SACL MKHLD3
  72.        SACL MKHLD4
  73.        SACL MKHLD5
  74.        SACL MKHLD6
  75.        SACL MKHLD7
  76.        SACL MKHLD8
  77.        SACL MKEGST
  78.        LACK >C0        SET UP MASK TO
  79.        AND  RECST       CLEAR DCD AND EDT BITS
  80.        OR   ONE        AND SET DATA BIT TO MARK
  81.        SACL RECST       IN STATUS REGISTER
  82.        LACK 1           GET A 1
  83.        SACL DLYBUF,0       TEMPORARY SAVE
  84.        SACL SAMXMT       AND READ ON FIRST PASS
  85.        LT   DLYBUF       LOAD 1 IN T
  86.        MPYK 1           1 INTO P
  87.        SOVM           SATURATION ARITHMETIC
  88.        LARK 1,45       NUMBER OF POINTS
  89.        LARK 0,COEFBP       POINT TO COEF DATA SPACE
  90.        LAC  TEMP       POINTER TO DM
  91. ILP    LARP 0           RESET AR TO 0
  92.        TBLR *+,1       TRANSFER DATA VALUE
  93.        APAC           INCREMENT POINTER
  94.        BANZ ILP        LOOP
  95.        LARK 1,17       NUMBER OF POINTS
  96.        LARK 0,DLYBUF       POINTER TO DM
  97.        ZAC           CLEAR ACCUMULATOR
  98. ILPA   LARP 0           RESET AR TO 0
  99.        SACL *+,0,1       CLEAR DATA VALUE
  100.        BANZ ILPA       LOOP
  101. *
  102.        PAGE
  103. *************************************************
  104. *     BELL 103 MODEM CODE            *
  105. *************************************************
  106. *
  107. BEL103 EQU  $
  108.        CALL TONY0       SEND OUT THE FIRST BIT
  109. TOP103 EQU  $
  110.        LAC  SAMXMT       DECREMENT TRANSMIT
  111.        SUB  ONE        SAMPLE COUNT AND
  112.        SACL SAMXMT       SAVE IT
  113.        BNZ  CHKSQU       IF AT END OF BAUD THEN
  114.        LACK 32           RESET TRANSMIT
  115.        SACL SAMXMT       SAMPLE COUNT AND
  116.        IN   XMTD,PA7       GET NEXT INPUT FROM 7742
  117.        LACK >30        CHECK FOR SQUELCH COMMAND
  118.        AND  XMTD       IF BITS 4 & 5 ZERO
  119.        BZ   COMD       THEN SQUELCH THE MODEM
  120. CHKSQU LAC  ONE,6       CHECK XMT SQUELCH BIT
  121.        AND  RECST       IN STATUS REGISTER
  122.        BZ   DECTBT       IF NOT SQUELCH THEN SEND IT
  123.        LAC  ONE,4       CHECK FOR SQUELCH COMMAND
  124.        AND  XMTD       IF BITS 4 & 5 ZERO
  125.        BNZ  SNDIT       THEN SQUELCH THE MODEM
  126. UNSQU  LACK >BF        CHECK IF SQUELCH BIT
  127.        AND  RECST       SET IN STATUS REGISTER
  128.        SACL RECST       IN STATUS REGISTER
  129. *
  130. DECTBT LAC  ONE        CHECK CURRENT XMIT BIT
  131.        AND  XMTD       TO SET CORRECT TONE TABLE
  132.        BZ   SNDSP       IF ZERO THEN SEND SPACE
  133. SNDMK  LAC  MARK1       LOAD STEP VALUE FOR MARK
  134.        SACL TALF1       INTO STEP KEY
  135.        B    SNDIT       AND SEND IT
  136. SNDSP  LAC  SPACE1       OR LOAD STEP VALUE FOR SPACE
  137.        SACL TALF1       INTO STEP KEY
  138. SNDIT  CALL TONY1       AND SEND IT
  139. *************************************************
  140. *     BELL 103 RECEIVER CODE            *
  141. *************************************************
  142. *
  143. REC103 EQU  $
  144.        OUT  FILIN,PA4       FOR DEBUG
  145.        NOP
  146. *   MAIN BANDPASS
  147. MAINBP EQU  $
  148.        LARK 0,COEFBP       POINT AR0 TO COEFFICIENTS
  149.        LARK 1,DLYBUF       POINT AR1 TO DATA HISTORY
  150.        LARP 0           START WITH AR0
  151.        LAC  ONE,7       CHECK FOR ANSWER OR
  152.        AND  RECST       OR ORIGINATE MODE
  153.        BZ   ANSFLT       IF ANSWER THEN JUMP
  154. *************************************************
  155. *     ORIGINATE MODE FILTER SECTION        *
  156. *************************************************
  157. *
  158. ORGFLT LAC  FILIN,14       GET & SCALE INOUT
  159.        SACH FILIN       HOLD IT
  160.        CALL ORGBPS       RUN FIRST STAGE
  161.        LAC  FILOUT,15       GET & SCALE PRE. OUT.
  162.        SACH FILIN       HOLD IT
  163.        CALL ORGBPS       RUN SECOND STAGE
  164.        LAC  FILOUT,15       GET & SCALE PRE. OUT.
  165.        SACH FILIN       HOLD IT
  166.        CALL ORGBPS       RUN SECOND STAGE
  167.        LAC  FILOUT,13       GET & SCALE PRE. OUT.
  168.        SACH FILIN       HOLD IT
  169.        CALL ORGBPS       RUN THIRD STAGE
  170.        LAC  FILOUT       GET & SCALE PRE. OUT.
  171.        SACL FILIN       HOLD IT
  172.        CALL ORGBPS       RUN FOURTH STAGE
  173.        LAC  FILOUT       MOVE BANDPASS OUTPUT
  174.        SACL MBPOUT       TO TEMPERARY STORAGE
  175. *
  176. *   SPACE BANDPASS ORIGINATE MODE
  177. ORGSP  EQU  $
  178.        LARP 0           START WITH AR0
  179.        LAC  MBPOUT,14       GET & SCALE INOUT
  180.        SACH FILIN       HOLD IT
  181.        CALL ORGBPS       RUN FIRST STAGE
  182.        LAC  FILOUT,1       GET & SCALE PRE. OUT.
  183.        SACL FILIN       HOLD IT
  184.        CALL ORGBPS       RUN SECOND STAGE
  185.        CALL ENRGSP       CALCULATE THE SPACE ENERGY
  186. *   MARK BANDPASS  ORIGINATE MODE
  187. ORGMK  LARP 0           START WITH AR0
  188.        LAC  MBPOUT,15       GET & SCALE INOUT
  189.        SACH FILIN
  190.        CALL ORGBPS       RUN FIRST STAGE
  191.        ZALH FILOUT       GET & SCALE PRE. OUT.
  192.        SACH FILIN
  193.        CALL ORGBPS       RUN SECOND STAGE
  194.        CALL ENRGMK       CALCULATE THE MARK ENERGY
  195.        B    GETBIT
  196. *
  197.        PAGE
  198. *************************************************
  199. *     ANSWER MODE FILTER SECTION        *
  200. *************************************************
  201. *
  202. ANSFLT EQU  $
  203.        LAC  FILIN,13       GET & SCALE INOUT
  204.        SACH FILIN       HOLD IT
  205.        CALL ORGBPS       RUN FIRST STAGE
  206.        LAC  FILOUT,14       GET & SCALE PRE. OUT.
  207.        SACH FILIN       HOLD IT
  208.        CALL ORGBPS       RUN SECOND STAGE
  209.        LAC  FILOUT       GET & SCALE PRE. OUT.
  210.        SACL FILIN       HOLD IT
  211.        CALL ORGBPS       RUN SECOND STAGE
  212.        LAC  FILOUT,15       GET & SCALE PRE. OUT.
  213.        SACH FILIN       HOLD IT
  214.        CALL ORGBPS       RUN THIRD STAGE
  215.        LAC  FILOUT,1       GET & SCALE PRE. OUT.
  216.        SACL FILIN       HOLD IT
  217.        CALL ORGBPS       RUN FOURTH STAGE
  218.        LAC  FILOUT       MOVE BANDPASS OUTPUT
  219.        SACL MBPOUT       TO TEMPERARY STORAGE
  220.        OUT  MBPOUT,PA4
  221. *
  222. *   SPACE BANDPASS ANSWER MODE
  223. ANSSP  EQU  $
  224.        LARP 0           START WITH AR0
  225.        LAC  MBPOUT,14       GET & SCALE INOUT
  226.        SACH FILIN       HOLD IT
  227.        CALL ORGBPS       RUN FIRST STAGE
  228.        LAC  FILOUT       GET & SCALE PRE. OUT.
  229.        SACL FILIN       HOLD IT
  230.        CALL ORGBPS       RUN SECOND STAGE
  231.        CALL ENRGSP       CALCULATE THE SPACE ENERGY
  232. *   MARK BANDPASS  ANSWER MODE
  233. ANSMK  LARP 0           START WITH AR0
  234.        LAC  MBPOUT,14       GET & SCALE INOUT
  235.        SACH FILIN
  236.        CALL ORGBPS       RUN FIRST STAGE
  237.        LAC  FILOUT,1       GET & SCALE PRE. OUT.
  238.        SACL FILIN
  239.        CALL ORGBPS       RUN SECOND STAGE
  240.        CALL ENRGMK       CALCULATE THE MARK ENERGY
  241. *
  242.        PAGE
  243. *************************************************
  244. *     DECODE BIT AND CHECK ENERGY DETECT    *
  245. *************************************************
  246. *
  247. GETBIT EQU  $
  248.        LAC  SAMPLE       CHECK IF BAUD ALLIGNED
  249.        SUB  ONE
  250.        BNZ  NXTCHK
  251.        LACK 32
  252. NXTCHK SACL SAMPLE
  253.        OUT  SAMPLE,PA5
  254.        OUT  RECST,PA5
  255.        OUT  MKEGST,PA5
  256.        SUB  ONE,4
  257.        BZ   GOBIT
  258.        LAC  ONE,3
  259.        AND  MKEGST
  260.        BNZ  NOTCHG
  261. *
  262. CHKCHG EQU  $
  263.        LAC  ONE        CHECK LAST BIT DECODED
  264.        AND  MKEGST       AS MARK OR SPACE
  265.        BNZ  WAS1       IF MARK THEN CHECK SPACE
  266. WAS0   LAC  MKENG1       COMPARE MARK ENERGY
  267.        SUB  SPENG1       TO SPACE ENERGY
  268.        BLZ  NOTCHG       IF MARK < SPACE THEN DONE
  269.        LAC  ONE,3       ELSE CHECK IF OUTPUT
  270.        AND  MKEGST       SINCE LAST CHANGE
  271.        BNZ  FASTBT       IF NOT THEN FAST BIT
  272.        LACK >9            SET SAME BAUD FLAG
  273.        SACL MKEGST       IN MARK STATUS
  274.        B    RSTGST       AND CONTINUE ROUTINE
  275. FASTBT LACK >9
  276.        SACL SPEGST
  277.        LACK >4            SET FAST BIT FLAG
  278.        OR   MKEGST
  279.        SACL MKEGST       FOR UPDATE NEXT BAUD
  280.        B    RSTGST       AND CONTINUE ROUTINE
  281. WAS1   LAC  SPENG1       COMPARE SPACE ENERGY
  282.        SUB  MKENG1       TO MARK ENERGY
  283.        BLZ  NOTCHG       IF SPACE < MARK THEN DONE
  284.        LAC  ONE,3       ELSE CHECK IF OUTPUT
  285.        AND  MKEGST       SINCE LAST CHANGE
  286.        BNZ  FASTB2       IF NOT THEN FAST BIT
  287.        LACK >8            SET SAME BAUD FLAG
  288.        SACL MKEGST       IN MARK STATUS
  289.        B    RSTGST       AND CONTINUE ROUTINE
  290. FASTB2 LACK >8
  291.        SACL SPEGST
  292.        LACK 4           SET FAST BIT FLAG
  293.        OR   MKEGST
  294.        SACL MKEGST       FOR UPDATE NEXT BAUD
  295. *
  296. RSTGST EQU  $
  297.        LACK 32           SET DELAY TO END OF BAUD
  298.        SACL SAMPLE       TO 16 AND
  299. NOTCHG EQU  $
  300. * CHECK ENERGY LEVEL
  301.        LAC  ONE,6       SET MINIMUM ENERGY LEVEL
  302.        SUB  SPENG2       SUBTRACT OUT SPACE ENERGY
  303.        SUB  MKENG2       SUBTRACT OUT MARK ENERGY
  304.        BGEZ NOENRG       IF STILL POSITIVE THEN NO ENRGY
  305.        LAC  ONE,5       CHECK IN RECEIVE STATUSD
  306.        AND  RECST       IF  ENERGY DETECTED
  307.        BNZ  TOP103       IF SO THEN NEXT SAMPLE
  308.        LAC  TOTENG       ELSE DECREMENT
  309.        SUB  ONE        DELAY COUNT
  310.        SACL TOTENG       AND STORE IT
  311.        BNZ  TOP103       IF NOT ZERO THEN NEXT SAMPLE
  312.        LACK >30        ELSE SET THE CARRIER AND
  313.        OR   RECST       ENERGY DETECT BITS
  314.        SACL RECST       IN THE STATUS REGISTER
  315.        LAC  ONE,13       ALSO SET THE DCD OFF
  316.        SACL TOTENG       DELAY COUNTER
  317.        B    TOP103       AND WAIT FOR NEXT SAMPLE
  318. *   NO ENERGY
  319. NOENRG LAC  ONE,5       CHECK IF EDT SET
  320.        AND  RECST       IN STATUS REGISTER
  321.        BZ   TOP103       IF NOT THEN NEXT SAMPLE
  322.        LAC  TOTENG       ELSE DECREMENT
  323.        SUB  ONE        TIMOUT DELAY COUNTER
  324.        SACL TOTENG       AND SAVE IT
  325.        BNZ  TOP103       IF NOT ZERO THEN NEXT SAMPLE
  326.        LACK >CF        ELSE MASK OFF THE DCD AND EDT
  327.        AND  RECST       BITS OF THE STATUS REGISTER
  328.        SACL RECST       AND SAVE IT
  329.        B    TOP103       GO FOR NEXT SAMPLE
  330. *
  331.        PAGE
  332. *************************************************
  333. *     OUTPUT NEW BIT AND STATUS TO THE 7742    *
  334. *************************************************
  335. *
  336. GOBIT  EQU  $
  337. *
  338.        LACK >7           CHECK 2ND BUFFER FULL
  339.        AND  MKEGST       FLAG IN MARK STATUS
  340.        SACL MKEGST       IF SET THEN LOAD BIT
  341. CHKNB  EQU  $
  342.        LACK >FE        ELSE MASK OFF CURRENT BIT
  343.        AND  RECST       IN RECEIVE STATUS
  344.        SACL RECST       AND SAVE IT
  345.        LACK 1           ISOLATE THE
  346.        AND  MKEGST       NEW DATA BIT
  347.        OR   RECST       TO ADD TO
  348.        SACL RECST       THE RECEIVE STATUS
  349.        OUT  RECST,PA7       SEND TO 7742
  350. *
  351.        LAC  ONE,2       CHECK FOR LEADING RECEIVER
  352.        AND  MKEGST       CARRIER
  353.        BZ   NOTCHG       IF NOT CONTINUE
  354.        LAC  SPEGST
  355.        SACL MKEGST
  356.        B    NOTCHG
  357. *
  358.        PAGE
  359. *************************************************
  360. *     CALCULATE SPACE ENERGY            *
  361. *************************************************
  362. *
  363. ENRGSP EQU  $
  364.        OUT  FILOUT,PA4       FOR DEBUG
  365.        LAC  FILOUT,13       SAVE FILTER OUTPUT
  366.        ABS           MAGNITUDE
  367.        SACH TEMP       OF THE ENERGY
  368.        LAC  SPENG2       CALCULATE ENERGY OF LAST FOUR
  369.        ADD  TEMP       SAMPLES
  370.        SACL SPENG1       AND SAVE IT
  371.        OUT  SPENG1,PA4
  372.        OUT  SPENG1,PA5
  373. BIGSP  LAC  SPENG1       MOVE CURRENT ENERGY
  374.        SUB  SPHLD8       AND DECREMENT THE OLDEST
  375.        SACL SPENG2       SAMPLE ENERGY
  376.        LAC  SPHLD7       SHIFT UP THE SAMPLES
  377.        SACL SPHLD8       HISTORY TO MAKE ROOM FOR
  378.        LAC  SPHLD6       THE CURRENT SAMPLE
  379.        SACL SPHLD7
  380.        LAC  SPHLD5
  381.        SACL SPHLD6
  382.        LAC  SPHLD4
  383.        SACL SPHLD5
  384.        LAC  SPHLD3
  385.        SACL SPHLD4
  386.        LAC  SPHLD2
  387.        SACL SPHLD3
  388.        LAC  SPHLD1
  389.        SACL SPHLD2
  390.        LAC  TEMP       LOAD IN THE CURRENT SAMPLE
  391.        SACL SPHLD1       INTO THE SAMPLE HISTORY
  392.        RET
  393. *
  394.        PAGE
  395. *************************************************
  396. *     CALCULATE MARK ENERGY            *
  397. *************************************************
  398. *
  399. ENRGMK EQU  $
  400.        OUT  FILOUT,PA4       FOR DEBUG
  401.        LAC  FILOUT,13       SAVE FILTER OUTPUT
  402.        ABS           MAGNITUDE
  403.        SACH TEMP       OF THE ENERGY
  404.        LAC  MKENG2       CALCULATE ENERGY OF LAST FOUR
  405.        ADD  TEMP       SAMPLES
  406.        SACL MKENG1       AND SAVE IT
  407.        OUT  MKENG1,PA4
  408.        OUT  MKENG1,PA5
  409. BIGMK  LAC  MKENG1       MOVE CURRENT ENERGY
  410.        SUB  MKHLD8       AND DECREMENT THE OLDEST
  411.        SACL MKENG2       SAMPLE ENERGY
  412.        LAC  MKHLD7       SHIFT UP THE SAMPLES
  413.        SACL MKHLD8       HISTORY TO MAKE ROOM FOR
  414.        LAC  MKHLD6       THE CURRENT SAMPLE
  415.        SACL MKHLD7
  416.        LAC  MKHLD5
  417.        SACL MKHLD6
  418.        LAC  MKHLD4
  419.        SACL MKHLD5
  420.        LAC  MKHLD3
  421.        SACL MKHLD4
  422.        LAC  MKHLD2
  423.        SACL MKHLD3
  424.        LAC  MKHLD1
  425.        SACL MKHLD2
  426.        LAC  TEMP       LOAD IN THE CURRENT SAMPLE
  427.        SACL MKHLD1       INTO THE SAMPLE HISTORY
  428.        RET
  429. *
  430.        PAGE
  431. *************************************************
  432. *     BANDPASS FILTER STAGE            *
  433. *************************************************
  434. *
  435. ORGBPS EQU     $
  436.        LT   FILIN       GET SCALE INPUT
  437.        MPY  *+,1       B0 MULTIPLY
  438.        ZALH *+,0       GET Z-1
  439.        APAC           FORM OUTPUT
  440.        SACH FILOUT,1       SAVE OUTPUT
  441.        MPY  *+,1       B1 MULTIPLY
  442.        ZALH *-,0       GET Z-2
  443.        LTA  FILOUT       GET CURRENT OUTPUT
  444.        MPY  *+,1       A1 MULTIPLY
  445.        LTA  FILOUT       GET CURRENT OUTPUT
  446.        APAC           EXTRA LOOP ADD
  447.        SACH *+,0,0       SAVE Z-1
  448.        MPY  *+           A2 MULTIPLY
  449.        ZAC           INIT. ACC
  450.        LTA  FILIN       GET SCALED INPUT
  451.        MPY  *+,1       B2 MULTIPLY
  452.        APAC           FORM RESULT
  453.        SACH *+,0,0       SAVE Z-2
  454.        RET           RETURN TO CALLING SEQUENCE
  455. *
  456.        END
  457.