home *** CD-ROM | disk | FTP | other *** search
- TITL 'TMS32011 BASED BELL 103 MODEM'
- IDT 'BEL103'
- OPTION XREF,TUNLST
- **********************************************************
- ***** 320 BASED BELL 103 MODEM *****
- ***** *****
- ***** WRITTEN BY PETER EHLIG *****
- ***** REVISION 1.1 *****
- ***** *****
- ***** COPYRIGHT TEXAS INSTRUMENTS, 07/25/86 *****
- ***** *****
- **********************************************************
- *
- DEF RUN103,RSQ103
- REF COMD,TMS011,ANALOG,TONY0,TONY1
- REF ORGCOF,ANSCOF,HBSP,LBSP
- PAGE
- COPY TASKMAS.EQU
- *---------------------------------------------------------------*
- * MODEM RUN MODES DECODED *
- *---------------------------------------------------------------*
- RSQ103 EQU $
- LAC ONE,6 SET THE XMIT SQUELCH
- OR RECST BIT IN THE
- SACL RECST STATUS BIT
- RUN103 EQU $
- LAC ONE,7 MASK OFF THE ANSWER/ORIGINATE
- AND RECST MODE BIT AND INITIALIZE
- BZ SETUP2 RUN BELL 103 MODEM IN ANSWER MODE
- *
- *************************************************
- * FILTER INITIALIZATION SUBROUTINE *
- *************************************************
- SETUP1 EQU $ SET UP FOR ORIGINATE
- LACK ORGCOF POINT INITIALIZATION TOWARDS
- SACL TEMP ORIGINATE FILTERS COEFFICIENTS
- LACK LBSP GET SINE TABLE STEP
- TBLR SPACE1 SPACE VALUE FOR TONE GENERATOR
- ADD ONE AND GET NEXT VALUE
- TBLR MARK1 FOR MARK TONE GENERATION
- B SETUP3
- SETUP2 EQU $ SETUP FOR ANSWER
- LACK ANSCOF POINT INITIALIZATION TOWARDS
- SACL TEMP ANSWER FILTERS COEFFICIENTS
- LACK HBSP GET SINE TABLE STEP
- TBLR SPACE1 SPACE VALUE FOR TONE GENERATOR
- ADD ONE AND GET NEXT VALUE
- TBLR MARK1 FOR MARK TONE GENERATION
- *
- SETUP3 EQU $
- LAC ONE,8 DELAY DECODE ALGORITHM
- SACL SAMPLE UNTIL FILTERS STABILIZE
- SACL TOTENG DETECTED BEFORE SETTING EDT
- ZAC CLEAR
- SACL TALF1 AND START WITH THIS
- SACL TALF2 SECOND TONE STEP
- SACL SPENG1 AND ALL THE
- SACL SPENG2 ENERGY REGISTERS
- SACL SPHLD1 OF THE SPACE
- SACL SPHLD2 FILTER
- SACL SPHLD3
- SACL SPHLD4
- SACL SPHLD5
- SACL SPHLD6
- SACL SPHLD7
- SACL SPHLD8
- SACL MKENG1 AND ALL THE
- SACL MKENG2 ENERGY REGISTERS
- SACL MKHLD1 OF THE MARK
- SACL MKHLD2 FILTER
- SACL MKHLD3
- SACL MKHLD4
- SACL MKHLD5
- SACL MKHLD6
- SACL MKHLD7
- SACL MKHLD8
- SACL MKEGST
- LACK >C0 SET UP MASK TO
- AND RECST CLEAR DCD AND EDT BITS
- OR ONE AND SET DATA BIT TO MARK
- SACL RECST IN STATUS REGISTER
- LACK 1 GET A 1
- SACL DLYBUF,0 TEMPORARY SAVE
- SACL SAMXMT AND READ ON FIRST PASS
- LT DLYBUF LOAD 1 IN T
- MPYK 1 1 INTO P
- SOVM SATURATION ARITHMETIC
- LARK 1,45 NUMBER OF POINTS
- LARK 0,COEFBP POINT TO COEF DATA SPACE
- LAC TEMP POINTER TO DM
- ILP LARP 0 RESET AR TO 0
- TBLR *+,1 TRANSFER DATA VALUE
- APAC INCREMENT POINTER
- BANZ ILP LOOP
- LARK 1,17 NUMBER OF POINTS
- LARK 0,DLYBUF POINTER TO DM
- ZAC CLEAR ACCUMULATOR
- ILPA LARP 0 RESET AR TO 0
- SACL *+,0,1 CLEAR DATA VALUE
- BANZ ILPA LOOP
- *
- PAGE
- *************************************************
- * BELL 103 MODEM CODE *
- *************************************************
- *
- BEL103 EQU $
- CALL TONY0 SEND OUT THE FIRST BIT
- TOP103 EQU $
- LAC SAMXMT DECREMENT TRANSMIT
- SUB ONE SAMPLE COUNT AND
- SACL SAMXMT SAVE IT
- BNZ CHKSQU IF AT END OF BAUD THEN
- LACK 32 RESET TRANSMIT
- SACL SAMXMT SAMPLE COUNT AND
- IN XMTD,PA7 GET NEXT INPUT FROM 7742
- LACK >30 CHECK FOR SQUELCH COMMAND
- AND XMTD IF BITS 4 & 5 ZERO
- BZ COMD THEN SQUELCH THE MODEM
- CHKSQU LAC ONE,6 CHECK XMT SQUELCH BIT
- AND RECST IN STATUS REGISTER
- BZ DECTBT IF NOT SQUELCH THEN SEND IT
- LAC ONE,4 CHECK FOR SQUELCH COMMAND
- AND XMTD IF BITS 4 & 5 ZERO
- BNZ SNDIT THEN SQUELCH THE MODEM
- UNSQU LACK >BF CHECK IF SQUELCH BIT
- AND RECST SET IN STATUS REGISTER
- SACL RECST IN STATUS REGISTER
- *
- DECTBT LAC ONE CHECK CURRENT XMIT BIT
- AND XMTD TO SET CORRECT TONE TABLE
- BZ SNDSP IF ZERO THEN SEND SPACE
- SNDMK LAC MARK1 LOAD STEP VALUE FOR MARK
- SACL TALF1 INTO STEP KEY
- B SNDIT AND SEND IT
- SNDSP LAC SPACE1 OR LOAD STEP VALUE FOR SPACE
- SACL TALF1 INTO STEP KEY
- SNDIT CALL TONY1 AND SEND IT
- *************************************************
- * BELL 103 RECEIVER CODE *
- *************************************************
- *
- REC103 EQU $
- OUT FILIN,PA4 FOR DEBUG
- NOP
- * MAIN BANDPASS
- MAINBP EQU $
- LARK 0,COEFBP POINT AR0 TO COEFFICIENTS
- LARK 1,DLYBUF POINT AR1 TO DATA HISTORY
- LARP 0 START WITH AR0
- LAC ONE,7 CHECK FOR ANSWER OR
- AND RECST OR ORIGINATE MODE
- BZ ANSFLT IF ANSWER THEN JUMP
- *************************************************
- * ORIGINATE MODE FILTER SECTION *
- *************************************************
- *
- ORGFLT LAC FILIN,14 GET & SCALE INOUT
- SACH FILIN HOLD IT
- CALL ORGBPS RUN FIRST STAGE
- LAC FILOUT,15 GET & SCALE PRE. OUT.
- SACH FILIN HOLD IT
- CALL ORGBPS RUN SECOND STAGE
- LAC FILOUT,15 GET & SCALE PRE. OUT.
- SACH FILIN HOLD IT
- CALL ORGBPS RUN SECOND STAGE
- LAC FILOUT,13 GET & SCALE PRE. OUT.
- SACH FILIN HOLD IT
- CALL ORGBPS RUN THIRD STAGE
- LAC FILOUT GET & SCALE PRE. OUT.
- SACL FILIN HOLD IT
- CALL ORGBPS RUN FOURTH STAGE
- LAC FILOUT MOVE BANDPASS OUTPUT
- SACL MBPOUT TO TEMPERARY STORAGE
- *
- * SPACE BANDPASS ORIGINATE MODE
- ORGSP EQU $
- LARP 0 START WITH AR0
- LAC MBPOUT,14 GET & SCALE INOUT
- SACH FILIN HOLD IT
- CALL ORGBPS RUN FIRST STAGE
- LAC FILOUT,1 GET & SCALE PRE. OUT.
- SACL FILIN HOLD IT
- CALL ORGBPS RUN SECOND STAGE
- CALL ENRGSP CALCULATE THE SPACE ENERGY
- * MARK BANDPASS ORIGINATE MODE
- ORGMK LARP 0 START WITH AR0
- LAC MBPOUT,15 GET & SCALE INOUT
- SACH FILIN
- CALL ORGBPS RUN FIRST STAGE
- ZALH FILOUT GET & SCALE PRE. OUT.
- SACH FILIN
- CALL ORGBPS RUN SECOND STAGE
- CALL ENRGMK CALCULATE THE MARK ENERGY
- B GETBIT
- *
- PAGE
- *************************************************
- * ANSWER MODE FILTER SECTION *
- *************************************************
- *
- ANSFLT EQU $
- LAC FILIN,13 GET & SCALE INOUT
- SACH FILIN HOLD IT
- CALL ORGBPS RUN FIRST STAGE
- LAC FILOUT,14 GET & SCALE PRE. OUT.
- SACH FILIN HOLD IT
- CALL ORGBPS RUN SECOND STAGE
- LAC FILOUT GET & SCALE PRE. OUT.
- SACL FILIN HOLD IT
- CALL ORGBPS RUN SECOND STAGE
- LAC FILOUT,15 GET & SCALE PRE. OUT.
- SACH FILIN HOLD IT
- CALL ORGBPS RUN THIRD STAGE
- LAC FILOUT,1 GET & SCALE PRE. OUT.
- SACL FILIN HOLD IT
- CALL ORGBPS RUN FOURTH STAGE
- LAC FILOUT MOVE BANDPASS OUTPUT
- SACL MBPOUT TO TEMPERARY STORAGE
- OUT MBPOUT,PA4
- *
- * SPACE BANDPASS ANSWER MODE
- ANSSP EQU $
- LARP 0 START WITH AR0
- LAC MBPOUT,14 GET & SCALE INOUT
- SACH FILIN HOLD IT
- CALL ORGBPS RUN FIRST STAGE
- LAC FILOUT GET & SCALE PRE. OUT.
- SACL FILIN HOLD IT
- CALL ORGBPS RUN SECOND STAGE
- CALL ENRGSP CALCULATE THE SPACE ENERGY
- * MARK BANDPASS ANSWER MODE
- ANSMK LARP 0 START WITH AR0
- LAC MBPOUT,14 GET & SCALE INOUT
- SACH FILIN
- CALL ORGBPS RUN FIRST STAGE
- LAC FILOUT,1 GET & SCALE PRE. OUT.
- SACL FILIN
- CALL ORGBPS RUN SECOND STAGE
- CALL ENRGMK CALCULATE THE MARK ENERGY
- *
- PAGE
- *************************************************
- * DECODE BIT AND CHECK ENERGY DETECT *
- *************************************************
- *
- GETBIT EQU $
- LAC SAMPLE CHECK IF BAUD ALLIGNED
- SUB ONE
- BNZ NXTCHK
- LACK 32
- NXTCHK SACL SAMPLE
- OUT SAMPLE,PA5
- OUT RECST,PA5
- OUT MKEGST,PA5
- SUB ONE,4
- BZ GOBIT
- LAC ONE,3
- AND MKEGST
- BNZ NOTCHG
- *
- CHKCHG EQU $
- LAC ONE CHECK LAST BIT DECODED
- AND MKEGST AS MARK OR SPACE
- BNZ WAS1 IF MARK THEN CHECK SPACE
- WAS0 LAC MKENG1 COMPARE MARK ENERGY
- SUB SPENG1 TO SPACE ENERGY
- BLZ NOTCHG IF MARK < SPACE THEN DONE
- LAC ONE,3 ELSE CHECK IF OUTPUT
- AND MKEGST SINCE LAST CHANGE
- BNZ FASTBT IF NOT THEN FAST BIT
- LACK >9 SET SAME BAUD FLAG
- SACL MKEGST IN MARK STATUS
- B RSTGST AND CONTINUE ROUTINE
- FASTBT LACK >9
- SACL SPEGST
- LACK >4 SET FAST BIT FLAG
- OR MKEGST
- SACL MKEGST FOR UPDATE NEXT BAUD
- B RSTGST AND CONTINUE ROUTINE
- WAS1 LAC SPENG1 COMPARE SPACE ENERGY
- SUB MKENG1 TO MARK ENERGY
- BLZ NOTCHG IF SPACE < MARK THEN DONE
- LAC ONE,3 ELSE CHECK IF OUTPUT
- AND MKEGST SINCE LAST CHANGE
- BNZ FASTB2 IF NOT THEN FAST BIT
- LACK >8 SET SAME BAUD FLAG
- SACL MKEGST IN MARK STATUS
- B RSTGST AND CONTINUE ROUTINE
- FASTB2 LACK >8
- SACL SPEGST
- LACK 4 SET FAST BIT FLAG
- OR MKEGST
- SACL MKEGST FOR UPDATE NEXT BAUD
- *
- RSTGST EQU $
- LACK 32 SET DELAY TO END OF BAUD
- SACL SAMPLE TO 16 AND
- NOTCHG EQU $
- * CHECK ENERGY LEVEL
- LAC ONE,6 SET MINIMUM ENERGY LEVEL
- SUB SPENG2 SUBTRACT OUT SPACE ENERGY
- SUB MKENG2 SUBTRACT OUT MARK ENERGY
- BGEZ NOENRG IF STILL POSITIVE THEN NO ENRGY
- LAC ONE,5 CHECK IN RECEIVE STATUSD
- AND RECST IF ENERGY DETECTED
- BNZ TOP103 IF SO THEN NEXT SAMPLE
- LAC TOTENG ELSE DECREMENT
- SUB ONE DELAY COUNT
- SACL TOTENG AND STORE IT
- BNZ TOP103 IF NOT ZERO THEN NEXT SAMPLE
- LACK >30 ELSE SET THE CARRIER AND
- OR RECST ENERGY DETECT BITS
- SACL RECST IN THE STATUS REGISTER
- LAC ONE,13 ALSO SET THE DCD OFF
- SACL TOTENG DELAY COUNTER
- B TOP103 AND WAIT FOR NEXT SAMPLE
- * NO ENERGY
- NOENRG LAC ONE,5 CHECK IF EDT SET
- AND RECST IN STATUS REGISTER
- BZ TOP103 IF NOT THEN NEXT SAMPLE
- LAC TOTENG ELSE DECREMENT
- SUB ONE TIMOUT DELAY COUNTER
- SACL TOTENG AND SAVE IT
- BNZ TOP103 IF NOT ZERO THEN NEXT SAMPLE
- LACK >CF ELSE MASK OFF THE DCD AND EDT
- AND RECST BITS OF THE STATUS REGISTER
- SACL RECST AND SAVE IT
- B TOP103 GO FOR NEXT SAMPLE
- *
- PAGE
- *************************************************
- * OUTPUT NEW BIT AND STATUS TO THE 7742 *
- *************************************************
- *
- GOBIT EQU $
- *
- LACK >7 CHECK 2ND BUFFER FULL
- AND MKEGST FLAG IN MARK STATUS
- SACL MKEGST IF SET THEN LOAD BIT
- CHKNB EQU $
- LACK >FE ELSE MASK OFF CURRENT BIT
- AND RECST IN RECEIVE STATUS
- SACL RECST AND SAVE IT
- LACK 1 ISOLATE THE
- AND MKEGST NEW DATA BIT
- OR RECST TO ADD TO
- SACL RECST THE RECEIVE STATUS
- OUT RECST,PA7 SEND TO 7742
- *
- LAC ONE,2 CHECK FOR LEADING RECEIVER
- AND MKEGST CARRIER
- BZ NOTCHG IF NOT CONTINUE
- LAC SPEGST
- SACL MKEGST
- B NOTCHG
- *
- PAGE
- *************************************************
- * CALCULATE SPACE ENERGY *
- *************************************************
- *
- ENRGSP EQU $
- OUT FILOUT,PA4 FOR DEBUG
- LAC FILOUT,13 SAVE FILTER OUTPUT
- ABS MAGNITUDE
- SACH TEMP OF THE ENERGY
- LAC SPENG2 CALCULATE ENERGY OF LAST FOUR
- ADD TEMP SAMPLES
- SACL SPENG1 AND SAVE IT
- OUT SPENG1,PA4
- OUT SPENG1,PA5
- BIGSP LAC SPENG1 MOVE CURRENT ENERGY
- SUB SPHLD8 AND DECREMENT THE OLDEST
- SACL SPENG2 SAMPLE ENERGY
- LAC SPHLD7 SHIFT UP THE SAMPLES
- SACL SPHLD8 HISTORY TO MAKE ROOM FOR
- LAC SPHLD6 THE CURRENT SAMPLE
- SACL SPHLD7
- LAC SPHLD5
- SACL SPHLD6
- LAC SPHLD4
- SACL SPHLD5
- LAC SPHLD3
- SACL SPHLD4
- LAC SPHLD2
- SACL SPHLD3
- LAC SPHLD1
- SACL SPHLD2
- LAC TEMP LOAD IN THE CURRENT SAMPLE
- SACL SPHLD1 INTO THE SAMPLE HISTORY
- RET
- *
- PAGE
- *************************************************
- * CALCULATE MARK ENERGY *
- *************************************************
- *
- ENRGMK EQU $
- OUT FILOUT,PA4 FOR DEBUG
- LAC FILOUT,13 SAVE FILTER OUTPUT
- ABS MAGNITUDE
- SACH TEMP OF THE ENERGY
- LAC MKENG2 CALCULATE ENERGY OF LAST FOUR
- ADD TEMP SAMPLES
- SACL MKENG1 AND SAVE IT
- OUT MKENG1,PA4
- OUT MKENG1,PA5
- BIGMK LAC MKENG1 MOVE CURRENT ENERGY
- SUB MKHLD8 AND DECREMENT THE OLDEST
- SACL MKENG2 SAMPLE ENERGY
- LAC MKHLD7 SHIFT UP THE SAMPLES
- SACL MKHLD8 HISTORY TO MAKE ROOM FOR
- LAC MKHLD6 THE CURRENT SAMPLE
- SACL MKHLD7
- LAC MKHLD5
- SACL MKHLD6
- LAC MKHLD4
- SACL MKHLD5
- LAC MKHLD3
- SACL MKHLD4
- LAC MKHLD2
- SACL MKHLD3
- LAC MKHLD1
- SACL MKHLD2
- LAC TEMP LOAD IN THE CURRENT SAMPLE
- SACL MKHLD1 INTO THE SAMPLE HISTORY
- RET
- *
- PAGE
- *************************************************
- * BANDPASS FILTER STAGE *
- *************************************************
- *
- ORGBPS EQU $
- LT FILIN GET SCALE INPUT
- MPY *+,1 B0 MULTIPLY
- ZALH *+,0 GET Z-1
- APAC FORM OUTPUT
- SACH FILOUT,1 SAVE OUTPUT
- MPY *+,1 B1 MULTIPLY
- ZALH *-,0 GET Z-2
- LTA FILOUT GET CURRENT OUTPUT
- MPY *+,1 A1 MULTIPLY
- LTA FILOUT GET CURRENT OUTPUT
- APAC EXTRA LOOP ADD
- SACH *+,0,0 SAVE Z-1
- MPY *+ A2 MULTIPLY
- ZAC INIT. ACC
- LTA FILIN GET SCALED INPUT
- MPY *+,1 B2 MULTIPLY
- APAC FORM RESULT
- SACH *+,0,0 SAVE Z-2
- RET RETURN TO CALLING SEQUENCE
- *
- END