home *** CD-ROM | disk | FTP | other *** search
- TITL ' TMS7041 MODEM DIALER CODE '
- IDT 'TONE'
- OPTION XREF,TUNLST
- ************************************************************
- ** This code processes a 320 tone/pulse dial command. **
- ** **
- ** Written by Peter Ehlig **
- ** **
- ** Revision 1.0 11/12/85 PETER EHLIG **
- ** Revision 1.1 05/20/85 PETER EHLIG **
- ** **
- ** COPYRIGHT TEXAS INSTRUMENTS, 07/25/86 **
- ** **
- ************************************************************
- *
- * DEFINITIONS AND REFERENCES
- DEF TONE,DB,MSDLY,SECDLY,INT1,INT2,RUNHSA
- REF PRINT,TOP,B212,B103,RUNANS,RNANS2,RANSM,GO320
- *
- PAGE
- *
- COPY DTE2.EQU
- *******----------------------------------------*******
- ***** Dial Blind *****
- *******----------------------------------------*******
- *
- * ENTRY POINT FOR OPERATION WITH 320 DIALER
- TONE EQU $
- OR %BIT6,SWSTAT ; set status to blind dial
- MOVP %>2A,IOCNT0 ; disable RI interrupt
- ORP %BIT0,BPORT ; ENABLE CODEC
- * ORP %BIT0,CPORT ; turn off CTS_
- ORP %>8C,APORT ; originate mode,
- CALL @TONED ; CALL TONE DIALING ROUTINE
- OVRDB EQU $
- ORP %BIT2,BPORT ; DE-ACTIVATE FILTER CHIP ALB
- ORP %BIT0,BPORT ; ENABLE CODEC
- MOVP %>3F,DDDR ; SETUP DPORT FOR OUTPUT
- MOVP %>3D,DPORT ; RUN 300BPS MODEM W/O XMT
- ANDP %NOT6,BPORT ; LATCH DATA INTO XMT.BUF
- ORP %BIT6,BPORT ; AND RESET READ ACK
- MOVP %>00,DDDR ; RESET DPORT AS INPUT
- IBRSP BTJOP %BIT6,DPORT,IBRSP ; WAIT FOR 320 RESPONSE
- MOVD %ICALM,MSGL ; STATE CALL INITIATED
- CALL @PRINT ; AND SEND IT
- CLR MSGM ; initialize carrier abort timer
- CLR MSGL ;
- CLR CWT1 ; TO BE ABOUT 2 MINUTES
- CLR CWT2 ;
- W320 BTJOP %BIT7,DPORT,W320 ; WAIT FOR 320 WRITE
- MOVP %0,DDDR ; REVERSE PORT DIRECTION
- ANDP %NOT7,BPORT ; RESET WRITE STROBE
- MOVP DPORT,A ; LINE FROM 320
- ORP %BIT7,BPORT ; BY TOGGLING
- AND %>3F,A ; MASK OFF UNDEFINED BITS
- CMP %>31,A ; IS THERE CARRIER DETECT
- JNZ OVCNT0 ; IF NOT = THEN SKIP DELAY
- INC MSGL ; AFTER 8 READS WITH ACTIVE
- BTJO %BIT3,MSGL,GOTDCD ; CARRIER RUN MODEM
- OVCNT0 INC CWT1 ; INCREMENT FIRST STAGE
- JNC W320 ; COUNTER
- INC CWT2 ; INCREMENT SECOND STAGE
- JNC W320 ; COUNTER
- SQUEL ANDP %NOT7,APORT ; GO ON HOOK
- MOVP %>1C,APORT ; ORG MODE, OFF HOOK
- ANDP %NOT0,CPORT ; ACTIVATE CTS
- BR @TOP ; RETURN TO COMMAND HANDLER
- *
- GOTDCD AND %NOT6,SWSTAT
- BTJZ %BIT7,SWSTAT,B103A ; check for modem type
- CLR A ; SQUELCH THE 300 BPS
- MOVP %>3F,DDDR ; TURN COMMAND BUFFER OUT
- MOVP %>00,DPORT ; CLEAR COMMAND
- ANDP %NOT6,BPORT ; TOGGLE READ ACKNOWLEDGE
- ORP %BIT6,BPORT ; LINE TO RESET
- MOVP %>00,DDDR ; TURN COMMAND BUFFER IN
- IBRSP2 BTJOP %BIT6,DPORT,IBRSP2 ; WAIT FOR 320 RESPONSE
- BR @B212 ; RUN AT 1200BPS
- *
- B103A EQU $
- MOVD %RUNSL,MSGL ; ACKNOWLEDGE HOOKUP
- CALL @PRINT ; BY MESSAGE
- BR @B103 ; RUN AT 300BPS
- *
- PAGE
- *******----------------------------------------*******
- ***** TONED - LET 320 GENERATE THE DIGIT TONES *****
- *******----------------------------------------*******
- TONED EQU $
- MOVD %4000,MSTIME ; set wait period for 2 sec
- CALL @MSDLY ; and wait
- MOV %1,B
- TONXD LDA @COMBUF(B) ; load subcommand/digit
- CMP %ZERO,A ; is it the last command
- JNE MORDIG ; no, continue
- RETS ; yes, return
- MORDIG INC B ; bove pointer to next digit
- CMP %'0',A ; check less than '0'
- JL NOTDIG ; yes, not a digit
- CMP %'9'+1,A ; check > 9
- JHS NOTDIG ; yes, get next digit
- SUB %'0',A ; convert ascii to integ
- BR @SNDTON ; no, send digit to 320
- NOTDIG CMP %'+',A ; if digit = ,
- JEQ TPAUSE ; then pause
- SPCDIG BR @TONXD ; get next digit
- *
- TPAUSE MOV %2,VALUE ; delay at least 2 sec
- CALL @SECDLY ; wait
- BR @TONXD ; and get next digit
- *
- SNDTON EQU $
- CMP %>44,CMDCHR ; IS IT TONE DIAL
- JNE DTMF1 ; YES, DIAL IT DTMF
- BR @PULSE ; ELSE, DIAL IT PULSE
- DTMF1 MOVP %>3F,DDDR ; setup DPORT for output
- OR %>10,A ; set to dial command mode
- MOVP A,DPORT ; send the digit to be dialed
- ANDP %NOT6,BPORT ; latch output to 320
- ORP %BIT6,BPORT ; and reset read status
- MOVP %>00,DDDR ; TURN DPORT IN
- TONELP BTJOP %BIT6,DPORT,TONELP ; wait for 320 response
- MOVP %>3F,DDDR ; set up D0-D5 as outputs
- ANDP %>C0,DPORT ; clear out the command
- ANDP %NOT6,BPORT ; Latch data into xmt.buffer
- ORP %BIT6,BPORT ; and reset RACK
- MOVP %>00,DDDR ; TURN DPORT IN
- MOVD %140,MSTIME ; set delay for 140ms
- CALL @MSDLY ; and wait
- BR @TONXD ; get next digit
- *
- PULSE EQU $
- CMP %0,A ; IS IT ZERO DIGIT
- JNE PULSE1 ; NO, SKIP ADJUST
- MOV %10,A ; ELSE SET TO 10 PULSES
- PULSE1 ANDP %NOT7,APORT ; PUT IT ON-HOOK
- MOVD %61,MSTIME ; SET DELAY FOR 61MS
- CALL @MSDLY ; AND WAIT
- ORP %BIT7,APORT ; TAKE OFF-HOOK
- MOVD %40,MSTIME ; SET DELAY FOR 40MS
- CALL @MSDLY ; AND WAIT
- DEC A ; DECREMENT PULSE COUNT
- JZ LSTPUL ; IF ZERO THEN DONE
- JMP PULSE1 ; ELSE NEXT PULSE
- LSTPUL MOVD %800,MSTIME ; SET DELAY FOR 800MS
- CALL @MSDLY ; AND WAIT
- BR @TONXD ; GET THE NEXT DIGIT
- *
- PAGE
- *******----------------------------------------*******
- ***** MSDLY - Wait MSTIME number of milliseconds *****
- *******----------------------------------------*******
- MSDLY EQU $
- MOV %CNTVAL,DELYR1 ; load the inner counter (9)
- HERE2 DJNZ DELYR1,HERE2 ; (9+2)
- DECD MSTIME ; (11)
- JC MSDLY ; (7)
- RETS
- *******----------------------------------------*******
- ***** SECDLY - Wait VALUE number of seconds *****
- *******----------------------------------------*******
- SECDLY CMP %0,VALUE
- JEQ NODLY
- NXTSEC MOVD %1001,MSTIME
- CALL @MSDLY
- DJNZ VALUE,NXTSEC
- NODLY RETS
- ********************************************************
- PAGE
- INT1 EQU $
- RIWAIT ORP %BIT1,IOCNT0 ; CLEAR EDGE LATCH
- BTJOP %BIT1,IOCNT0,RIWAIT ; WAIT FOR end of ring
- *
- BTJZ %BIT1,SWSTAT,NOANS * IS AUTO-ANSWER ENABLED
- MOVD %GOTCAL,MSGL * PRINT 'RECEIVED CALL'
- CALL @PRINT
- POP A
- POP A
- POP ST
- ORP %BIT0,CPORT * DISABLE CD TO DTE
- ORP %BIT1,CPORT * ALSO DSR
- MOVP %>0A,IOCNT0 * CLEAR INT FLAGS,DISABLE
- EINT
- BTJO %BIT7,SWSTAT,ANS12 * ANSWER 1200 BPS MODEM
- BR @RUNANS * RUN BELL 103 MODEM
- NOANS RETI *
- *
- ANS12 EQU $
- RIHIGH ORP %BIT1,IOCNT0 ; CLEAR EDGE LATCH
- BTJOP %BIT1,IOCNT0,RIHIGH ; WAIT FOR end of ring
- ORP %BIT2,BPORT ; DE-ACTIVE FILTER CHIP ALB
- ORP %BIT0,BPORT ; ENABLE CODEC
- ORP %BIT7,APORT ; TAKE IT OFF HOOK
- MOVP %>3F,DDDR ; SETUP DPORT FOR OUTPUT
- MOVP %>3C,DPORT ; SET 212 ANS/W. ANS.TONE CMND
- ANDP %NOT6,BPORT ; Latch data into xmt.buffer
- ORP %BIT6,BPORT ; and reset RACK
- MOVP %>00,DDDR ; turn DPORT in
- IB212A BTJOP %BIT6,DPORT,IB212A ; CHECK 320 RESPONSE
- MOVD %RANSM,MSGL ; GET CONFIRMATION MESG
- CALL @PRINT ; AND SEND IT
- CLR MSGM ; INITIALIZE THE CARRIER
- CLR MSGL ; ABORT TIMER COUNTER
- CLR CWT1 ; TO BE ABOUT
- MOV %>FF,CWT2 ; 1.7 seconds
- IB212B BTJOP %BIT7,DPORT,IB212B ; WAIT FOR RESPONSE FROM 320
- MOVP %0,DDDR ; REVERSE PORT DIRECTION
- ANDP %NOT7,BPORT ; ENABLE LATCH READ
- MOVP DPORT,A ; AND READ IT
- ORP %BIT7,BPORT ; RESET ACKNOWLEDGE BIT
- AND %>3F,A ; MASK OFF UNDEFINED BITS
- CMP %>31,A ; IS THERE CARRIER DETECT
- JNZ OVRCNT ; IF NOT THEN SKIP DELAY
- INC MSGL ; AFTER 8 READS WITH ACTIVE
- BTJO %BIT3,MSGL,GOT212 ; CARRIER, RUN MODEM
- OVRCNT INC CWT1 ; INCREMENT 1ST STAGE
- JNC IB212B ; COUNTER
- INC CWT2 ; INCREMENT 2ND STAGE
- JNC IB212B ; COUNTER
- ANDP %NOT0,CPORT ; ACTIVATE CTS
- BR @RNANS2 ; RETRY 103 ANSWER MODE
- GOT212 EQU $
- MOVP %>3F,DDDR ; SETUP DPORT FOR OUTPUT
- MOVP %>30,DPORT ; SET 212 ANS MODE MODEM
- ANDP %NOT6,BPORT ; Latch data into xmt.buffer
- ORP %BIT6,BPORT ; and reset RACK
- MOVP %>00,DDDR ; TURN DPORT IN
- IB212C BTJOP %BIT6,DPORT,IB212C ; CHECK 320 RESPONSE AND
- MOVD %RUNHSA,MSGL ; ACKNOWLEDGE HOOKUP
- CALL @PRINT ; BY MESSAGE
- BR @GO320 ; RUN DSP COMM ROUTINE
- *
- GOTCAL TEXT 'RECEIVED CALL'
- BYTE >0A,>0D,0
- RUNHSA TEXT 'ANSWER MODEM LINKED AT 1200BPS'
- BYTE >0A,>0D,0
- INT2 EQU $ ; ABORT TIMER LATER
- RETI
- *-------
- DB RETS
- PAGE
- *******----------------------------------------*******
- ***** screen messages - text statements *****
- *******----------------------------------------*******
- CONN3 TEXT 'CONNECT 300'
- BYTE 0
- *
- ICALM TEXT 'CALL INITIATED'
- BYTE 0
- *
- RUNSL TEXT '300BPS MODEM RUNNING '
- BYTE 0
- *
- END