ASMB,R,L,C,B HED ***DVR72 --12587 ASYNC MODEM INTERFACE-- *** NAM DVR72,0,0 ****** 6 MAY 75 ENT I.72,C.72 -1 ENT P.720,P.721,P.722,P.723 OD ENT P.724,P.725,P.726,P.727 OD EXT $PCOM,$TIME P. ************************************************************************ * 12587 I/F BIT ASSIGNMENTS ** ************************************************************************ * ** * CONTROL WORD * BIT MEANING * 15 1=CONTROL WORD,0=DATA * 14 DATA TERMINAL READY (CD) ** * 13 REQUEST TO SEND (CA) CD * 12 MASK ENABLE * 11,10 NOT USED LE * 9 ECHO SE * 8 PARITY D * 7 ODD PARITY E * 6,5,4 NOT USED Y * 3-0 CHARACTER SIZE ( ************************************************************************ * DATA WORD ** * BIT MEANING * 15-11 ZEROES * * 10 SECONDARY SEND (SBA) ** * 9,8 NOT USED S * 7-0 DATA SE ************************************************************************ * STATUS WORD ** * BIT MEANING * 15 BUFFER READY ** * 14 SECONDARY RECEIVE (SBB) * 13 I/F BUSY R * 12 DATA SET READY (CC) * 11 CARRIER DETECT (CF) * 10 RINGING (CE) T * 9 ERROR * 8 NOT USED CE * 7-0 DATA SE ************************************************************************ A EQU 0 ** B EQU 1 ** SC EQU 0 ** ********************************************************************** C.72 EQU * ** NOP * CLA INDICATE SUCCESSFUL COMPLETION ** LDB $EQ14,I GET TRANSMISSION LOG OM JMP C.72,I ********************************************************************** ********************************************************************** P.720 EQU * ** NOP * CLF 0 DISABLE INTERRUPTS ** JSB SAVE SAVE ENVIRONMENT S LDA UEQT JSB SETQ SET EQT LDA USC PCOMM JSB SETIO SET I/O INST. JSB STAT INPUT STATUS N LDB LSIT JMP LSWCH SWITCH ON LINE STATE ** * * * P.721 EQU * WC NOP * CLF 0 WC JSB SAVE LDA UEQT+1 JSB SETQ LDA USC+1 JMP PCOMM * * P.722 EQU * OM NOP * CLF 0 OM JSB SAVE LDA UEQT+2 JSB SETQ LDA USC+2 JMP PCOMM * * P.723 EQU * OM NOP * CLF 0 OM JSB SAVE LDA UEQT+3 JSB SETQ LDA USC+3 JMP PCOMM * * * * P.724 EQU * OM NOP * CLF 0 OM JSB SAVE LDA UEQT+4 JSB SETQ LDA USC+4 JMP PCOMM * * P.725 EQU * OM NOP * CLF 0 OM JSB SAVE LDA UEQT+5 JSB SETQ LDA USC+5 JMP PCOMM * * P.726 EQU * OM NOP * CLF 0 OM JSB SAVE LDA UEQT+6 JSB SETQ LDA USC+6 JMP PCOMM * * P.727 EQU * OM NOP * CLF 0 OM JSB SAVE LDA UEQT+7 JSB SETQ LDA USC+7 JMP PCOMM ********************************************************************** * ** ********************************************************************** ********************************************************************** I.72 EQU * ** NOP * CLF 0 DISABLE INTERRUPT SYSTEM ** CLB 0 STB RTX SET RETURN INDEX FOR I.72 STB SAVA ZERO RETURN CODE FO LDB I.72 SAVE RETURN ADDRESS STB EXIT STA SCODE SAVE SELECT CODE SS LDB $EQ17,I S LDA $EQ9,I GET REQUEST AND =B7777 SAVE FUNCTION AND REQUEST CPA INCD INITIALIZE REQUEST EQ JMP I.72B YES SZB,RSS IF LOGICAL LINKAGE PRESENT --PROCEED ** CPA P03$ CLEAR REQUEST JMP I.72A YES LDA P01$ NO-INVALID ST STA SAVA JSB RTRN RETURN TO DOS I.72B EQU * RN LDB $EQ11,I GET EXTENSION ADDRESS STB $EQ17,I LINK WITH LOGICAL INB $E LDA B,I GET EQT19 STA $EQ6,I SAVE IN CONTROL WORD S CLA $E STA EQT3 INSURE EQT RESET OR STA $EQ5,I CLEAR LINE STATE OR STA $EQ16,I C LDA $EQ1 GET BASE EQT ADDRESS S ADB P07$ COMPUTE EQT26 STA B,I SAVE AS TIMER ID (DVR72) T ADB P04$ COMPUTE EQT30 STA B,I SAVE AS TIMER ID (LOGICAL) -- * BUILD BASIC CONTROL WORD * LDA $EQ6,I GET PARAMETER WORD OG STA B Q6 CMB,INB FORM COMPLIMENT AND M160$ ISOLATE ECHO AND PARITY SZA,RSS BOTH CLEAR O JMP I.72C YES CPA P64$ NO-TEST FOR ECHO SET,PARITY CLEAR JMP I.72C YES IOR M40$ NO,ENABLE PARITY SE ADB N01$ ADJUST CHAR. SIZE I.72C EQU * 1$ ALF,ARS POSITION FOR 12587 T, STA $EQ6,I LDA B Q6 AND M17$ ISOLATE CHARACTER SIZE RI IOR $EQ6,I MERGE W/ECHO+PARITY IOR B15$ INDICATE CONTROL WORD STA $EQ6,I I.72A EQU * Q6 LDA $EQ1 STA EQT3 RESET EQT ADDR 7905 JSB SETQ SET EQT * LDA EQT4,I SET AND LBYT$ STATUS TO STA EQT4,I ZERO S JSB SETU SET UNIT RELATED CONSTANTS C LDA SCODE JSB SETIO SET I/O INSTRUCTIONS TA LDA EQT9,I AND =B7777 ISOLATE FUNCTION AND REQUEST 11JAN74 ** CPA P03$ CLEAR REQUEST JMP C0 YES AND M17$ CPA P01$ READ REQUEST O JMP READ YES CPA P02$ WRITE REQUEST JMP WRITE YES CPA P03$ CONTROL REQUEST JMP CONTL YES ISZ SAVA INDICATE ERROR JSB RTRN BACK TO DOS ********************************************************************** * ** * READ REQUEST INITIATION ** * ********************************************************************** READ EQU * ** JSB LCHK CHECK FOR LINE OPEN, DATA SET RDY CCB INDICATE INITIATION CALL S JSB EQT22,I CALL LOGICAL READ JMP READ1 COMPLETE CA READC JSB DRCTV EVALUATE DIRECTIVE BITS JSB RTRN RETURN TO DOS * READ1 EQU * RN LDA P04$ INDICATE IMMEDIATE COMPLETION STA SAVA JSB RTRN RETURN TO DOS ********************************************************************** * ** * WRITE REQUEST INITIATION * ********************************************************************** WRITE EQU * ** JSB LCHK CHECK FOR LINE OPEN,DATA SET RDY ** CCB INDICATE INITIATION CALL SE JSB EQT23,I CALL LOGICAL WRITE C JMP READ1 COMPLETE CA WRITC JSB DRCTV EVALUATE DIRECTIVE BITS AND RBYT$ JSB OTA OUTPUT CHARACTER E JSB STC SET CONTROL ON BOARD TS JSB RTRN ********************************************************************** * ** * CONTROL REQUEST INITATION ** * ********************************************************************** CONTL EQU * ** CLA * CCB INDICATE INITIATION CALL ** JSB EQT24,I CALL LOGICAL CONTROL AL JMP READ1 COMPLETE CA JSB DRCTV EVALUATE DIRECTIVE BITS LDA EQT9,I ALF,ALF ,I RAL,RAL ,I AND M77$ ISOLATE FUNCTION CODE ADA N05$ SSA,RSS FUNCTION LT 5 JMP CNTL1 NO-INVALID 5 ADA CNTLT YES-CALCULATE TABLE ADDRESS LDA A,I T JMP A,I PROCESS BY FUNCTION CODE SS * * CNTL1 EQU * I ISZ EQT4,I INDICATE INVALID REQUEST SS JMP READ1 * * * CONTROL TRANSFER TABLE * DEF C0 CLEAR DEF READ1 INITIALIZE(NO ADDITIONAL PROCESSING) ** DEF C2 LINE OPEN DEF C3 LINE CLOSE NO DEF C4 SET ECHO E CNTLT DEF * * TL * CLEAR REQUEST ET * C0 EQU * RE LDA $EQ17,I T SZA SKIP DEQUEUE IF NOT LINKED OC JSB DQT DEQUE TIMERS IF LDA B15$ JSB OTA CLEAR CONTROL WORD L JSB CLC CLEAR I/F CONTROL CLA CL STA $EQ17,I BREAK LINKAGE JMP READ1 I * * LINE OPEN REQUEST L * C2 EQU * PE LDA EQT10,I GET AND P03$ OPTION IN SZA,RSS RING N JMP C2A YES CPA P01$ RECEIVE JMP C2B YES CPA P02$ SEND VE JMP C2C YES * NO-IDLE KA JSB RCV CONFIGURE FOR RECEIVE C2E EQU * V LDA AOPEN STA EQT5,I LINE STATE= AWAITING OPEN LDA N10$ STA EQT34,I SET FOR 2 SEC. DELAY OP C2D EQU * T3 LDB TD1A LDA N02$ JSB DTIM START TIMER #1, 200 NS EN JSB RTRN * * C2A EQU * RN LDA ARING STA EQT5,I LINE STATE= AWAITING RING LDA B15$ C2A2 EQU * 5$ JSB OTA DROP DATA TERMINAL READY JSB STC ENABLE I/F BOARD L JSB RTRN * * C2B EQU * RN JSB RCV CONFIGURE FOR RECEIVE LDA AOPEN STA EQT5,I LINE STATE= AWAITING OPEN LDA EQT10,I L SSA,RSS AUTO SPEED A JMP C2E NO O JSB STIN START INPUT JSB RTRN * * C2C EQU * RN JSB SND CONFIGURE FOR SEND G JMP C2E START TIMER * * * LINE CLOSE REQUEST * C3 EQU * LO LDA CLOSE R STA EQT5,I LINE STATE= CLOSED G LDA B15$ JSB OTA CLEAR I/F JSB CLC TURN OFF INTERRUPTS LDA =D-50 SET MAX TIME AT 10 SEC. STA EQT34,I S JMP C2D START TIMER * * * SET ECHO REQUEST * C4 EQU * HO LDB EQT10,I GET PARAMETER LDA EQT6,I AND ECHO CLEAR ECHO BIT 1 SZB REQUEST FOR ENABLE SE IOR B09$ YES-SET IT E STA EQT6,I JMP READ1 IMMEDIATE COMPLETION C. * * ********************************************************************** * ** * SET UNIT RELATED DATA ** * ********************************************************************** SETU EQU * ** NOP * LDA $EQ3,I GET UNIT & SELECT CODE ** ALF,ALF ,I RAL,RAL POSITION UNIT FIELD AND P07$ ADA UTBL CALCULATE TABLE ENTRY LDB $EQ1 STB A,I SAVE EQT T ADA P08$ OFFSET TO NEXT TABLE LDB SCODE STB A,I SAVE SELECT CODE BL JMP SETU,I * UTBL DEF *+1 ,I UEQT BSS 8 HOLDS EQT FOR UNIT 0-7 ** USC BSS 8 HOLDS SC FOR UNIT 0-7 * C * C ********************************************************************** * ** * SET EQT TABLE ** * * A=ADDRESS OF EQT * ********************************************************************** SETQ EQU * ** NOP * STA EQTB SAVE EQT ON BASE PAGE ADA P02$ CPA EQT3 ALREADY SET JMP SETQ,I YES STA EQT3 INA EQ STA EQT4 FILL DY INA TABLE STA EQT5 INA EQ STA EQT6 ADA P03$ STA EQT9 INA EQ STA EQT10 ADA P04$ STA EQT14 ADA P02$ STA EQT16 INA EQ SETQ2 EQU * T1 LDA A,I LINK TO EXTENSION INA A, STA EQT19 ADA P03$ LDB A,I STB EQT22 INA EQ LDB A,I 2 STB EQT23 INA EQ LDB A,I 3 STB EQT24 INA EQ STA EQT25 ADA P02$ STA EQT27 ADA P04$ STA EQT31 ADA P03$ STA EQT34 INA EQ STA EQT35 JMP SETQ,I RETURN E ********************************************************************** * ** * DRIVER TIMER START * ********************************************************************** DTIM EQU * B=PROCESSOR ADDRESS NOP A=TIME INTERVAL STA EQT27,I SAVE VALUE RV LDA EQT16,I GET TIMER FLAGS ERA,RAL PHYSICAL TIMER BIT TO E IOR P01$ SET IT L STA EQT16,I S LDA EQT27,I GET VALUE SEZ INITIATE REQUEST T CMA,INA NO-INDICATE RESET STB EQT27,I SAVE PROCESSOR ADDRESS * LDB EQT27 I ADB N01$ PASS EQT26 AS TIMER BLOCK JSB $TIME JMP DTIM,I * TIMER #1 * TD1A DEF TD1 I TD1 EQU * 1 NOP * CLF 0 DISABLE INTERRUPT SYSTEM * CLB,INB JSB TIMOF SETUP FOR TIMER OFF LIST * JSB STAT INPUT STATUS ER LDB EQT5,I CPB PSND LINE STATE = PREPARE TO SEND? JMP TD1D YES ALF,SLA DATA SET READY EP JMP TD1B YES SZB,RSS NO-LINE = CLOSE? AR JMP TD1H YES-COMPLETE SE TD1I EQU * 1H LDA N02$ NO-KEEP TIMER RUNNING TD1F EQU * 2$ LDB TD1A JSB DTIM TD1C STF 0 ENABLE INTERRUPT SYSTEM JMP TD1,I * TD1B EQU * 1, SZB,RSS LINE=CLOSE? JMP TD1K YES-CONTINUE TIMER ST LDA EQT6,I 8JAN74 TI AND C$CA REQ. TO SEND SET? 8JAN74 ** SZA 8JAN74 S JMP *+3 YES 8JAN74 LDA C$SBA NO-SET SEC. SEND 8JAN74 JSB OTA 8JAN74 SE ISZ EQT34,I LINE STABILIZE DELAY OVER JMP TD1I NO E LDA IDLE STA EQT5,I LINE STATE = IDLE TD1H EQU * T5 JSB DQT DEQUEUE TIMERS LE JSB CLC CLR I/F BOARD LDA EQTB JSB $PCOM COMPLETE REQUEST A JMP TD1C TD1K EQU * 1C ISZ EQT34,I MAX TIME ELAPSED A JMP TD1I NO T JMP TD1H YES-COMPLETE SE * TD1D EQU * 1H LDB EQT34,I 8JAN74 PL SZB FIRST TIME 8JAN74 JMP TD1D1 NO 8JAN74 JSB SND YES-CONFIGURE FOR SEND 8JAN74 LDA EQT19,I 8JAN74 FI RAL 8JAN74 FI SSA SECONDARY CHANNEL 8JAN74 8J JMP TD1D2 YES 8JAN74 8J JSB STOUT NO-START OUTPUT 8JAN74 8J JMP TD1C 8JAN74 T TD1D2 EQU * 8JAN74 T LDA N08$ SET FOR A MAX OF 700 MS 8JAN74 8J STA EQT34,I 8JAN74 A JMP TD1E 8JAN74 A TD1D1 EQU * 8JAN74 A AND RSTAT+2 ISOLATE WRITE STATUS BITS CPA RSTAT+2 STATUS OK JMP *+2 YES JMP TD1E NO U JSB TSEC TEST SECONDARY RCV S JMP TD1E 0 TD1G EQU * 1E JSB STOUT START OUTPUT Y JMP TD1C TD1E EQU * 1C LDA N01$ ISZ EQT34,I TIME RUN OUT? JMP TD1F NO-DELAY 100 MS JMP TD1G YES-START OUTPUT ANYWAY * * TIMER #2 * TD2A DEF TD2 TD2 EQU * 2 NOP * CLF 0 DISABLE INTERRUPT SYSTEM CLB,INB JSB TIMOF SETUP FOR TIMER OFF LIST JSB STIN START INPUT STF 0 ENABLE INTERRUPT SYSTEM JMP TD2,I * * * TIMER #3 --LINE STATE MONITOR SY * TD3A DEF TD3 - TD3 NOP TD CLF 0 DISABLE INTERRUPTS ST CLB,INB JSB TIMOF SETUP FOR TIMER OFF LIST JSB TMON GET BACK ON O5 LIA SC INPUT BOARD STATUS L STA EQT25,I I AND S$CC DATA SET READY TU SZA IS IT SET? AD JMP TD3B YES-LET IT RUN TU LDA P02$ STA RTX NO-SETUP TIMER RETURN LDA TD3 STA LTIM LDB LSIT JMP LSWCH SIMULATE I/F INTERRUPT T TD3B STF 0 ENABLE INTERRUPTS JMP TD3,I * * TMON NOP TD LDA N64$ 6.4 SECONDS LDB TD3A LINE MONITOR UP JSB DTIM JMP TMON,I * * ********************************************************************** * ** * TIME OFF * INITIAL SETUP FOR TIMEOUT ** * A=EQT L * B=TIMER FLAG MASK TI * ********************************************************************** TIMOF EQU * ** NOP * STB TMOF1 SAVE TIMER TYPE JSB SETQ SET EQT LDA EQT3,I AND M77$ GET SELECT CODE JSB SETIO SET I/O INST. LDA TMOF1 CMA TM AND EQT16,I CLEAR TIMER IN PROGRESS STA EQT16,I C JMP TIMOF,I C * TMOF1 NOP TI ********************************************************************** * ** * LINE CHECK * ********************************************************************** LCHK EQU * ** NOP * LDA EQT5,I CPA CLOSE LINE CLOSED JMP LCHK1 YES JSB STAT NO- GET I/F STATUS ** XOR S$CC COMPLIMENT DATA SET RDY AND S$CC AND ISOLATE RAL,RAL POSITION FOR LINE ERROR * NOTE-"DATA SET NOT READY" INDICATES LINE ERROR JMP LCHK,I LCHK1 EQU * HK ISZ EQT4,I INVALID REQUEST JMP READ1 IMMEDIATE COMPLETION NE ********************************************************************** * ** * DIRECTIVE EVALUATOR ** * * A= DIRECTIVE BITS (15- 8), OUTPUT DATA (7-0) * 15-START READ (1 * 14-START WRITE * 13-NO OPERATION 5- * * B= TIMER REQUEST * <0- INITIATE/UPDATE VALUE PU * =0- NO REQUEST * >0- CANCEL REQUEST E * * ********************************************************************** DRCTV EQU * ** NOP * STA DRCTA SAVE DIRECTIVES SZB,RSS TIMING REQUEST * JMP DRCT1 NO IN LDA EQT16,I YES SSB CANCEL REQUEST * JMP DRCT2 NO CE * YES L ELA,CLE,ERA CLEAR IN PROGRESS BIT CLB INDICATE CANCEL JMP DRCT3 DRCT2 EQU * CT SSA TIMER IN PROGRESS CMB,INB YES-INDICATE RESET IT IOR B15$ SET IN PROGRESS BIT DRCT3 EQU * 5$ STA EQT16,I UPDATE FLAGS SS STB A T1 LDB LTIMA I STB EQT31,I SET PROCESSOR TO LOGICAL TIMER ** LDB EQT31 I ADB N01$ PASS EQT30 AS TIMER BLOCK JSB $TIME CALL TIMER AS DRCT1 EQU * IM LDA DRCTA RAL,SLA START READ AS JSB SREAD YES RAL,SLA START WRITE JSB SWRIT YES SSA NOP JSB RTRN YES LDA DRCTA NO DIRECTIVES JMP DRCTV,I RETURN CT * DRCTA NOP DR * CT ********************************************************************** * ** * START READ * ********************************************************************** SREAD EQU * ** NOP * LDA EQT5,I CPA RECV LINE STATE= RECEIVE