ASMB,R,B,L,C NAM DVR73,0,0 ENT I.73,C.73 ENT P73D1,P73D2 ENT P73C1,P73C2,P73C3,P73C4 EXT $TIME,$PCOM SPC 1 HED I.73 - ASYNC MUX PHYSICAL DVR INITIATOR. * * I.73 IS THE DRIVER INITIATOR MODULE OF THE 12920A * ASYNC MUX DRIVER * * A EQU 0 B EQU 1 SPC 2 I.73 EQU * DRIVER INITIATOR'S ENTRY POINT. NOP CLF 0 STA SAVSC SAVE SELECT CODE. LDA EQT3,I STRIP OUT AND UNIM1 4 BIT UNIT ALF # STA UNIT LDA EQT4,I AND LHALF I/O STATUS = GOOD INITIALLY. STA EQT4,I LDB EQT1 YES. SET UP EQT EXTENTION PNTRS. JSB SETP JSB CONFG CONFIGURE P73,S I/O INSTRUCTIONS. LDA EQT9,I GET AND B77 REQUEST CODE. STA B ADB EQT21 LDB B,I STB LOGR = LOGICAL DRIVER'S ENTRY ADDR. LDB EQT17,I HAS THIS SZB,RSS DEVICE BEEN INITIALIZED? JMP ICONX NO. CHK FOR INVALID REQ. JSB SEQAD ENTER EQT ADDR IN INTERNAL EQT TBL. LDA EQT9,I AND B77 GET REQ. CODE. CPA B3 YES. CONTROL REQ? JMP ICONP YES. LDA EQT1 STA 300B LOC. 300B=CURRENT EQT ADDR CLA LINE STATUS = GOOD. CCB INITIATE I/O REQ. JSB LOGR,I CALL LOGICAL DRIVER JMP INIT2 I73CP EQU * CONTINUATION RETURN. STA DADIR JSB SRTIM INITIATE TIMING REQ. LDA DADIR RAL,SLA START READ DIRECTIVE ? JMP SREAD YES. RAL,SLA START WRITE DIRECTIVE ? JMP SWRIT YES. REFEN EQU * NO. ASSUME NOP DIRECTIVE. CLA I/O REQ. STARTED. STF 0 TURN ON INT. SYSTEM. JMP I.73,I RETURN. SPC 2 * * INITIATE A CONTROL REQUEST * SPC 1 ICONP EQU * LDA EQT9,I AND FCODM FCODM=FUNCTION CODE MASK=17700B SZA,RSS CLEAR REQUEST ? JMP CLEAR YES. ALF,ALF NO. RAL,RAL CPA D1 INITIALIZE REQ? JMP INREQ YES. LDB EQT17,I NO. DEVICE PREVIOUSLY SZB INITIALIZED ? JMP CLR YES. ICONV LDA EQT4,I NO. AND LHALF KEEP LH. CLEAR STATUS IOR D1 STA EQT4,I SET STATUS = INVALID JMP INIT2 RETURN. SPC 2 * * HANG-UP MODEM AND SEVER LOGICAL DRIVER LINK! * SPC 1 CLEAR EQU * LDA SCDBS JSB COUT LOWER CD (DATA SET READY). LDB EQT19,I SSB,RSS FULL/DUPLEX DEVICE ? JSB COUT2 NO. INHIBIT INTERRUPTS ON 2ND CARD. CLB STB EQT17,I SEVER LOGICAL DRIVER LINK. JMP INIT2 COMPLETE THIS REQUEST IMMEDIATELY. SPC 2 ICONX EQU * LDA EQT9,I AND B3 CPA B3 CONTROL REQ ? RSS YES. JMP ICONV NO. INVALID. LDA EQT9,I AND FCODM CPA B100 INITIALIZE CONTROL REQ ? JMP INREQ YES. SZA CLEAR REQ? JMP ICONV NO. INVALID. JSB CLALL YES. CALL CLEAR PROCESSOR. JMP INIT2 EXIT. SPC 2 SPC 1 SPC 1 * INITIALIZE REQUEST - MUST BUILD TABLE UNEQT. UNEQT WILL BE USED * TO FIND THE CORRECT EQT WHEN P.73 FIELDS AN INTERRUPT. SPC 1 INREQ EQU * JSB SEQAD ENTER EQT ADDR IN INTERNAL LDA EQT11,I EQT TABLE - UNEQT. STA EQT17,I SET POINTER TO EQT EXTENTION. JSB SETP LDA EQT9,I CALCULATE LOGICAL AND B3 DRIVER'S ENTRY ADDRESS. ADA EQT21 LDA A,I STA LOGR JMP CLR CONTINUE PROCESSING SPC 2 * SPC 1 BADLN EQU * LDA BIT14 LINE ERROR. JMP I73CP-2 TELL LOGICAL DVR. SPC 1 SPC 1 CLR EQU * LDA EQT3,I MASK 4 BIT AND UNIM1 UNIT # ALF STA UNIT LDB EQT1 STB 300B =CURRENT EQT ADDR. CCB INITIALIZE CALL JSB LOGR,I CALL LOGICAL DVR JMP INIT2 COMPLETION RETURN. NOP CONTROL CONTINUATION RETURN. STA DADIR SAVE LOGR DIRECTIVE JSB SRTIM LDA DADIR CHECK LOGICAL DVR. DIRECTIVES. RAL,SLA START READ DIREC? JMP SREAD YES. SSA NO. START WRITE DIRECTIVE? JMP SWRIT YES. LDA PQT9,I AND FCODM ALF,ALF RAL,RAL RT. JUSTIFY FUNC. CODE. STA B SAVE IN B-REG. CPB D1 INITIALIZE REQ? JMP INIT YES. CPB D2 LINE OPEN REQ? JMP LOPEN YES. CPB D3 LINE CLOSE REQ? JMP LCLOS YES. CPB D4 SET ECHO REQ? JMP SECHO YES. CPB D5 SET TERMINAL SPEED? JMP SPEED YES. JMP ICONV INVALID REQ. SPC 1 * PROCESS INITIALIZE REQ. AFTER RETURNING FROM LOGR SPC 1 INIT EQU * JSB CF920 CONFIGURE CONTROL WORDS FOR THE * 12920A BOARD & STORE IN EQT34&35 LDA EQT3,I ALF,RAL LDB INAUX SSA IS THIS DEVICE ON MUX # 2 INB YES. INCREMENT POINTER. ISZ B,I HAS AUX. CHANS BEEN INITIALIZED ? JMP INIT2 YES. COMPLETE THIS REQ? LDB AUXSP AUX CHNL SPEED POINTER. STB AUXSA LDA =B040000 STA UNIT = UNT # 16 (1ST AUX CHNL) LDA M5 STA SAVEC - # OF AUX CHNLS. UNIT1 EQU * LDA AUXSA,I JSB OUT CONFIGURE CHNL. LDB =B002000 ADB UNIT UNIT# = UNIT# + 1 STB UNIT ISZ AUXSA BUMP AUX CHNLS SPEED PARM ADDR. ISZ SAVEC DONE ? JMP UNIT1 NO INIT2 EQU * JSB CEQAD CLEAR EQT ADDR IN INTERNAL EQT TBL. LDA D4 IMMEDIATE COMPLETION JMP REFEN+1 RESTORE FENSE & ALLOW INTERRUPTS. SPC 1 * PROCESS LINE CLOSE REQ. AFTER RETURNING FROM LOGR * PROCESS CLEAR REQ. WITHOUT CALLING LOGICAL DVR. SPC 1 LCLOS EQU * LDA SCDBS DISCONNECT. JSB COUT LDA EQT34,I AND CMB13 COMPLEMENT MASK FOR ENABLE BIT. STA EQT34,I JSB OUT DISABLE INTERRUPTS FROM THIS CHL LDA EQT35,I AND CMB13 STA EQT35,I JSB OUT DISABLE INTERRUPTS LDA EQT36,I AND =B17700 STA EQT36,I LINE STATUS = 0; DOWN. LDB M5SEC DELAY 5 SECONDS FOR MODEM HANGUP, JSB PTIMR THEN COMPLETE LINE CLOSE REQ. JMP REFEN SPC 1 * PROCESS SET ECHO REQ. AFTER RETURNING FROM LOGR SPC 1 SECHO EQU * LDB EQT10,I LDA EQT34,I SZB DISABLE ECHO ? JMP *+3 NO. ENABLE ECHO AND CMB12 YES. ECHO BIT COMPLEMENT MASK. RSS SKIP. IOR BIT12 SET ECHO BIT. STA EQT34,I UPDATE RECEIVE PARAMETERS. JMP INIT2 INTERRUPTS & RETURN. SPC 1 * PROCESS TERMINAL SPEED AFTER RETURNING FROM LOGR SPC 1 SPEED EQU * LDA EQT10,I GET CODED SPEED STA EQT21,I STORE CODED I/O SPEED(INPUT/OUT) AND RHALF ADA SPTBP INDEX INTO SPEED TBL LDA A,I GET MUX SPEED. AND RHALF STA B LDA EQT35,I UPDATE AND LHALF SEND SPEED. IOR B PARAMETER. STA EQT35,I LDA EQT21,I AND LHALF ALF,ALF ADA SPTBP LDA A,I AND RHALF STA B LDA EQT34,I UPDATE AND LHALF RECEIVE SPEED. IOR B PARAMETER. STA EQT34,I JSB OUT OUTPUT TO MUX CHANNEL. LDA EQT35,I JSB OUT OUTPUT REC. SPEED TO MUX CHANNEL JMP INIT2 SYSTEM INTERRUPTS & RETURN. SPC 1 * PROCESS LINE OPEN REQ. AFTER RETURNING FROM LOGR SPC 1 LOPEN EQU * LDA EQT34,I OUTPUT CONTROL WDS TO MUX. IOR BIT13 SET ENABLE BIT. STA EQT34,I JSB OUT LDA EQT35,I IOR BIT13 SET ENABLE BIT. STA EQT35,I JSB OUT LDB EQT10,I GET LINE OPEN OPTION PARAMETER CPB D1 RECEIVE OPTION? JMP RECOP YES. CPB D2 NO. SEND OPTION? JMP SENOP YES. CPB D3 IDLE OPTION? JMP IDLOP YES. SSB NO. AUTO-SPEED ? JMP AUTOP YES. JMP ICONV NO. INVALID REQUEST. SPC 1 * RECEIVE AND IDLE OPTIONS. SPC 1 IDLOP EQU * SPC 1 RECOP EQU * LDA EQT36,I SET TRANSITION STATE AND CMB45 FLAG = 1 - RECEIVE. IOR BIT4 CMB45=COMPLEMENT MASK BITS 4 & 5 STA EQT36,I LDA EQT19,I SSA 103 MODEM/HW. JMP RECO1 YES. LDA SCDAB NO. 202 MODEM/HALF DUPLEX. JSB COUT A= CD UP & CA DOWN (11011110) LDA =B140012 INTERRUPT IF CB DROPS. JSB COUT2 JMP *+3 RECO1 EQU * ECHO PLEX LDA SCDCA A= CD & CA UP (ECHOPLEX) JSB COUT OUTPUT TO CONTROL BOARD LDB EQT10,I SSB AUTO-SPEED SELECTED TOO? RSS YES. SKIP. RECOX EQU * NO. RETURN TO DOS. JMP REFEN SPC 1 LDA EQT36,I SET AUTO- IOR BIT15 SPEED FLAG STA EQT36,I JMP REFEN CONTROL REQ. INITIATED. SPC 1 * SEND OPTION SPC 1 SENOP EQU * LDA EQT36,I SET TRANSITION STATE AND CMB45 FLAG = SEND (2) IOR BIT5 STA EQT36,I LDA SCDCA RAISE CD & CA JSB COUT OUTPUT LDB EQT19,I SSB ECHO PLEX/HARDWIRED ? (103 MODEM) JMP SENO1 YES. LDA SSAB NO. 202 MODEM JSB COUT2 OUTPUT SA DOWN TO MUX BOARD # 4 SENO1 EQU * JMP REFEN SPC 1 * AUTO-SPEED OPTION SPC 1 AUTOP EQU * LDB =B5413 STB EQT21,I LDA EQT34,I SET AND =B170000 IOR S2400 LINE SPEED = 2400 BAUD IOR BIT11 AND DIAGNOSE BIT STA EQT34,I JSB OUT OUTPUT CHANNEL DATA TO MUX. LDA EQT36,I AND B17 LINE STATUS CPA D1 = RECEIVE ?? RSS YES. SKIP. JMP RECOP NO. CALL LINE OPEN RECEIVE SUBR. LDA EQT36,I SET IOR BIT15 AUTO-SPEED FLAG STA EQT36,I JMP REFEN SPC 2 * LOGR ISSUED A "START WRITE" DIRECTIVE WHEN CALLED FROM I.73 TO * INITIATE A WRITE I/O REQ. SPC 1 SWRIT EQU * LDA EQT36,I AND B17 SZA,RSS LINE STATUS = DOWN ? JMP BADLN YES. REPORT LINE ERROR TO LOGICAL. JSB SW202 NO. LINE IN SEND STATE ? RSS YES. SKIP NEXT INSTRUCTION. JMP REFEN NO. LINE BEING TURNED TO SEND SW103 LDA DADIR GOOD LINE STATUS: AND B177 JSB CHAR OUTPUT CHAR JMP REFEN SPC 1 * START WRITE ON A HALF DUPLEX LINE (202 MODEM). * RETURN: P+1 = LINE IN SEND DIRECTION (READY). * P+2 = LINE NOT IN SEND DIRECTION. SPC 1 SW202 EQU * NOP LDB EQT19,I SSB,RSS FULL DUPLEX LINE? JMP SW20A NO. HALF DUPLEX. LDA EQT34,I YES. JSB OUT ENABLE INTERRUPTS ON READ CHNL. LDA EQT36,I AND =B177700 SET LINE IOR B2 STATE = SEND. STA EQT36,I JMP SW202,I RETURN. SW20A EQU * LDA EQT36,I AND B17 CPA B2 LINE ALREADY IN SEND STATE? JMP SW202,I YES. RETURN. SPC 1 * TURN OFF READ CHANNEL INTERRUPTS DURING WRITES !!!!! SPC 1 LDA EQT34,I AND =B147777 CLEAR BITS 12 & 13. ECHO & INTER. JSB OUT OUTPUT NEW PARMS. TO MUX . SPC 1 LDA SCDAS NO. TURN LINE AROUND. JSB COUT RAISE CD & CA LDA SSAB AND LOWER SA JSB COUT2 LDA DADIR AND RHALF STORE STA B OUTPUT LDA PQT6,I DATA AND LHALF IN IOR B EQT37,I, STA PQT6,I RT HALF. LDA EQT36,I SET AND =B117717 START WRITE FLAG IOR BIT13 AND TRANSITION IOR BIT5 STATE FLAG STA EQT36,I = SEND (2). LDB ML300 DELAY JSB PTIMR 300 MS LDB M7 WAIT AN ADDITIONAL 700 MS STB PQT15,I FOR LINE TO TURN TO SEND STATE. ISZ SW202 JMP SW202,I SPC 1 SRWEX EQU * OPERATION INITIATED. JMP REFEN RETURN TO DOS. SPC 1 * READ SPC 1 SREAD EQU * LDA EQT36,I AND B17 SZA,RSS LINE DOWN ? JMP BADLN YES. REPORT BAD LINE TO LOGICAL DVR. JSB SR202 NO. TURN LINE TO RECEIVE STATE. NOP JMP REFEN RETURN TO DOS. SPC 1 * THIS SUBROUTINE TURNS HALF DUPLEX LINES TO THE RECEIVE DIRECTION * * RETURN: * P+1 = LINE ALREADY IN RECEIVE DIRECTION. * P+2 = LINE IN PROCESS OF BEING TURNED TO RECEIVE DIRECTION. SPC 1 SR202 EQU * NOP LDA EQT34,I JSB OUT ENABLE ECHO & INTERRUPTS. LDA EQT36,I LINE ALREADY AND B17 IN READ CPA D1 STATE? JMP SR202,I YES. RETURN TO DO TIMING REQ. LDB EQT19,I SSB,RSS FULL DUPLEX? JMP SR20A NO. HALF DUPLEX. LDA EQT36,I YES. AND =B177700 CHANGE LINE STATE TO READ. IOR B1 STA EQT36,I JMP SR202,I RETURN. SR20A EQU * SPC 1 * TURN ON READ CHANNEL INTERRUPTS DURING READS !!!!! SPC 1 LDA SCDAF NO. TURN LINE AROUND JSB COUT RAISE CD AND LOWER CA WITHOUT LDA EQT36,I SET ITEM SR (START READ DIREC- AND =B117717 TIVE IISUED BY LOGICAL DVR. IOR BIT14 SET TRANSITION IOR BIT4 LINE STATE = RECEIVE STA EQT36,I LDB ML300 DELAY JSB PTIMR 300 MS. LDB M7 STB PQT15,I 7 RETRIES. ISZ SR202 JMP SR202,I RETURN SPC 2 * CLALL INITIALIZES THE MUX CONTAINING THIS DEVICE TO DUMMY INPUT * AND OUTPUT PARAMETERS IF THIS IS THE 1ST CLEAR REQUEST ISSUED * TO A DEVICE ON THIS MUX. SPC 1 CLALL EQU * NOP LDA EQT3,I ALF,RAL MOVE MSB TO BIT # 15. LDB INCLP SSA BUMP INDEX FOR 1ST MUX? INB NO. 2 ND MUX. ISZ B,I INHIBIT INTERRUPTS ON ALL CHNLS? JMP INIT2 YES CLA STA UNIT START WITH UNIT # 0 LDB DM16 THRU UNIT # 15. STB SAVEC CLRMX EQU * LDA IPDMY INHIBIT INTERRUPTS FROM INPUT CHS. JSB OUT LDA OPDMY INHIBIT INTERRUPTS FROM OUTPUT CH. JSB OUT LDA UNIT BUMP CHANNEL ADA =B002000 NUMBER. STA UNIT ISZ SAVEC DONE?? JMP CLRMX NO. REPEAT. JMP CLALL,I YES . EXIT. HED ASYNC MUX TIMOUT INITIATE/RESET/DEQUEUE SUBROUTINES. * INITIATE/RESET/DEQUEUE LOGICAL TIMER :::***... SPC 1 SRTIM EQU * NOP STB SAVEC SAVE B-REG. AND =B140000 READ OR WRITE SZA,RSS DIRECTIVE ISSEUD? JMP SRT1 NO. SKIP. LDA EQT36,I YES. SSA AUTO-SPEED IN PROGRESS? JSB CFSPD YES. CONFIGURE PORT'S SPEED ETC. SRT1 LDB SAVEC RESTORE B-REG. SZB,RSS JMP SRTIM,I NO TIMING REQUESTED. RETURN. SSB INITIATE/RESET TIMING ? JMP IRTIM YES. CLA NO. DEQUEUE TIMING REQ. LDB EQT30 ADDR OF LOGICAL TIMING BFR. JSB $TIME DEQUEUE CLA STA TIMV,I JMP SRTIM,I AND RETURN. IRTIM EQU * LDA TIMV,I SZA CMB,INB STB TIMV,I LDA PQT1 STA EQT30,I LDB TIMAD STB EQT31,I LDB EQT30 LDA TIMV,I JSB $TIME JMP SRTIM,I RETURN. SPC 2 * INITIATE/RESET/DEQUEUE PHYSICAL TIMER. SPC 1 PTIMR EQU * NOP SZB,RSS JMP PTIMR,I EXIT IF B-REG = 0. SSB INIT OR RESET TIMEOUT? JMP PIRTM YES. CLA NO. DEQUEUE TIMEOUT. LDB EQT26 ADDR OF TIMEOUT BLOCK. JSB $TIME CALL TIMER. CLA STA PTIMV,I JMP PTIMR,I PIRTM EQU * LDA PTIMV,I SZA INITIATE TIMEOUT ? CMB,INB NO. RESET TIMEOUT VALUE. STB PTIMV,I LDA PQT1 CMA,INA = - EQT ADDR FOR PHYSICAL TIMEOUTS. STA EQT26,I LDB TIMAD TIMEOUT SUBR ADDR. STB EQT27,I LDB EQT26 LDA PTIMV,I JSB $TIME JMP PTIMR,I HED ASYNC MUX DATA INTERRUPT PROCESSOR. * THIS ROUTINE IS ENTERED WHEN A DATA BOARD INTERRUPTS. * * P73D1 PROCESSES DATA INTERRUPTS FROM MUX # 1. * SPC 2 P73D1 EQU * NOP CLF 0 JSB SAVAL SAVE A,B,E, AND O. LDB P73D1 JSB SRSCU SAVE RETURN ADDR, SC, ETC. ADA DM16 ADD -16 BASE 10 SSA UNIT # < 16 ? JMP P73DA-1 YES. LDB LASM1 SZB,RSS IF LASM1 = 0, RETURN. JSB RETRN JSB SETP SET POINTERS. LDB EQT36,I SSB,RSS AUTO-SPEED ACTIVE FOR THIS DEVICE? JSB RETRN NO. LDB LASM1 YES. USE LAST MAIN CHNL FOR AUTO- JMP P73DA+2 SPEED TO INTERRUPT FOR AUX CHNLS ADA D16 ADD +16 P73DA EQU * ADA UNEQP TO FIND THE LDB A,I PROPER EQT. SZB,RSS UNEQT ENTRY = 0 ? JMP P73DX YES. JSB SETP LDB PQT1 LDA EQT36,I SSA AUTO-SPEED REQ. FOR THIS MAIN? STB LASM1 NO. UPDATE LAST MAIN . JMP P.73D PROCESS INT. * INHIBIT * CHANNELS P73DX EQU * JSB RETRN EXIT TO INTERRUPTED PROGRAM. SPC 1 * * P73D2 PROCESSES DATA INTERRUPTS FROM MUX # 2. * SPC 1 P73D2 EQU * NOP CLF 0 JSB SAVAL SAVE A,B,E, AND O. LDB P73D2