JMP SRD1 YES CPA SEND LINE STATE= SEND VE JMP SRD2 YES LDA RECV LINE STATE OTHER,CHANGE TO RECV RSS RE SRD4 EQU * CV LDA PRCV3 LNE STATE=PREPARE TO RCV #3 STA EQT5,I JSB CLC DISABLE BOARD LDA N03$ DELAY 300 MS A LDB TD2A JSB DTIM START TIMER #2 RE JSB RCV CONFIGURE FOR RECEIVE JSB RTRN * SRD1 EQU * RN JSB STIN START INPUT JSB RTRN SRD2 EQU * RN JSB STAT INPUT BOARD STATUS VE RAL,RAL SSA BOARD BUSY S JMP SRD3 YES LDA RECV LINE STATE=RECEIVE VE JMP SRD4+1 * SRD3 EQU * D4 LDA PRCV1 STA EQT5,I SET LINE STATE= PREPARE TO RCV#1 ** JSB STC ENABLE I/F INTERRUPTS JSB RTRN * * START INPUT SUBROUTINE STIN NOP T LDA EQT6,I JSB OTA ENABLE ECHO IF VALID E LDA C$SBA SET SECONDARY SEND D JSB OTA A JSB TMON START MONITOR JSB STC ENABLE INTERRUPTS JMP STIN,I * * ********************************************************************** * ** * START WRITE ** * ********************************************************************** SWRIT EQU * ** NOP * JSB CLC TURN OFF INTERRUPTS LDB EQT5,I GET PREVIOUS STATE * LDA PSND STA EQT5,I SET LINE STATE= PREPARE TO SEND LDA DRCTA GET CHARACTER AND RBYT$ STA EQT35,I SAVE CHAR. FOR O/P PA CPB SEND PRIOR STATE=SEND? JMP SWRT1 YES-BYPASS TURNAROUND DELAYS ND CLA INDICATE FIRST TIME THRU 8JAN74 ** STA EQT34,I I LDA N02$ NO-ONLY DELAY 200 MS HR LDB TD1A USE TIME DELAY #1 JSB DTIM JSB RTRN SWRT1 EQU * RN JSB STOUT START OUTPUT Y JSB RTRN ************************************************************************ * START OUTPUT ************************************************************************ STOUT EQU * ** NOP * LDA EQT35,I GET PENDING CHAR. JSB OTA O/P TO INTERFACE * JSB TMON START LINE MONITOR ** JSB STC ENABLE INTERRUPTS JMP STOUT,I E ************************************************************************ ********************************************************************** * ** * LOGICAL TIMER ** * ********************************************************************** LTIMA DEF LTIM * IM LTIM EQU * IM NOP * CLF 0 TURN OFF INTERRUPT SYSTEM LDB B15$ JSB TIMOF SETUP FOR TIMER OFF LIST * JSB STAT I/P BOARD STATUS FF LDA P02$ STA RTX INDICATE TIMER RETURN LDA P08$ LDB LSTT PROCESS LSWCH ADB EQT5,I BY CE LDB B,I LINE SS JMP B,I STATE LSTT DEF *+1 DEF LSTA O-CLOSED TI DEF LSTB 1-AWAITING RING DEF LSTB 2-AWAITING OPEN DEF LSTB 3-IDLE IN DEF LSTD 4-PREPARE TO SEND DEF LSTD 5-SEND RE DEF LSTC 6-PREPARE TO RCV #1 (FLUSH WRITE) DEF LSTC 7-PREPARE TO RCV #2 (DROP CF) DEF LSTC 8-PREPARE TO RCV #3 (DELAY) DEF LSTC 9-RECEIVE * LSIT DEF *+1 DEF LSIA 0-CLOSED T DEF LSIB 1-AWAITING RING DEF LSIC 2-AWAITING OPEN DEF LSIA 3-IDLE IN DEF LSII 4-PREPARE TO SEND DEF LSID 5-SEND RE DEF LSIE 6-PREPARE TO RCV #1 (FLUSH WRITE) DEF LSIF 7-PREPARE TO RCV #2 (DROP CF) DEF LSIH 8-PREPARE TO RCV #3 (DELAY) DEF LSIG 9-RECEIVE * LSTA EQU * IG JSB RTRN * * * * LSIA EQU * RN JSB CLC TURN OFF BOARD V JSB RTRN * * LSIB EQU * RN AND S$CE ISOLATE RINGING BIT SZA,RSS SET JMP LSIB1 NO A JSB CLC YES-TURN OFF BOARD ( JSB DONE COMPLETE OF LSIB1 EQU * NE JSB STC ENABLE INTERRUPTS JSB RTRN * * LSIC EQU * RN CLA * LSTB EQU * RN CLB * JSB BSTAT PROCESS BOARD STATUS DE NOP BAD LDB EQT5,I GOOD - INDICATE CONTINUE Y) JSB EQT24,I CALL LOGICAL CONTROL ENTRY ) JMP LSIC1 COMPLETE CA JSB DRCTV CONTINUE-EVALUATE DIRECTIVE JSB STC ENABLE INTERRUPTS JSB RTRN LSIC1 EQU * RN LDA IDLE STA EQT5,I SET LINE STATE= IDLE EC JSB DONE * * LSII EQU * NE LDA SEND STA EQT5,I LINE STATE= SEND DL LSID EQU * T5 CLA * LSTD EQU * T5 CLB,INB ,I JSB BSTAT CHECK STATUS EN NOP BS LSID1 EQU * TA LDB EQT5,I JSB EQT23,I CALL LOGICAL WRITE ENTRY VE JSB DONE COMPLETE CA JMP WRITC CONTINUE CA * * LSIE EQU * IT JMP SRD4 YES * * LSIF EQU * D4 JSB RTRN GOOD NU * * LSIG EQU * RN CLA * LSTC EQU * RN CCB * JSB BSTAT CHECK STATUS WR JMP LSIG1 BAD SSA TIMEOUT JMP LSIG1 YES LDB EQT25,I Y SSB,RSS BUFFER READY WR JSB RTRN NO-RETURN LSIG1 EQU * RN LDB EQT5,I JSB EQT22,I CALL LOGICAL READ ENTRY JSB DONE COMPLETE CA JMP READC CONTINUE CA * * LSIH EQU * AD JSB LCHK CHECK LINE STATUS SZA OK CK JMP LSIG1 BAD LDB RECV STB EQT5,I LINE STATE=RECEIVE NT JSB RTRN * * * ********************************************************************** * ** DONE EQU * ** ********************************************************************** NOP ** JSB CLC DISABLE BOARD LDA EQT6,I AND ECHO TURN OFF ECHO JSB OTA JSB DQT DEQUEUE TIMERS ** LDA EQTB JSB $PCOM NOTIFY DOS OF COMPLETION ** JSB RTRN * ********************************************************************** * ** SAVE EQU * ** ********************************************************************** NOP ** STA SAVA A STB SAVB B ERA,ALS E SOC AL INA O STA SAVEO CLA,INA O STA RTX INDICATE INTERRUPT ** LDA SAVE ADA N03$ CALCULATE INTERRUPT ENTRY LDA A,I STA EXIT SAVE RETURN ADDRESS JMP SAVE,I * * ********************************************************************** * ** * COMMON RETURN ** * ********************************************************************** RTRN EQU * ** NOP * LDA RTX DETERMINE RETURN TYPE SZA,RSS JMP RTRN1 I.72 MI SLA,RSS 1 JMP RTRN0 LOGICAL TIMER RTRN2 EQU * P.72 AL LDA SAVEO RESTORE CLO SA SLA,ELA E STF 1 O LDA SAVA A LDB MPTFL TEST MEMORY PROTECT SZB,RSS ON T JMP RTRN3 YES LDB SAVB RESTORE B STF 0 ENABLE INTERRUPT SYSTEM JMP EXIT,I RTRN3 EQU * IT LDB SAVB RESTORE B STF 0 ENABLE INTERRUPTS STC 5 ENABLE MEMORY PROTECT JMP EXIT,I RETURN ME * RTRN1 EQU * IT LDA EQT14,I R STA SAVB JMP RTRN2 I RTRN0 STF 0 ENABLE INTERRUPTS JMP LTIM,I * * ********************************************************************** * ** * DEQUEUE TIMERS * ********************************************************************** DQT EQU * ** NOP * LDA EQT16,I ** SSA,RSS LOGICAL TIMER IN PROGRESS JMP DQT1 NO IC ELA,CLE,ERA YES STA EQT16,I CLEAR FLAG ER CLA EQ LDB EQT31 I ADB N01$ JSB $TIME CANCEL REQUEST N DQT1 EQU * IM LDA EQT16,I C SLA,RSS DVR72 TIMER ACTIVE OG JMP DQT,I NO-DONE ARS,ALS YES STA EQT16,I CLR FLAG ER LDB EQT27 I ADB N01$ CLA N0 JSB $TIME CANCEL REQUEST IV JMP DQT,I * ********************************************************************** * ** * BOARD STATUS CHECK * B= -1 READ, 0 CONTROL,+1 WRITE * P+1=BAD STATUS, P+2= GOOD STATUS ********************************************************************** BSTAT EQU * ** NOP * STA COMP CLEAR COMPOSITE STATUS ** ADB STATX LDA EQT19,I CHECK FOR SEC. CHAN. S AND S$SBB ISOLATE SEC CHAN. CAPABILITIES ** XOR S$SBB IF NOT AVAILABLE FAKE IT IT IOR EQT25,I I AND B,I 5, CPA B,I CHECK STATUS BL JMP BST1 OK CK LDA P04$ BAD ADA COMP UPDATE TA STA COMP INDICATE LINE ERROR BST3 EQU * MP ADB P03$ GET "BREAD & ERROR" MASKS LDA EQT25,I G AND B09$ SZA,RSS DATA ERROR & JMP *+3 NO A ISZ COMP ISZ COMP LDA COMP GET COMPOSITE STATUS AS AND B,I SAVE SELECTED BITS S ALF,ALF POSITION FOR LOGICAL AS ALF AL STA B F LDA EQT25,I P AND RBYT$ I IOR B FORM COMPOSITE GI JMP BSTAT,I F * * BST1 EQU * TA ISZ BSTAT RETURN+2 OS JSB TSEC BREAK ISZ COMP INDICATE BREAK GI JMP BST3 * * STATX DEF *+2 RSTAT OCT 14000 -1 READ VALUE OCT 14000 0 CONTROL VALUE OCT 10000 +1 WRITE VALUE OCT 16 -1 READ(TIMEOUT,LINE ERROR,DATA ERROR) OCT 16 0 CONTROL(TIMEOUT,LINE ERROR,DATA ERROR) OCT 15 +1 WRITE(TIMEOUT,LINE ERROR,BREAK) ***************************************************************** ** * TEST SECONDARY CHANNEL * USES BOARD CAPABILITIES(EQT19) AND BOARD STATUS(EQT25) ** * TO DETERMINE RETURN ADDRESS. P+1 MEANS EQT19 IS SET (BIT14) ** * AND EQT25 (BIT14) IS CLEAR. P+2 MEANS EQT19 IS CLEAR OR 14 * EQT25 IS SET. 14 ******************************************************************** TSEC EQU * ** NOP * LDA EQT19,I ** AND S$SBB I SZA,RSS B JMP TSECX I AND EQT25,I ** SZA EQ TSECX EQU * T2 ISZ TSEC JMP TSEC,I ************************************************************************ ********************************************************************** * ** * CONFIGURE BOARD FOR RCV ** * ********************************************************************** RCV EQU * ** NOP * LDA =B147777 CLEAR CA+MASK ENABLE ** AND EQT6,I CLR REQUEST TO SEND IOR C$CD SET DATA TERMINAL READY STA EQT6,I AND ECHO DISABLE ECHO IN JSB OTA JSB STAT CLEAR READY FF AL NOP ST NOP ST JMP RCV,I ********************************************************************** * ** * CONFIGURE BOARD FOR SEND * ********************************************************************** SND EQU * ** NOP * CLA * JSB OTA DROP SECONDARY SEND LDA C$CA IOR C$CD SET DATA TERMINAL READY IOR EQT6,I SET REQUEST TO SEND STA EQT6,I AND ECHO DISABLE ECHO O JSB OTA JMP SND,I * * ********************************************************************** OTA EQU * ** NOP * O1 OTA SC JMP OTA,I ** * ********************************************************************** STC EQU * ** NOP * O2 STC SC JMP STC,I ** * * ********************************************************************** CLC EQU * ** NOP * O3 CLC SC JMP CLC,I ** * * ********************************************************************** STAT EQU * ** NOP * O4 LIA SC,C STA EQT25,I ** NOP EQ JMP STAT,I * * * ********************************************************************** SETIO EQU * ** ********************************************************************** NOP ** CPA LAST ALREADY CONFIGURED ** JMP SETIO,I YES STA LAST NO A ADA CLCO FORM CLC INST STA O3 ADA N4K FORM STC INST ADA B09$ STA O2 ADA N64$ FORM OTA INST STA O1 ADA N64$ NOP N6 STA O4 XOR B09$ REMOVE CLEAR FLAG BIT STA O5 JMP SETIO,I R * CLCO CLC 0 TI N4K OCT 174000 LAST NOP 17 INCD OCT 103 00 M160$ OCT 160 00 M40$ OCT 40 COMP NOP 40 SCODE NOP 40 RTX NOP 40 SAVA NOP 40 SAVB NOP 40 SAVEO NOP 40 EXIT NOP 40 * IT ********************************************************************** * ** * EQT LINKAGE TABLE ** * ********************************************************************** EQT3 NOP UNIT/SELECT CODE ** EQT4 NOP STATUS LE EQT5 NOP LINE STATE C EQT6 NOP I/F CONTROL WORD ** EQT9 NOP CONWD EQT10 NOP PARAMETER 1 EQT16 NOP TIMER FLAGS EQT17 NOP EXTENSION LINK D EQT19 NOP BOARD PARAMETERS ** EQT22 NOP LREAD EQT23 NOP LWRIT EQT24 NOP LCNTL EQT25 NOP I/F BOARD STATUS ** EQT27 NOP DVR72 TIMER PROCESSOR ADDRESS EQT31 NOP LOGICAL TIMER PROCESSOR ADDRESS EQT34 NOP COUNTER FOR NULL O/P OR EQT35 NOP SAVE FIRST CHAR. FOR O/P DD EQT14 NOP TRANSMISSION LOG FO * T1 * BASE PAGE CONSTANTS SS * # EQU 53B E N01$ EQU #-1 E N02$ EQU #-2 E N03$ EQU #-3 E N04$ EQU #-4 E N05$ EQU #-5 E N06$ EQU #-6 E N07$ EQU #-7 E N08$ EQU #-8 E N09$ EQU #-9 E N10$ EQU #-10 N64$ EQU #-11 P00$ EQU # 11 P01$ EQU #+1 P02$ EQU #+2 P03$ EQU #+3 P04$ EQU #+4 P05$ EQU #+5 P06$ EQU #+6 P07$ EQU #+7 P08$ EQU #+8 P09$ EQU #+9 P10$ EQU #+10 P17$ EQU #+11 P64$ EQU #+12 M17$ EQU #+13 M37$ EQU #+14 M77$ EQU #+15 M177$ EQU #+16 RBYT$ EQU #+17 OCT 377 LBYT$ EQU #+18 OCT 177400 N M3777 EQU #+19 OCT 3777 0 M1777 EQU #+20 OCT 177700 N NULL EQU RBYT$ * BASE PAGE VARIABLES 70 ## EQU 202B EQTB EQU 300B ADDRESS OF EQT ENTRY O/ $EQ1 EQU ##+1 $EQ3 EQU ##+3 $EQ5 EQU ##+5 $EQ6 EQU ##+6 $EQ9 EQU ##+9 $EQ10 EQU ##+10 $EQ11 EQU ##+11 $EQ14 EQU ##+14 $EQ16 EQU ##+16 $EQ17 EQU ##+17 CLOSE EQU P00$ CLOSED O ARING EQU P01$ AWAITING RING AOPEN EQU P02$ AWAITING OPEN IDLE EQU P03$ IDLE IN PSND EQU P04$ PREPARE TO SEND SEND EQU P05$ SEND RE PRCV1 EQU P06$ PREPARE TO RCV#1(FLUSH WRITE) PRCV2 EQU P07$ PREPARE TO RCV#2(DROP CF) PRCV3 EQU P08$ PREPARE TO RCV#3(DELAY) RECV EQU P09$ RECEIVE RQP3 EQU 230B RQP4 EQU 231B MPTFL EQU 271B MEMORY PROTECT FLAG B15$ OCT 100000 B14$ OCT 40000 B13$ OCT 20000 B12$ OCT 10000 B10$ OCT 2000 B09$ OCT 1000 C$CD EQU B14$ DATA TERMINAL READY C$CA EQU B13$ REQUEST TO SEND C$SBA EQU B10$ SECONDARY SEND A S$SBB EQU B14$ SECONDARY RECEIVE S$CC EQU B12$ DATA SET READY VE S$CE EQU B10$ RINGING ECHO OCT 176777 END 17