home *** CD-ROM | disk | FTP | other *** search
- TITL ' TMS 7041 MODEM INTERFACE PROGRAM'
- OPTION XREF,TUNLST
- ************************************************************
- ** DTEA.MPO IS THE COLLECTION OF THE TMS7041 CODE OF **
- ** MODEM SYSTEM. THIS CODE INCLUDES THE FOLLOWING: **
- ** **
- ** DINIT1.ASM POWER UP INITIALIZATION **
- ** DRUN1.ASM RUN 1200BPS PSK MODEM **
- ** DRUN2.ASM RUN 300BPS PSK MODEM **
- ** DSCRM1.ASM PSK SCRAMBLER/DESCRAMBLER **
- ** DCMND1.ASM COMMAND HANDLER **
- ** DDIAL4.ASM DTMF/PULSE DIALER **
- ** **
- ** PROGRAM WRITTEN BY AL LOVERICK AND PETER EHLIG **
- ** **
- ** SYSTEM REVISION A: PETER EHLIG **
- ** **
- ** SYSTEM REVISION B: RAJ CHIRAYIL **
- ** **
- ** SYSTEM REVISION C: PETER EHLIG **
- ** **
- ** PROGRAM MAIN REVISION 1.0 11/12/85 PETER EHLIG **
- ** REVISION 1.1 1/28/86 RAJ CHIRAYIL **
- ** REVISION 1.2 5/20/86 PETER EHLIG **
- ** **
- ** COPYRIGHT TEXAS INSTRUMENTS, 07/25/86 **
- ** **
- ************************************************************
- PAGE
- *
- * 7041 PORT ASSIGNMENTS
- * INIT TO
- * APORT -------
- * A7 A6 A5 A4 A3 A2 A1 A0
- * OHR_ N.C. RCVD N.C. A_/O N.C. N.C. N.C.
- * (O) (I) (I) (O) (O) (O) (I) (I) >1C
- *
- * BPORT
- * B7 B6 B5 B4 B3 B2 B1 B0
- * WACK- RACK- NC NC TXD ALB- NSEL PDN-
- * (O) (O) (O) (O) (O) (O) (O) (O) >FE
- *
- * CPORT
- * C7 C6 C5 C4 C3 C2 C1 C0
- * NC NC NC NC NC NC DSR CD
- * (O) (O) (O) (O) (O) (O) (O) (O) >FB
- *
- * DPORT (READ)
- * D7 D6 D5 D4 D3 D2 D1 D0
- * DSPW DSPR DCD EDT RDB3 RDB2 RDB1 RDB0
- * (I) (I) (I) (I) (I) (I) (I) (I)
- *
- * DPORT (WRITE)
- * D7 D6 D5 D4 D3 D2 D1 D0
- * DSPW DSPR CB2 CB1 RDB3 RDB2 RDB1 RDB0
- * (I) (I) (O) (O) (O) (O) (O) (O) >0F
- *
- *----------------------------------------------------
- * +-------------------------------+
- * SWSTAT | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
- * +-------------------------------+
- *
- * BIT7: modem type 0= B103 mode
- * 1= B212 mode
- *
- * BIT6: timer flag 0= carrier wait timer enabled
- * 1= 1200 Hz timer enabled
- *
- * BIT5: 1st dibit flag 0= flag reset
- * 1= flag set
- *
- * BIT4: ESC flag 0= ESC code disabled
- * 1= ESC code enabled
- *
- * BIT2: A-/O Mode 0= ANS. mode
- * 1= ORG. mode
- *
- * BIT1: AUTOANS flag 0= auto answer disabled
- * 1= auto answer enabled
- * BIT0: CD flag 0= Carrier detect not set
- * 1= Carrier detect set
- *----------------------------------------------------
- IDT 'DMAIN1'
- * OPTION XREF
- RORG 0
- *
- * SUBROUTINE REFERENCES AND DEFINITIONS
- REF INIT,GO320,COMLIS,INT1,INT2
- DEF TOP,PRINT
- PAGE
- *
- COPY DTE2.EQU
- *
- * main routine
- *
- BR @INIT ; INITIALIZE ALL PARAMETERS
- *
- TOP MOVD %HELLO,MSGL ; Send hello message
- CALL @PRINT
- *
- * look for input commands.
- *
- *LOOK CALL @CLEAR ; clear the command buffer
- * MOVD %ADDTOP,ADDRES ; point to top of buffer
- LOOK CLR B ; clear buffer command pointer
- LK4COM BTJZP %BIT1,SSTAT,LK4COM ; command received?
- MOVP RXBUF,A
- MOVP A,TXBUF ; echo
- WAIT4 BTJZP %BIT2,SSTAT,WAIT4
- CMP %CR,A ; carriage return?
- JEQ EXEC ; yes, go execute command
- *
- CMP %BS,A ; Check for back space
- JEQ BACKUP ; clear current loc. and
- * ; decrement pointer
- CMP %>20,A ; Check for control chars
- JL LK4COM ; Ignore all except BS
- CMP %>7F,A ; DEL same as BS
- JEQ BACKUP
- JC LK4COM ; Ignore if greater
- NXTSTG STA @COMBUF(B) ; location for command
- INC B ; location for next command
- CMP %40,B ; allow 40 chars maximum
- JEQ ERR ; if > 40..clear buffer
- JMP LK4COM ; keep going till <CR>
- *
- BACKUP CMP %0,B ; do we have anything yet?
- JEQ LK4COM ; no, return
- DEC B ; point to previous buffer
- CLR A ; write 0 in comand buffer
- STA @COMBUF(B) ;
- MOV %BLANK,A ; write space over last chr
- MOVP A,TXBUF
- ECHSP BTJZP %BIT2,SSTAT,ECHSP ; wait for echo
- MOV %BS,A ; write BS to adjust cursor
- MOVP A,TXBUF ; wait for echo
- ECHBS BTJZP %BIT2,SSTAT,ECHBS ;
- BR @LK4COM ; wait for next char
- *
- ERR CALL @CLEAR ; clear command buffer
- MOVD %ERROR,MSGL ; send error message
- CALL @PRINT
- MOV %STACK,B ; reset the stack pointer
- LDSP
- BR @LOOK
- *
- EXEC CLR A ; write 0 in combuf
- STA @COMBUF(B) ;
- CLR B ; clear pointer
- LDA @COMBUF(B) ; get first letter of command
- CMP %'A',A
- JL ERR ; Check for A thru Z
- CMP %'Z'+1,A
- JHS ERR
- MOV A,CMDCHR ; store first character
- CLR B ; look thru COMLIS for match
- SEARCH LDA @COMLIS(B) ;
- CMP CMDCHR,A ; do we have a match yet?
- JEQ GOTCMD ; yes,execute it
- CMP 'Z',A ; no, end yet?
- JEQ ERR ; yes, invalid command
- ADD %4,B ; no, increment CMDLIS pointer by
- JMP SEARCH ; 4 to point to next command
- *
- GOTCMD ADD %2,B ; point B to the address of
- * ; the routine
- LDA @COMLIS(B) ; Get MSB of address
- MOV A,LOCHI ; save it
- INC B ; move pointer to LSB
- LDA @COMLIS(B) ; read it
- MOV A,LOCLO ; and save it
- BR *LOCLO ; execute command
- *
- PAGE
- *******----------------------------------------*******
- ***** Clear command buffer *****
- *******----------------------------------------*******
- CLEAR CLR A
- CLR B
- MORE STA @COMBUF(B) ; zero command register
- INC B
- CMP %30,B ; are we done yet?
- JNE MORE
- RETS
- *
- PAGE
- *******----------------------------------------*******
- ***** PRINT subroutine *****
- *******----------------------------------------*******
- * MSGM and MSGL contain the address of text to print
- * for messages to the screen
- *
- PRINT CALL @CRLF
- PRINT1 LDA *MSGL
- JZ WAIT6
- MOVP A,TXBUF ; print each character in
- * ; text statement
- WAIT5 BTJZP %BIT0,SSTAT,WAIT5 ; wait for txbuf ready
- INC MSGL
- ADC %0,MSGM
- JMP PRINT1
- WAIT6 CALL @CRLF
- RETS
- *
- * send carriage return/line feed
- *
- CRLF MOV %>0D,A
- MOVP A,TXBUF ; send carriage return
- CRWAIT BTJZP %BIT0,SSTAT,CRWAIT
- MOV %>0A,A
- MOVP A,TXBUF ; send line feed
- LFWAIT BTJZP %BIT2,SSTAT,LFWAIT
- RETS
- *
- PAGE
- *
- HELLO TEXT 'DSP MODEM. VERSION 1.0'
- BYTE 0
- *
- ERROR TEXT 'ERROR'
- BYTE 0
- *
- PAGE
- *
- INT3 EQU $
- INT4 EQU $
- INT5 RETI
- AORG >FFF4
- VECT5 DATA INT5
- VECT4 DATA INT4
- VECT3 DATA INT3
- VECT2 DATA INT2
- VECT1 DATA INT1
- VECT0 DATA INIT
- *
- END