$TITLE(HANDLE ALL TESTING MODES OF THE 212) ; M_50MS EQU 2 M_120MS EQU 5 M_400MS EQU 16 M_154MS EQU 6 M_774MS EQU 29 M_100MS EQU 4 M_230MS EQU 10 ; IRT: RDL: JB ALB_FLG,XXRDL ;ILLEGAL TO HIT RDL BUTTON IN ALB JNB B212_FLG,XXRDL ;NOT HI SPEED, NOT RDL SETB CTS_BIT ;DROP CTS, BUT NOT CXR CLR IE.3 ;STOP TIMER 1 SETB CLP_SYN SETB RCVD ;CLAMP DTE TO MARK SETB IRT_FLG CALL AATTN MOV DPTR,#PORT_C MOVX A,@DPTR ;NO SLAVE CLK ANL A,#11011111B MOVX @DPTR,A MOV MMTY_CNT,#1CH MOV MMTY_CNT+1,#0 SETB DOT_ERR CLR SNDOT_FLG ;JUST IN CASE I CAME FR ST SETB HUNT_FLG SETB RVDOT_FLG ;PREPARE TO DETECT SCRAMED DOTTING SETB SDMK_FLG ;PREPARE TO SND UNSCRAM MK CLR SCRM_FLG MOV TMCON_HI,#HIGH(-M_774MS) MOV TMCON_LO,#LOW(-M_774MS) MOV TMOUT_HI,#HIGH(RDL2) MOV TMOUT_LO,#LOW(RDL2) CALL TM_TRAP RDL1: CALL AATTN JNB DOT_ERR,RDL2 CLR C MOV A,MMTY_CNT SUBB A,#1DH MOV A,MMTY_CNT+1 SUBB A,#0 JC RDL1 MOV MMTY_CNT,#1CH MOV MMTY_CNT+1,#0 SJMP RDL1 ; XXRDL: JMP MODEM ; RDL2: CALL UNTRAP MOV TMCON_HI,#HIGH(-M_120MS) MOV TMCON_LO,#LOW(-M_120MS) MOV TMOUT_HI,#HIGH(RDL4) MOV TMOUT_LO,#LOW(RDL4) CALL TM_TRAP ; RDL3: JB DOT_ERR,NNRDL CALL AATTN JMP RDL3 NNRDL: CALL UNTRAP CLR DOT_ERR JMP CK_IRT ; RDL4: CALL UNTRAP SETB SCRM_FLG ;SEND SCRAM MK FOR 774MS MOV TMCON_HI,#HIGH(-M_774MS) MOV TMCON_LO,#LOW(-M_774MS) MOV TMOUT_HI,#HIGH(RDL6) MOV TMOUT_LO,#LOW(RDL6) CALL TM_TRAP RDL5: CALL AATTN SJMP RDL5 ; RDL6: CALL UNTRAP CALL AATTN SETB SCRM_FLG CLR SDMK_FLG JB ST_FLG,STTTT CLR SNDOT_FLG CLR RVDOT_FLG CLR DOT_ERR CLR CLP_SYN CALL I_PTR1 JB SYN_FLG,SYNNN SETB IE.3 SYNNN: ;I DELETED MSG AND CALL LCD, WHAT TO DO NOW RDL_ST: CLR DISBIT CLR DATBIT ;NOT IN DATA MODE CLR DOT_ERR CLR CTS_BIT JMP MODEM STTTT: SETB SNDOT_FLG SETB RVDOT_FLG JMP RDL_ST ; ; ;DTR HAS DROPPED FOR MORE THAN 270MS, THEN DISCONNECT OR DO ;SEND SPACE DISCONNECT ; DTR_DROP: ;DTR HAS DROPPED MOV TMCON_HI,#HIGH(-M_50MS) MOV TMCON_LO,#LOW(-M_50MS) MOV TMOUT_HI,#HIGH(DROP2) MOV TMOUT_LO,#LOW(DROP2) CALL TM_TRAP DROP1: CALL AATTN SJMP DROP1 DROP2: CALL UNTRAP JNB DTR,G_MODEM ;CHECK DTR JMP SDSP1 ;SEND SP DISCONNECT ; ;LOCAL DIGITAL LOOOP BACK, WHEN I SENSE THIS SW ;I AM ALREADY CONNECTED IN WHATEVER MODE, WHATEVER SPEED ;SO JUST SET THE ANALOG SW, SET FLG AND BEHAVE LIKE A MODEM ; DLB: JB ALB_FLG,G_MODEM ;BRANCH IF IN ALB JB RTRT_FLG,G_MODEM ;ALREADY IN TEST CLR DISBIT ;DISABLE RS-232 DISPLAY JB IRT_FLG,G_MODEM JB ST_FLG,G_MODEM SETB DLB_FLG ;DO DLB HERE RTRT: ; CLR CXRFLG ; JB CXR_CNT,DLBX ;FORCE CXR? DLBX: SETB CTS_BIT CLR CXR_BIT ;SET CXR_BIT,CTS_BIT ;DROP CXR&CTS IN LOCAL DLB MOV C,B212_FLG ;LOCAL DIG LOOP BK ANL C,SYN_FLG JNC DLB1 ;NOT IN SYN MODE MOV DPTR,#PORT_C MOVX A,@DPTR ;FORCE SLV CLK IN SYN_DLB ORL A,#00100000B MOVX @DPTR,A CLR IP.0 ;LOWER SCT PRIORITY DLB1: CLR DATBIT RTRT1: MOV DPTR,#PORT_B MOVX A,@DPTR SETB ACC.0 MOVX @DPTR,A ;SET RTRT BIT HERE G_MODEM:JMP MODEM ; ;THE ALB SW IS ONLY HONORED WHEN THE SYSTEM IS IN IDLE MODE ;WHICH MEANS WHEN I AM COMING IN HERE, I AM DONING DOTTING SELF-TEST ;THE CHIP HAS ALREADY BEEN SET TO DO ALB, LINE SQ, BUT ON HOOK ; ALB_CN: ALB: MOV IE,#11100000B CLR DISBIT CLR TR1 ;STOP TIMER 1 CALL INIT_F1 CALL I_PTR1 SETB ALB_FLG CLR DATBIT MOV DPTR,#PORT_B MOVX A,@DPTR SETB ACC.7 MOVX @DPTR,A ;SETB LIN_TXD ;MOV A,#04 ;CALL OUTSLV CALL SET_FRM ;SET 8,9,10,11 BITS MOV TMCON_LO,#LOW(-M_765MS) ;TURN CXR ON, 765MS LATER MOV TMCON_HI,#HIGH(-M_765MS);THEN TURN CTS ON MOV TMOUT_LO,#LOW(ALB6) MOV TMOUT_HI,#HIGH(ALB6) MOV DPTR,#PORT_B MOVX A,@DPTR MOV A,#11110110B JB HS_FLG,ALBY ;HI OR LO SPD MOV A,#11111010B ;103 SEL ALBY: MOVX @DPTR,A ;OFF_HK, ALB, ORIGINATE MODE MOV TH1,#(-164) MOV TL1,#(-164) MOV C,ST_FLG ANL C,ALB_FLG JC NO_CXR ;ST&ALB, NO CXR & CTS SETB CXRFLG ;TRUN CXR LCD ON SETB CXR_BIT NO_CXR: MOV IRT_CNT,#0FFH CLR BBB_FLG CLR DOT_ERR JB ST_FLG,ALB7 ;SELF TST, SEND&RCV DOT CLR SNDOT_FLG CLR RVDOT_FLG CLR DOT_ERR ALB7: JB HS_FLG,HI_ALB ;HI SPD ALB CLR B212_FLG ALBZ: CALL TM_TRAP ALB5: MOV C,HUNT_FLG ANL C,DLIN_RXD JC ALB5 SETB HUNT_FLG SETB DLIN_RXD JMP ALB5 ALB6: CALL UNTRAP CLR CLP_SYN MOV C,SYN_FLG ANL C,B212_FLG JC ALBSYN CALL I_PTR1 SETB IE.3 SETB TR1 ALBSYN: MOV C,ST_FLG ;ALB, SYN MODE ANL C,ALB_FLG JC NO_CTS ;ST&ALB, NO CXR&CTS CLR CTS_BIT ;CTS_BIT,ALB,DON'T TURN ON CXR CALL OFHKS NO_CTS: JMP MODEM HI_ALB: SETB B212_FLG SETB HUNT_FLG SETB DLIN_RXD SETB IE.0 SETB IE.2 SJMP ALBZ G_PWR2: JMP PWR2 ; ;::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: ;NOT TOO SURE ABOUT THESE OPTIONS, CHK WITH MIKE ;ALSO, I WON'T ALLOW SLAVE MODE CLK WHENEVER IN IRT,ALB_ST MODES ;:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: ; ST: JB DLB_FLG,ST3 ;BRANCH IF NOT IN DLB MODE SETB ST_FLG CLR CXRFLG ST1: SETB CTS_BIT CLR DATBIT JB ALB_FLG,ST_ALB ;GO TO ST&ALB MODE JNB IRT_FLG,ST2 ;ST_RDLB? ST2: CLR DISBIT CLR DOT_ERR ;ST ONLY, MODEM ALREADY IN ACTION SETB HUNT_FLG SETB DLIN_RXD SETB SNDOT_FLG ;SEND DOTTING FOR END TO END ST SETB RVDOT_FLG MOV CORE_CNT,#21 ;SET CNT FOR 103 MODE FLASHER ST3: JMP MODEM ST_ALB: ;MOV DPTR,#MSG27 ;"ALB ST" ;CALL LCD CLR DISBIT JMP ALB ; END_TST: ; JB ALB_FG2,ENDALB JB DATBIT,ETMOD ;BRANCH IF IN DATA MODE JB ST_FLG,ENDT1 ;BRANCH IF IN SELF TEST SETB DATBIT SETB DISBIT JNB ALB_FLG,CK_DLB ;NOT ST TEST ENDT2: CLR ALB_FLG SETB DATBIT JMP PWR2 ENDT1: CLR ST_FLG ;END SLF TST MODE SETB DLIN_RXD ;RESTORE NORMAL XSMISSION SETB HUNT_FLG CLR SNDOT_FLG CLR RVDOT_FLG CLR DOT_ERR ;ARREST THE FLASHER*** MOV CORE_CNT,DCOR_CNT MOV FRAM_CNT,DFRM_CNT SETB CXRFLG CLR CXR_BIT CLR CTS_BIT ;TURN ON CTS,CXR BIT JB ALB_FLG,ENDT2 JB IRT_FLG,CK_IRT SETB DATBIT SETB DISBIT ETMOD: JMP MODEM CK_DLB: JNB DLB_FLG,CK_IRT ;TERMINATE LOCAL DIG LOOP CLR DLB_FLG UNLOOP: SETB IP.0 ;RESTORE SCT PRIORITY MOV DPTR,#PORT_C MOVX A,@DPTR MOV C,SLAV_FLG MOV ACC.5,C ;RESTORE SLV MODE CLK IF ANY MOVX @DPTR,A SETB DATBIT CK_DLB1:MOV DPTR,#PORT_B MOVX A,@DPTR CLR ACC.0 MOVX @DPTR,A ;RESET RTRT CONTROL LINE HERE SETB CXRFLG CLR CXR_BIT CLR CTS_BIT ;TURN ON CXR AND CTS ;GET OUT OF LOOP FORMATION CK_IRT: JNB IRT_FLG,ETMOD CLR IRT_FLG CLR IE.3 ;STOP DTE SETB CLP_SYN SETB RCVD SETB CTS_BIT ;DROP CTS MOV DPTR,#PORT_B MOVX A,@DPTR ORL A,#00001100B ;SQ LINE MOVX @DPTR,A MOV TMCON_HI,#HIGH(-M_100MS) MOV TMCON_LO,#LOW(-M_100MS) MOV TMOUT_HI,#HIGH(ERDL2) MOV TMOUT_LO,#LOW(ERDL2) CALL TM_TRAP ; ERDL1: CALL AATTN SJMP ERDL1 ; ERDL2: CALL UNTRAP MOV DPTR,#PORT_B MOVX A,@DPTR ANL A,#11110011B ORL A,#00000100B MOVX @DPTR,A ;UNSQUELCH SETB SCRM_FLG CLR RVDOT_FLG CLR DOT_ERR CLR SDMK_FLG MOV TMCON_HI,#HIGH(-M_774MS) MOV TMCON_LO,#LOW(-M_774MS) MOV TMOUT_HI,#HIGH(ERDL4) MOV TMOUT_LO,#LOW(ERDL4) CALL TM_TRAP ; ERDL3: CALL AATTN SJMP ERDL3 ; ERDL4: CALL UNTRAP SETB DATBIT ;IN DATA MODE AGAIN SETB DISBIT ;DIS RS232 CLR CTS_BIT ;RESTORE CTS CALL I_PTR1 JB SYN_FLG,SYYN SETB IE.3 SYYN: MOV DPTR,#PORT_C MOVX A,@DPTR MOV C,SLAV_FLG MOV ACC.5,C MOVX @DPTR,A ;RESTORE SLAVE CLK IF ANY JMP MODEM ; SW_TAB: DW RDL ;REMOTE DIG LOOP SW DW MODEM3 ;IGNOR SPD DW MODEM3 ;IGNOR DIAL DW MODEM3 ;REDIAL DW MODEM3 ;IGNOR ALB HERE DW ST ;SELF TEST KEY DW MODEM3 ;OPTION DW MODEM3 ;ORIG KEY DW MODEM3 ;ANS DW DLB ;LOCAL DIGITAL LOOP BACK DW RSDISP ;DISPLAY DW MODEM3 ;ENTER DW PWR2 ;RESET KEY DW MODEM3 ;IGNOR PAUSE DW MODEM3 ;IGNOR NEXT DW END_TST ;END TEST ; SND_SP: CALL UNTRAP ;SEND SP DISCONNECT JNB LOST_CAR,ABAB ;DON'T DISCONNECT IF OPTIONED SDSP1: JB UNATTD,SDSPZ SDSPZZ: MOV DPTR,#PORT_C MOVX A,@DPTR JB ACC.1,SDSPZ CLR IE.3 ;CLAMP GARGAGE ON SCREEN SETB CLP_SYN SETB RCVD ;MAKE DTE MARKING JMP SDSPZZ SDSPZ: JNB SND_DIS,SDSP3 ;SEND SP DIS OPTION SETB SP_FLG ;SEND SP FOR 103 MODE JB B212_FLG,SDSP5 CLR IE.0 CLR IE.2 ;STOP SCR &SCT FOR LO SPEED SDSP5: MOV TMCON_HI,#HIGH(-M_3SEC) MOV TMCON_LO,#LOW(-M_3SEC) MOV TMOUT_HI,#HIGH(PPWR2) MOV TMOUT_LO,#LOW(PPWR2) CALL TM_TRAP SDSP2: CALL AATTN SJMP SDSP2 PPWR2: CALL UNTRAP SDSP3: JMP PWR2 ; ABAB: CLR CXRFLG SETB CTS_BIT SETB CXR_BIT ;TURN OFF CXR AND CTS ABABB: JNB B212_FLG,LOSS13 ;103 LOSS OF ENERGY LOOP JB ED_212,R_SCAN ;SCAN FOR REVIVAL VIA RESET LOSS14: MOV TMCON_LO,#LOW(-M_230MS) MOV TMCON_HI,#HIGH(-M_230MS) MOV TMOUT_LO,#LOW(LOS_RET) MOV TMOUT_HI,#HIGH(LOS_RET) CALL TM_TRAP ;MUST RECOVER ENERGY FOR 280MS LOSS15: JB B212_FLG,LOSS16 JNB ED_103,LOSS15 JMP SND_SP ;LOST IT AGAIN LOSS16: JNB ED_212,LOSS16 JMP SND_SP LOS_RET:CALL UNTRAP SETB LOSS_RET CALL I_PTR1 CALL INIT_F1 MOV FLAGS,#0 JB B212_FLG,LOSS17 JMP RET_103 LOSS17: JMP RET_212 ;REVIVE LOSS13: JNB ED_103,LOSS14 R_SCAN: JB DTR,SDSP3 JMP ABABB ; ; RSDISP: JNB DISBIT,RSDIS1 ;BRANCH IF DISPLAY NOT ON JNB DLB_FLG,RSDIS2 ;BRANCH IF NOT IN DLB ;MOV DPTR,#MSG25 SJMP RSDIS9 RSDIS2: JNB ALB_FLG,RSDIS3 ;BRANCH IF NOT IN ALB JNB ST_FLG,RSDIS6 ;BRANCH IF NOT ALB-ST ;MOV DPTR,#MSG27 ;"ALB ST" SJMP RSDIS9 RSDIS6: ;MOV DPTR,#MSG23 ;"ALB" SJMP RSDIS9 RSDIS3: JNB ST_FLG,RSDIS4 ;NO TEST MODE - MUST BE DATA ;MOV DPTR,#MSG24 SJMP RSDIS9 RSDIS4: ;MOV DPTR,#MSG8 RSDIS9: ;CALL LCD CLR DISBIT JMP MODEM RSDIS1: SETB DISBIT ;ENABLE EIA DISPLAY JMP MODEM $EJECT