; THIS PROGRAM IS THE CONTROL FOR THE ; 2 LINE AUTOMATED ATTENDANT AND IS TARGETED ; FOR AN 8749 RUNNING AT 10.00 MHZ. ; ACA2.ASM BY BILL HEIDEMAN ; VERSION 1.0 OCTOBER 18,1987 ;***************************************** ; ; DECLEARED VARIABLES ; COMCHN EQU 36 ;FOR PRODUCT RNGDLY EQU 1 ;RING DELAY BUFSIZ EQU 13 ;DIGIT BUFFER SIZE ;***************************************** ; DECLARED DATA TMCT0 EQU 32 ;TIMER COUNTER 0 MATRIX EQU 33 ;CROSS POINT MATRIX (4) DSPOT EQU 37 ;DISPLAY OUTPUT (4) SWITCH EQU 41 ;RAW SWITCH DATA DSPCNT EQU 42 ;DISPLAY BYTE CNTR HVAL EQU 43 ;RAW H LINE VALUE RPHAS EQU 44 ;RING PHASE CNTR (2) DUM32 EQU 46 ;DUMMY 32 SEC DISPLAY (2) MATPTR EQU 48 ;MATRIX POINTER CODSWT EQU 49 ;CODE SWITCH ;SPARE EQU 50 HANGUP EQU 51 ;HANG-UP REQUEST FLGS RECDAT EQU 52 ;VOICE SET-UP DATA (2) ; D1-D0=PHASE ; D3-D2=PHRASE NUMBER ; D5-D4=SPEED ; D6=STOP FLAG ; D7=RECORD FLAG SWTCHG EQU 54 ;SWITCH CHANGED BITS TMCT1 EQU 55 ;.5 SECOND TIMER SWTLST EQU 56 ;LAST SWITCH READ VALUE SWTDEB EQU 57 ;DEBOUNCED SWITCH VALUE SWTDCD EQU 58 ;DECODED SWITCH VALUE ; D0=OFF ; D1=RECORD ; D2=ANSWER ; D3=(SPARE) ; D4=DAY 5 ; D5=DAY 3 ; D6=NIGHT ANSPHS EQU 59 ;ANSWER PHASE M98PHS EQU 60 ;CALL PROGRESS PHASE DILPHS EQU 61 ;AUTO DIALER PHASE ; D3-D0=PHASE ; D4=STORE ; D5=AUTO DIAL ; D6=DIAL POKED NUMBER ; D7=UPPER LINE TTENA EQU 62 ;TOUCH TONE ENABLE SAVER BUSOT EQU 63 ;BUS OUTPUT SAVER CAPTUR EQU 64 ;CALL PROGRESS CONTROL ; D0=L1 ENABLE ; D1=L1 BUSY ; D2=L1 RINGING ; D4=L2 ENABLE ; D5=L2 BUSY ; D6=L2 RINGING M98DEB EQU 65 ;CALL PROGRESS DEBN CNTRS (2) TONON EQU 67 ;202P READ FLAGS ; D0=L1 ENABLE ; D1=L2 ENABLE ; D2=L1 ON ; D3=L2 ON ;******************************************* BUFR1 EQU 68 ;DIALING BUFFER FOR L1 (14) BUFPTR EQU 82 ;BUFFER PNTRS (2) BUFR2 EQU 84 ;DIALING BUFFER FOR L2 (14) ;******************************************** ;******************************************** ; THESE VALUES MUST STAY TOGETHER CLSTTL EQU 98 ;TOTAL CALL ANSWERED CLSL1 EQU 100 ;TOTAL CALLS ON LINE 1 CLSL2 EQU 102 ;TOTAL CALLS ON LINE 2 ;******************************************** RECTIM EQU 104 ;RECORDING TIME BCD (2) VCRCTM EQU 106 ;VOICE RECORD TIMER VOCMD EQU 107 ;VOICE MONITOR COMMAND (2) ; D0=PLAY LAST ; D1=DAY 5 MSG ; D2=DAY 3 MSG ; D3=NIGHT MSG ; D4=PLAY ALL ; D5=STOP ; D6=PLAY/REC ; D7=REMOTE RECLST EQU 109 ;LAST CHANNEL RECORDED ;******************************************* ; THESE VALUES MUST STAY TOGETHER ANSDLY EQU 110 ;ANSWER MONITOR DELAYS (2) M98DLY EQU 112 ;CALL PROGRESS MONITOR DELAY DILDLY EQU 113 ;DIALING DELAY ******** ;******************************************* SWTOLD EQU 114 ;OLD SWITCH COMMAND STKPTR EQU 115 ;STACK POINTER STAK1 EQU 116 ;CALL PROGRESS STACK (4) STAK2 EQU 120 ;CALL PROGRESS STACK (4) RPLPHS EQU 124 ;REPLAY ALL PHASING ; D3-D0=PHASE ; SEND MSG,WAIT FOR BUSY ; WAIT FOR DONE,PAUSE ; D5-D4=MSG NUMBER REMOTE EQU 125 ;REMOTE MODE PHASING RPLTMR EQU 126 ;REPLAY MESSAGE TIMER ;F0 (SPARE) ;F1 FLASH DISPLAY ;R7 RECDED RECORDED MESSAGES ;R7' ACC SAVE ;THIS IS THE MAIN RESTART FROM POWER-UP ORG 000H MAIN: MOV R2,#112 CLR A MOV R0,#10H ;CLEAR ALL RAM JMP MAIN1 ;THIS ROUTINE IS THE REAL TIME CLOCK. ;IT IS CALLED EVERY 2 MSEC FROM AN ;INTERNAL TIMER. ORG 007H TMR: SEL RB1 MOV R7,A ;SAVE STATUS MOV A,#0D8H ;RESET TIMER TO 2 MSEC MOV T,A STRT T CALL RGDT ;DO RING DETECT TMR4: MOV A,R7 RETR ;THIS IS THE MAIN LINE ROUTINE FROM WHICH ALL ;NON TIME CRITICAL ROUTINES ARE CALLED. MAIN1: MOV @R0,A ;CLEAR DATA INC R0 DJNZ R2,MAIN1 OUTL BUS,A ;TURN OFF DISPLAY MOV A,#1CH OUTL P2,A ;INITIALIZE P2 CALL VCRES ;DO VOICE RESET MOV A,#0C0H OUTL P1,A ;INITIALIZE P1 MOV R0,#VCRCTM MOV @R0,#0FFH ;STOP TIMER MOV R7,#0EH ;SET ALL RECORDED MOV R0,#DUM32 MOV @R0,#32H ;SET DUMMY DISP STRT T EN TCNTI MAIN2: JMP MAIN2 ;THIS ROUTINE READS THE H LINES AND DETERMINES ;IF A LINE IS RINGING OR NOT. IT IS CALLED ;EVERY 2 MSEC. 0=IDLE, 64=RING. RGDT: MOV R1,#RPHAS MOV R5,#1 ;SET BYTE CNTR RGDT1: MOV R0,#HVAL MOV A,@R0 ANL A,R5 JNZ RGDT3 ;IF H LINE UP MOV A,@R1 JZ RGDT2 ;IF COUNTER IDLE INC @R1 ;INCR COUNTER INC @R1 RGDT2: INC R1 MOV R5,#8 ;SET UP NEXT LINE MOV A,R1 XRL A,#RPHAS+2 JNZ RGDT1 ;LOOP IF NOT DONE RET RGDT3: MOV A,@R1 XRL A,#64 JZ RGDT2 ;IF COUNTER MAXED MOV A,@R1 DEC A ;DECR COUNTER MOV @R1,A JMP RGDT2 END