IMD 1.16: 2/09/2008 12:53:27 intracomm:source (e0) 4/17/80 84-93702a100 f70202 4/23/80    @0|)v1uo)  " }jA cOMEGA4MOM790111120000OM790111120000OM790111120000INTRACOMM:SOURCE(E0)     -M@jjggg@ o G`k_C# b# }B u[ ]e JRiCp@=<; G9P@ Gnrgy w"I {MqD}H.`,tC) >d $:98y675+1OS:: SYSeiOM790111120000OM790111120000OM840201141022ed OM790111120000OM790111120000OM840201141103ehOM790111120000OM790111120000OM790111120000eOM790111120000OM790111120000OM790111120000OM790111120000OM790111120000OM790111120000em7OM790111120000OM790111120000OM790111120000en2bOM790111120000OM790111120000OM840201141540e/OM790111120000OM790111120000OM840201141718  e|OM790111120000OM790111120000OM840201141439 e2OM790111120000OM790111120000OM840201141356 e&OM790111120000OM790111120000OM840201141237 eXOM790111120000OM790111120000OM840201141800 e OM790111120000OM790111120000OM790111120000e"BOM790111120000OM790111120000OM840201141633e$ 5OM790111120000OM790111120000OM790111120000e?OM790111120000OM790111120000OM790111120000eM4OM790111120000OM790111120000OM790111120000eN+.OM790111120000OM790111120000OM790111120000edOM790111120000OM790111120000OM790111120000eiOM790111120000OM790111120000OM790111120000emOM790111120000OM790111120000OM790111120000 en &OM790111120000OM790111120000OM790111120000es 2OM790111120000OM790111120000OM790111120000exGOM790111120000OM790111120000OM790111120000e|OM790111120000OM790111120000OM790111120000e}6OM790111120000OM790111120000OM790111120000e~COM790111120000OM790111120000OM790111120000e 7OM790111120000OM790111120000OM790111120000e4OM790111120000OM790111120000OM790111120000e;OM790111120000OM790111120000OM790111120000e4OM790111120000OM790111120000OM790111120000 !" #$%&'() *+,-./ 0123456  789:;<  =>?@ABC  DEFGHI  JKLMNOP  QRSTUV WXYZ[\] ^_`abc . INT:OUTPUT JCLINT:INPUT ASMINT:OUTPUT ASM INT:DLL ASM INT:COMMON ASM INT:AMX ASM INT:SPI ASM INT:INPUT OBJINT:MGR ASMINT LIBINT MACINT:AMX JCLINTD MACINT:MGR OBJINT:OUTPUT OBJINT:DLL OBJINT:COMMON OBJINT:AMX OBJINT:SPI OBJINT:LIB JCLINT:INPUT JCLINT JCLINT:COMMON JCLINT:DLL JCLINT:MGR JCLINT:SPI JCL/MACRO DF1.INT:OUTPUT(D=SF.GEN+SF.IOSD+SF.IOS+DF1.INT) OM790111120000OM790111120000OM790111120000 TITL INTRACOMM INPUT PROCESS - 93702-21E000 TBOX LK:INP,-,INPUT,ACTIVITY,-,ISTRT,STATE,ENTRY NAM LK:INP EXTR LK:ID EXTR LK:HDR EXTR R:END EXTR R:ISIG EXTR R:IWAI EXTR LK:RTOFF EXTR LK:SACK EXTR LK:THX EXTR LK:TAB EXTR LK:SAL * INT: REL SHARAB LE INT: ROMMABLE INT: LK:INP EQU $ COPY LC:PSM(Y),X LOCK PROTOCOL DATABASE JSK R:IWAI LK:II10 EQU $ JSK *LC:INM1(Y) STARTUP LINK MANAGEMENT * JSK LK:HDR OBTAIN NEXT INTRACOMM HEADER JMP LK:II20 ERROR * JSK LK:ID IDENTIFY HEADER JMP LK:II10 NOT VALID HEADER * * VALID HEADER MESSAGE RECEIVED * XNX A JMP *$+1 PROCESS THIS TYPE OF MESSAGE FOR ISTART STATE WORD LK:IA30 STRT (ENTER ASTRT STATE) WORD LK:IA50 STACK (ENTER RUNNING STATE) WORD LK:II20A REP WORD LK:II20A NAK WORD LK:II20A ACK WORD LK:II20A DATA WORD LK:II30 *****LOAD TITL * * ERROR CONDITION DETECTED DURING HEADER INPUT * LK:II20 EQU $ JSK LK:TAB TEST FOR ABORT JMP LK:IABT0 THRESHOLD ERROR, ABORT! SHIFT A,RO,4 ISOLATE ERROR TYPE XNX A JMP *$+1 PROCESS VARIOUS ERROR CONDITIONS WORD LK:II10 HARDWARE ERROR WORD LK:II20B TIME OUT WORD LK:PWRFL POWER FAILURE WORD LK:IABT0 ABORT WORD LK:IABT0 ABORT * * RECEIVE MESSAGE THAT SHOULD NOT BE RCVD IN THIS STATE * LK:II20A EQU $ COPY =OPERR:,X JSK LK:THX ADD ERROR TO THRESHOLD COUNT JSK LK:TAB SEE IF THRESHOLD EXCEEDED JMP LK:IABT0 YES-EXCEEDED-ABORT * * HARDWARE TIMER EXPIRES *  OR RCVD REP,NAK,ACK,OR DATA AND HAVEN'T EXCEEDED THRESHOLD * LK:II20B EQU $ COPY LC:PFG(Y),A SBIT PF:STRT,A SEND STRT MSG SBIT PF:TON,A START REPLY TIMER SBIT PF:SEL,A FORCE SELECTION COPY A,LC:PFG(Y) * JMP LK:II10 * * LOAD REQUEST RECEIVED * LK:II30 EQU $ ***** COPY LC:PFG(Y),A ***** TBIT PF:MAINT,A ***** PUT LINK INTO MAINTENANCE MODE JT OV,LK:II32 ***** IF IN A MAINTENANCE OPEN, VALID SBIT PF:MAINT,A ***** PUT LINK INTO MAINTENANCE MODE COPY A,LC:PFG(Y) ***** COPY =STMAINT:,A ***** SAVE NEW STATUS FOR USER NOTIFICATION LK:II31 COPY LC:OPTI(Y),X ***** JMP LK:IR00A ***** GO TO RUNNING STATE LK:II32 COPY =NORML:,A ***** RETURN A NORMAL STATE JMP LK:II31 ***** TBOX LK:IN,-,INPUT,ACTIVITY,-,ASTRT,STATE * LK:IA10 EQU $ JSK *LC:INM1(Y) STARTUP LINK MANAGEMENT * JSK LK:HDR OBTAIN NEXT HEADER JMP LK:IA20 ERROR * JSK LK:ID IDENTIFY HEADER JMP LK:IA10 NOT VALID HEADER * * VALID HEADER RECEIVED * XNX A JMP *$+1 WORD LK:IA30 STRT WORD LK:IA50 STACK (ENTER RUNNING STATE) WORD LK:IA30A REP WORD LK:IA30A NAK WORD LK:IA60 ACK (ENTER RUNNING STATE) WORD LK:IA60 DATA (ENTER RUNNING STATE) WORD LK:II30 *****LOAD TITL * * ERROR CONDITION DETECTED DURIN HEADER INPUT * LK:IA20 EQU $ JSK LK:TAB TEST FOR ABORT JMP LK:IABT0 THRESHOLD ERROR, ABORT! SHIFT A,RO,4 ISOLATE ERROR TYPE XNX A JMP *$+1 WORD LK:IA10 HARDWARE ERROR WORD LK:IA40 TIME OUT WORD LK:PWRFL POWER FAIL WORD LK:IABT0 ABORT WORD LK:IABT0 ABORT * * RECEIVE START * LK:IA30 EQU $ ***** JSK LK:SAL *****CHECK CPU AND SAL IF SCOUT * * RCVD MESSAGE THAT SHOULDN'T BE RCVD IN THIS STATE * LK:IA30A EQU $ COPY =OPERR:,X JSK LK:THX ADD ERROR TO COUNTS JSK LK:TAB SEE IF THRESHOLD EXCEEDED JMP LK:IABT0 YES-EXCEEDED-ABORT * * HARDWARE TIMER EXPIRES, RECEIVE REP, NAK * OR RECEIVE START AND WE ARE NOT A SCOUT * LK:IA40 EQU $ COPY LC:PFG(Y),A SBIT PF:STAK,A SEND STACK SBIT PF:TON,A TURN ON REPLY TIMER SBIT PF:SEL,A FORCE SELECTION COPY A,LC:PFG(Y) JMP LK:IA10 * * RECEIVE STACK * LK:IA50 EQU $ COPY LC:PRI(Y),X ***** COPY HDR:2(X),A *****PICK UP FLAGS FROM HEADER TBIT MAINTMSG,A *****IS THIS A MAINTE NANCE MESSAGE? JF OV,LK:IA50A *****NO-PROCEED NORMALLY COPY LC:PFG(Y),A ***** TBIT PF:MAINT,A *****IN MAINTENANCE MODE? JT OV,LK:IA50B *****YES-GET INTO MSTRT STATE COPY =STMAINT:,A *****NO-RETURN CODE TO USER JMP LK:IR40A ***** LK:IA50B EQU $ *****  COPY Y,X ***** JSK LK:SACK *****SET UP TO SEND AN ACK JMP LK:IM10 *****ENTER MAINTENANCE START-UP STATE LK:IA50A EQU $ *****  COPY Y,X JSK LK:SACK SEND ACK JMP LK:IR00 ENTER RUNNING STATE * * RECEIVE ACK OR DATA * LK:IA60 EQU $ COPY LC:PRI(Y),X COPY HDR:2(X),A RESP=0?, GO TO RUNNING STATE AND =:FF,A JNE A,LK:IA40 JMP LK:IR00 TITL LPOOL TBOX LK:IN,-,INPUT,ACTIVITY,MAINTENANCE,START-UP,STATE * Y=LCB LK:IM10 EQU $ ***** JSK *LC:INM1(Y) ***** * JSK LK:HDR *****GET NEXT MESSAGE JMP LK:IM20 *****ERROR * JSK LK:ID *****IDENTIFY HEADER JMP LK:IM10 *****BAD MESSAGE * XNX A ***** JMP *$+1 ***** WORD LK:IA30 *****STRT WORD LK:IM30 *****STCK WORD LK:IM30 *****REP WORD LK:IM30 *****NAK WORD LK:IM30 *****ACK WORD LK:IM30 *****DATA WORD LK:IR00 *****LOAD (GO TO RUNNING STATE) * LK:IM20 EQU $ ***** JSK LK:TAB *****ABORT? JMP LK:IABT0 *****YES-JUMP SHIFT A,RO,4 *****ISOLATE ERROR TYPE XNX A ***** JMP *$+1 ***** WORD LK:IM10 *****HARDWARE ERROR WORD LK:IM30 *****TIME OUT WORD LK:PWRFL *****POWER FAIL WORD LK:IABT0 *****ABORT WORD LK:IABT0 *****ABORT * * RECEIVE STACK * LK:IM30 EQU $ ***** COPY LC:PFG(Y),A ***** SBIT PF:ACK,A *****SEND ACK SBIT PF:TON,A *****TURN ON REPLY TIMER SBIT PF:SEL,A *****FORCE SELECTION OF OTHER CPU COPY A,LC:PFG(Y) ***** JMP LK:IM10 ***** TBOX LK:IN,-,INPUT,ACTIVITY,TRANSITION,TO,RUNNING,STATE * LK:IR00 EQU $ JSK LK:RTOFF STOP TIMER * COPY LC:OPTI(Y),X TIB ADDRESS OF OPEN REQUEST COPY =NORML:,A RETURN NORMAL COMPLETION OF STARTUP LK:IR00A EQU $ ***** COPY A,TI:SOF(X) ADD =TI:WAI,X OPENING ACTIVITY WAITING NOW JSK R:ISIG START HIM UP JMP LK:IR10 * LPOOL TBOX LK:IN,-,INPUT,ACTIVITY,RUNNING,STATE EXTR LK:SACK EXTR LK:SNAK EXTR LK:RESP EXTR LK:NUM EXTR LK:CRC EXTR LK:ISEL EXTR LK:TIB EXTR LK:ACK EXTR R:IWAI EXTR LK:RTOFF EXTR LK:RTON EXTR LK:RSN EXTR R:END EXTR LK:CLF EXTR LK:TAB EXTR LK:SAL * LK:IR10 EQU $ JSK *LC:INM1(Y) LINK MANAGEMENT PART 1 * JSK LK:HDR READ NEXT HEADER JMP LK:IR20 ERROR * JSK LK:ID IDENTIFY HEADER JMP LK:IR20B BAD FORMAT * * VALID HEADER RECEIVED * XNX A JMP *$+1 WORD LK:IR40 STRT WORD LK:IR50 STACK WORD LK:IR60 REP WORD LK:IR70 NAK WORD LK:IR80B ACK WORD LK:IR80 DATA WORD LK:IR30 *****LOAD TITL * * ERROR DETECTED DURING INPUT * LK:IR20 EQU $ JSK LK:TAB TEST FOR ABORT JMP LK:IABT0 THRESHOLD ERROR, ABORT! COPY A,Q SHIFT Q,RO,4 ISOLATE ERROR CLASS XNX Q JMP *$+1 WORD LK:IR20A HEADER ERROR WORD LK:IR20C TIME OUT WORD LK:PWRFL POWERFIAL WORD LK:IR20D DATA ERROR WORD LK:IABT0 ABORT * * ERROR DETECTED DURING HEADER INPUT * LK:IR20A EQU $ JSK LK:RSN CONVERT INTERNAL ERROR TO REASON CODE COPY Y,X JSK LK:SNAK SET SNAK JMP LK:IR10 * * RECEIVE HEADER WITH BAD FORMAT * LK:IR20B EQU $ COPY =FMT:NAK,A COPY Y,X JSK LK:SNAK SET SNAK WITH FORMAT REASON CODE JMP LK:IR10 * * HARDWARE TIMER EXPIRES * LK:IR20C EQU $ JSK *LC:INM2(Y) PROCESS FOR HDX OR FDX JMP LK:IR10 TITL * * ERROR IN DATA MESSAGE RECEPTION * LK:IR20D EQU $ JSK LK:RSN CONVERT TO NAK RE ASON CODE COPY Y,X JSK LK:SNAK SET SNAK JSK LK:ISEL PROCESS SELECT FLAG IN DATA HEADER JMP LK:IR80B PROCESS LIKE ACK * *  RECEIVE LOAD REQUEST * LK:IR30 EQU $ ***** COPY LC:PFG(Y),A ***** SBIT PF:MAINT,A *****ENTER MAINTENANCE MODE COPY A,LC:PFG(Y) ***** COPY =STMAINT:,A *****LET USER KNOW OF REQUEST JMP LK:IR40A ***** * * RECEIVE STRT-SHUTDOWN PROTOCOL * LK:IR40 EQU $ JSK LK:SAL *****SAL IF CPU IS SCOUT COPY =STARTED:,A PUT REASON FOR CLOSING LINK IN LCB LK:IR40A EQU $ ***** COPY A,LC:CLC(Y) COPY Y,X JSK LK:CLF CHANGE FLAGS TO CLOSE LINK JMP LK:IABT0 PROCESS AS ABORT * * RECEIVE STACK * LK:IR50 EQU $ COPY Y,X JSK LK:SACK SET SACK JMP LK:IR10 * * RECEIVE REP * LK:IR60 EQU $ JSK LK:NUM RETRIVE NUM FROM HEADER XOR LC:R(Y),A JEQ A,LK:IR60A COMPARE WITH R * COPY =REP:NAK,A NUM NOT = R COPY Y,X JSK LK:SNAK SET SNAK JMP LK:IR10 * LK:IR60A EQU $ COPY Y,X JSK LK:SACK NUM = R, SET SACK JMP LK:IR10 TITL * * RECEIVE NAK * LK:IR70 EQU $ COPY LC:PRI(Y),X COPY HDR:2(X),X GET REASON FIELD SHIFT X,RO,10 RIGHT JUST. CLSN X,=TC:NAK *****BAD TYPE CODE? JMP LK:IR70C *****YES-JUMP-PROBABLY NOT A .BIN FILE COPY =NAKS:,X ANOTHER NAK RECEIVED JSK LK:THX MONITOR ERROR JSK LK:TAB TEST FOR ABORT JMP LK:IABT0 THRESHOLD ERROR, ABORT! * JSK LK:ACK POST ACKS JMP LK:IR70B NO ACKS THIS TIME * LK:IR70A EQU $ COPY LC:A(Y),A ADD =1,A T <- A+1 AND =:FF,A MOD 256 COPY A,LC:T(Y) JSK LK:RTOFF STOP REPLY TIMER JMP LK:IR10 * LK:IR70B EQU $ JSK LK:RESP GET RESP FROM HEADER XOR LC:A(Y),A WAS RESP = A? JEQ A,LK:IR70A YES, MOVE T BACK JMP LK:IR10 * LK:IR70C EQU $ ***** COPY =TCBAD:,A ***** COPY A,LC:CLC(Y) *****SET UP STATUS FOR USER JMP LK:IABT0 *****ABORT DOWN-LOAD AND NOTIFY USER TITL * * RECEIVE DATA * LK:IR80 EQU $ JSK LK:NUM RETRIEVE NUM COPY LC:R(Y),Q ADD =1,Q R <- R+1 AND =:FF,Q XOR A,Q NUM = R+1? JEQ Q,LK:IR80A JMP LK:IR80B PROCESS ACK * LK:IR80A EQU $ COPY LC:RTIB(Y),X COPY A,TI:NUM(X) PUT MESSAGE NUMBER IN TIB FOR INPUT ACTIVITY  COPY =NORML:,A COPY A,TI:SOF(X) RETURN STATUS TO ACTIVITY ADD =TI:WAI,X RESUME READ ACTIVITY JSK R:ISIG * COPY =0,A COPY A,LC:RTIB(Y) CLEAR TIB ADDRESS IN LCB COPY LC:ICIB(Y),X COPY A,CI:TIB(X) CLEAR TIB ADDRESS IN CIB * COPY LC:RSM(Y),X JSK R:ISIG PERMIT NEXT READ TO START * JMP LK:IR80B PROCESS ACK TITL * * RECEIVE ACK * LK:IR80B EQU $ JSK LK:ACK PROCESS POSSIBLE ACKS JMP LK:IR10 NO ACKS * COPY LC:T(Y),A JSK LK:TIB WAS MSG T ACKNOWLEDGED? JMP $+2 YES JMP LK:IR80C NO * COPY LC:A(Y),A T <- A+1 ADD =1,A AND =:FF,A COPY A,LC:T(Y) * LK:IR80C EQU $ COPY LC:X(Y),A ANY REMAINING UNACKNOWLEDGED TRANSMISSIONS JSK LK:TIB JMP $+3 JSK LK:RTON YES, START REPLY TIMER JMP LK:IR10 * JSK LK:RTOFF NO, STOP REPLY TIMER JMP LK:IR10 LPOOL TITL * * ABORT PROTOCOL * LK:IABT0 EQU $ COPY LC:CLC(Y),Q LOAD REASON FOR THIS ABORT * * CLEAR ALL ENTRIES FROM OUTPUT SIDE OF LINK * LK:IABT3 EQU $ COPY LC:OUTQ(Y),X QUEUE OF OUTPUT TIB'S JEQ X,LK:IABT5 IF NOT ANY COPY TI:LNK(X),A STORE NEXT ENTRY COPY A,LC:OUTQ(Y) AS LIST HEAD * COPY Q,TI:SOF(X) REASON CODE TO TIB STATUS ADD =TI:WAI,X JSK R:ISIG START HIM UP JMP LK:IABT3 * * RESUME ANY PENDING READ * LK:IABT5 EQU $ COPY LC:RTIB(Y),X TIB ADDRESS OF READ REQUEST JEQ X,LK:IABT 7 CHECK IF NO REQUEST COPY Q,TI:SOF(X) REPORT ABORT REASON TO TIB ADD =TI:WAI,X JSK R:ISIG START ACTIVITY * COPY LC:RSM(Y),X ALLOW WAITING READ ACTIVITIES TO CLEAR THEMSELVES JSK R:ISIG * LK:IABT7 EQU $ COPY LC:OPTI(Y),X JEQ X,LK:IABT9 SIGNAL OPEN/CLOSE ACCESS MANAGER COPY Q,TI:SOF(X) REPORT ABORT REASON TO TIB ADD =TI:WAI,X JSK R:ISIG * LK:IABT9 EQU $ COPY LC:OUSM(Y),X SIGNAL OUTPUT ACTIVITY (EFFECTIVE HDX ONLY) JSK R:ISIG * COPY LC:OCIB(Y),X OUTPUT CIB ADDRESS ADD =CI:CSM,X SIGNAL COMP SEMAPHORE JSK R:ISIG * COPY LC:PSM(Y),X RELEASE PROTOCOL DATABASE JSK R:ISIG JSK R:END DELETE THIS INSTANCE OF INPUT ACTIVITY TBOX LK:IN,-,POWERFAIL LK:PWRFL EQU $ COPY =POWERFL:,A PUT REASON FOR LINK CLOSE IN LCB COPY A,LC:CLC(Y) COPY Y,X JSK LK:CLF CHANGE FLAGS TO CLOSE LINK JMP LK:IABT0 PROCESS AS ABORT END TITL INTRACOMM INPUT PROCESS - 93702-21E000 BOX LK:HDR,-,READ,NEXT,HEADER * A = ERROR CODE ON RETURN * NORMAL RETURN P+2 * ERROR RETURN P+1 * NAM LK:HDR EXTR R:IWAI EXTR LK:PFR EXTR LK:CST EXTR LK:SYN EXTR LK:ISEL EXTR LK:THX * INT: REL SHARABLE INT: ROMMABLE INT: LK:HDR EQU $ COPY LC:ICIB(Y),X GET ADDRESS OF INPUT CIB COPY =LK:SYN,A ADDRESS OF EOB ROUTINE COPY A,CI:EOB+3(X) COPY =L:SYN,A SYNC FUNCITON CODE COPY A,CI:FC(X) COPY LC:PRI(Y),A GET ADDRESS OF PRIMARY HEADER BUFFER COPY A,CI:IBF(X) COPY =1,A START ON SECOND BYTE COPY A,CI:SB(X) COPY =7,A BYTE COUNT (LESS SYNC BYTE) COPY A,CI:ICT(X) * COPY LC:ICIB(Y),X COPY X,A COPY CI:FUN(X),X JSK 0(X) PERFORM FUNCTION * COPY LC:ICIB(Y),X GET ADDRESS OF INPUT CIB ADD =CI:CSM,X CALCULATE ADDRESS OF SEMAPHORE JSK R:IWAI WAIT FOR EOB SIGNAL * * CHECK REASON FOR SIGNAL * COPY LC:PSM(Y),X LOCK PROTOCOL DATABASE JSK R:IWAI * LK:HDR02 EQU $ COPY LC:ICIB(Y),X ADDRESS OF INPUT CIB JSK LK:CST CHECK FLAGS JMP LK:HDR04 ABNORMAL * COPY LC:PRI(Y),X ADDRESS OF HEADER BUFFER COPY HDR:5(X),A GET HARDWARE STATUS JNE A,LK:HDR04 * JSK LK:ISEL PROCESS SELECT FLAG COPY K,X INDEX STACK IMS 0(X) P=P+2 RSK NORMAL RETURN * LK:HDR04 EQU $ CLSN =TIMER:,A WAS ERROR TIME OUT? JMP $+2 YES JMP LK:HDR06 NO COPY LC:ICIB(Y),X JSK LK:PFR RESET FLAGS ADD SEMAPHORES JMP LK:HDR02 POWERFAIL! COPY =TIMER:,A * LK:HDR06 EQU $ COPY A,X JSK LK:THX MONITOR ERROR RSK ERROR RETURN END TITL INTRACOMM INPUT PROCESS - 93702-21E000 BOX LK:ISEL,-,MONITOR,SELECTION,FROM,OTHER,STATION NAM LK:ISEL *  Y=LCB * INT: REL SHARABLE INT: ROMMABLE INT: LK:ISEL EQU $ COPY LC:PRI(Y),X COPY HDR:2(X),A TBIT SEL,A JT OV,$+2 RSK * COPY LC:PFG(Y),A SBIT PF:SEL,A COPY A,LC:PFG(Y) RSK SEL EQU 8 END TITL INTRACOMM INPUT PROCESS - 93702-21E000 BOX LK:NUM,-,RETRIEVE,NUM,FROM,HEADER * Y=LCB * A=RESP ON RETURN * NAM LK:NUM * INT: REL SHARABLE INT: ROMMABLE INT: LK:NUM EQU $ COPY LC:PRI(Y),X LOAD ADDRESS OF HEADER BUFFER COPY HDR:3(X),A LOAD RESP SHIFT A,RO,8 RIGHT JUST RSK END TITL INTRACOMM INPUT PROCESS - 93702-21E000 BOX LK:RESP,-,RETRIEVE,RESP,FROM,HEADER * Y=LCB * A=RESP ON RETURN * NAM LK:RESP * INT: REL SHARABLE INT: ROMMABLE INT: LK:RESP EQU $ COPY LC:PRI(Y),X COPY HDR:2(X),A AND =:FF,A RSK END TITL INTRACOMM INPUT PROCESS - 93702-21E000 BOX LK:ACK,-,PROCESS,OUTPUT,ACKNOWLEDGEMENTS,IF,ANY * Y=LCB * NORMAL RETURN P+ 2 * NO ACK RECEIVED RETURN P+1 * NAM LK:ACK EXTR LK:RESP EXTR R:ISIG EXTR LK:THC * INT: REL SHARABLE INT: ROMMABLE INT: LK:ACK EQU $ JSK LK:RESP RETRIEVE RESP FROM HEADER COPY LC:OUTQ(Y),X POINTER TO OUTPUT TIB Q * LK:ACK01 EQU $ JEQ X,LK:ACK02 QUIT IF END OF TIB QUEUE COPY TI:NUM(X),Q GET THIS MESSAGE'S NUM COPY TI:LNK(X),X GET LINE TO NEXT TIB CSN A,Q RESP = NUM? JMP LK:ACK03 YES, ACK RECEIVED XOR LC:N(Y),Q NUM=N? JNE Q,LK:ACK01 NO, TRY NEXT MESSAGE * LK:ACK02 EQU $ RSK NO ACKS TITL * * ACKNOWLEDGE WAITING OUTPUT ACTIVITIES * LK:ACK03 EQU $ COPY A,LC:A(Y) A <- RESP * LK:ACK04 EQU $ COPY LC:OUTQ(Y),X GET POINTER TO OUTPUT MESSAGES COPY =NORML:,A COPY A,TI:SOF(X) REPORT GOOD STATUS TO OUTPUT ACTIVITY * COPY TI:LNK(X),A GET POINTER TO NEXT MESSAGE COPY A,LC:OUTQ(Y) REPLACE QUEUE POINTER * COPY TI:NUM(X),A GET MESSAGE NUMBER ADD =TI:WAI,X CALC ADDRESS OF IDLE SEMAPHORE XOR LC:A(Y),A NUM = RESP? JEQ A,LK:ACK05 YES, LAST MESSAGE TO ACK * JSK R:ISIG RESUME OUTPUT ACTIVITY  JMP LK:ACK04 * LK:ACK05 EQU $ JSK R:ISIG RESUME ACTIVITY COPY K,X INDEX STACK IMS 0(X) NORMAL RETURN COPY =0,A ACK RECEIVED JSK LK:THC CLEAR ERROR COUNTS RSK END TITL INTRACOMM INPUT PROCESS - 93702-21E000 BOX LK:RSN,-,CONVERT,INTERNAL,ERROR,CODE,TO,NAK,REASON * A=ERROR CODE ON ENTRY * A=NAK REASON ON EXIT * NAM LK:RSN * INT: REL SHARABLE INT: ROMMABLE INT: LK:RSN EQU $ AND =:F,A CLEAR ERROR CLASS XNX A COPY NAKRSN,A RSK * NAKRSN EQU $ WORD 0 WORD OE:NAK HARDWARE ERROR WORD OE:NAK OVERRUN WORD MOD:NAK LOST DSR WORD MOD:NAK LOST CD WORD HCRC:NAK HEADER CRC WORD 0 WORD 0 WORD BUF:NAK NO DATA BUFFER AVAILABLE WORD SIZE:NAK BUFFER SIZE TOO SMALL WORD MOD:NAK LOST CTS END TITL INTRACOMM INPUT PROCESS - 93702-21E000 BOX LK:SAL,-,SAL,TO,AUTOLOAD,IF,CPU,IS,SCOUT * Y=LCB NAM LK:SAL INT: REL SHARABLE INT: ROMMABLE INT: * * LK:SAL EQU $ ***** FMT A *****GET MACH TYPE TBIT SCOUT:,A *****ARE WE IN A SCOUT? JF OV,LK:SAL50 *****NO-JUMP AND RETURN TO CALLER * *  YES-WE ARE A SCOUT COPY LC:PRI(Y),X ***** COPY HDR:2(X),A ***** TBIT MAINTMSG,A *****IS THIS A MAINTENANCE START MESSAGE? JF OV,LK:SAL50 *****NO-TREAT AS NORMAL START * * YES-WE ARE SCOUT AND GOT MAINTENANCE START MESSAGE * MUST AUTOLOAD COPY LC:BDID(Y),A *****GET BOARD ID OF AUTOLOAD BOARD COPY =0,Y *****ZAP YREG FOR ROM PROGRAM RBIT INT:,S ---------- QUICK FIX FOR NCC ---------- DISABLE INTERRUPTS XNX A ***** WORD :6610 *****SAL FILE1,BDID SBIT INT:,S ---------- QUICK FIX FOR NCC ---------- ENABLE INTERRUPTS LK:SAL50 EQU $ ***** RSK ***** END TITL INTRACOMM INPUT PROCESS - 93702-21E000 BOX LK:SYN,-,EOB,ROUTINE,AFTER,SYNC,DETECTED * X=CIB NAM LK:SYN EXTR R:RE12 EXTR R:SSIG EXTR LK:READ * INT: REL SHARABLE INT: ROMMABLE INT: LK:SYN EQU $ COPY X,Y CIB ADDRESS IN X, TRANSFER TO Y AND A COPY X,A JSK *CI:STA(Y) OBTAIN STATUS JEQ A,LK:SYN02 * CSK A,=IC:OE:+1 IS ERROR OE: OR LESS FATAL JMP LK:SYN01 YES NOP NO, REPORT ERROR TO INPUT ACTIVITY COPY =0,A COPY A,CI:TIM(Y) * COPY CI:IBF(Y),X ADDRESS OF THIS HEADER BUFFER COPY A,HDR:5(X) STORE ERROR CODE AFTER BUFFER COPY Y,X ADD =CI:CSM,X CALCULATE ADDRESS OF COMPLETION SEMAPHORE JSK R:SSIG SIGNAL INPUT ACTIVITY JMP R:RE12 DISPATCH * LK:SYN01 EQU $ COPY Y,A ATTEMP T SYNC AGAIN JSK *CI:FUN(Y) JMP R:RE12 DISPATCH * LK:SYN02 EQU $ COPY =0,A COPY A,CI:TIM(Y) COPY CI:CHR(Y),A LOAD SYNC CHARACTER SHIFT A,LO,8 MOVE TO LEFT BYTE COPY A,*CI:IBF(Y) STORE IN BUFFER COPY =L:RD,A CHANGE FROM SYNC TO READ COPY A,CI:FC(Y) COPY =LK:READ,A CHANGE TO READ EOB ROUTINE COPY A,CI:EOB+3(Y) COPY CI:HTC(Y),A NEG A,A COPY A,CI:TIM(Y) * COPY Y,A JSK *CI:FUN(Y) PERFORM FUNCTION * JMP R:RE12 DISPATCH END TITL INTRACOMM INPUT PROCESS - 93702-21E000 BOX LK:READ,-,EOB,ROUTINE,AFTER,HEADER,READ * X=CIB NAM LK:READ EXTR R:SSIG EXTR R:RE12 EXTR LK:CRC EXTR LK:BCC EXTR LK:IDL * INT: REL SHARABLE INT: ROMMABLE INT: LK:READ EQU $ COPY =0,A COPY A,CI:TIM(X) COPY X,Y CIB ADDRESS IN X, PUT IN A AND Y COPY X,A JSK *CI:STA(Y) OBTAIN HARDWARE STATUS COPY CI:IBF(Y),X BUFFER ADDRESS JNE A,LK:READ2 * COPY =0,A SB FLAG COPY =6,Q BYTE COUNT FOR CRC CALC ON HEADER JSK LK:CRC CALCULATE CRC XOR HDR:4(X),A COMPARE TRANSMITTED WITH CALCULATED CRC JEQ A,LK:READ3 COPY =HCRC:,A LOAD ERROR CODE * LK:READ2 EQU $ COPY A,HDR:5(X) STORE STATUS AT END OF BUFFER * COPY Y,X ADD =CI:CSM,X SIGNAL INPUT ACTIVITY JSK R:SSIG JMP R:RE12 DISPATCH TITL * LK:READ3 EQU $ COPY HDR:1(X),Q LOAD SYNC CHARACTER SHIFT Q,RO,8 ISOLATE IN RIGHT BYTE CLSN =ENQ,Q A CONTROL MESSAGE? JMP LK:READ2 * * START INPUT ON DATA BLOCK * COPY X,CI:HDR(Y) SAVE ADDRESS OF HEADER BLOCK FOR STATUS USE COPY HDR:1(X),A EXTRACT BYTE COUNT FROM HEADER AND =:FF,A SHIFT A,LO,6 SAVE 8 MSB COPY HDR:2(X),Q SHIFT Q,RO,10 SAVE 6 LSB OR A,Q COPY Q,CI:ICT(Y) STORE COUNT FOR DRIVER COPY =BUF:,A COPY CI:TIB(Y),X GET READ TIB ADDRESS JEQ X,LK:READ4 IDLE IF NO INPUT BUFFER COPY =SIZ:,A COPY Q,TI:ACT(X) STORE ACTUAL BYTE COUNT CSK Q,TI:BCT(X) COMPARE WITH BUFFER SIZE JMP $+2 COUNT LESS THAN BUFFER JMP LK:READ4 GREATER THAN BUFFER, SO IDLE * COPY TI:BUF(X),A COPY A,CI:IBF(Y) TRANSFER BUFFER ADDRESS TO DRIVER COPY TI:SB(X),A TRANSFER SB BIT TO DRIVER COPY A,CI:SB(Y) COPY =LK:BCC,A NEW EOB ROUTINE COPY A,CI:EOB+3(Y) COPY CI:DTC(Y),A NEG A,A COPY A,CI:TIM(Y) * COPY Y,A JSK *CI:FUN(Y) START INPUT JMP R:RE12 TITL * * SET DRIVER TO IDLE FOR COUNT + 2 BYTES * LK:READ4 EQU $ COPY CI:HDR(Y),X GET HEADER BLOCK ADDRESS COPY A,HDR:5(X) ERROR CODE TO END OF HEADER BUFFER ADD =2,Q ADD 2 BYTES FOR BCC CHARACTERS COPY Q,CI:ICT(Y) COPY =L:IDL,A SET IDLE FUNCTION CODE COPY A,CI:FC(Y) COPY =LK:IDL,A SET UP NEW END OF BLOCK ROUTINE COPY A,CI:EOB+3(Y) COPY CI:ITC(Y),A NEG A,A COPY A,CI:TIM(Y) * COPY Y,A JSK *CI:FUN(Y) JMP R:RE12 DISPATCH END TITL INTRACOMM INPUT PROCESS - 93702-21E000 BOX LK:BCC,-,EOB,AFTER,DATA,BLOCK NAM LK:BCC EXTR LK:EOB EXTR R:SSIG EXTR R:RE12 * INT: REL SHARABLE INT: ROMMABLE INT: LK:BCC EQU $ COPY =0,A COPY A,CI:TIM(X) COPY X,Y COPY X,A JSK *CI:STA(Y) CHECK STATUS FOR LAST OPERATION JNE A,LK:BCC2 * * SET UP INPUT FOR CRC-16 * COPY CI:TIB(Y),X ADDRESS OF TIB ADD =TI:CRC,X ADDRESS OF CRC BUFFER COPY X,CI:IBF(Y) COPY =2,A TWO BYTE READ COPY A,CI:ICT(Y) GIVE TO DRIVER COPY =0,A COPY A,CI:SB(Y) LEFT BYTE COPY =LK:EOB,A COPY A,CI:EOB+3(Y) STORE END OF BCC EOB ROUTINE ADDRESS COPY CI:CTC(Y),A NEG A,A COPY A,CI:TIM(Y) * COPY Y,A JSK *CI:FUN(Y) START INPUT JMP R:RE12 DISPATCH * LK:BCC2 EQU $ COPY CI: HDR(Y),X OR =:30,A ADD DATA ERROR CLASS COPY A,HDR:5(X) STORE STATUS * COPY Y,X ADD =CI:CSM,X JSK R:SSIG SIGNAL INPUT ACTIVITY JMP R:RE12 DISPATCH END TITL INTRACOMM INPUT PROCESS - 93702-21E000 BOX LK:EOB,-,EOB,AFTER,BLOCK,CHECK,CHRACTERS *  X=CIB NAM LK:EOB EXTR R:RE12 EXTR R:SSIG * INT: REL SHARABLE INT: ROMMABLE INT: LK:EOB EQU $ COPY =0,A COPY A,CI:TIM(X)  COPY X,Y COPY X,A JSK *CI:STA(Y) CHECK STATUS OF LAST FUNCTION JEQ A,LK:EOB2 OR =:30,A ADD DATA ERROR CLASS * LK:EOB2 EQU $ COPY CI:HDR(Y),X ADDRESS OF ASSOCIATED HEADER BUFFER COPY A,HDR:5(X) LEAVE STATUS AT END OF HEADER * COPY Y,X ADD =CI:CSM,X JSK R:SSIG JMP R:RE12 END TITL INTRACOMM INPUT PROCESS - 93702-21E000 BOX LK:IDL,-,EOB,AFTER,IDLE,FUNCTION * X=CIB * NAM LK:IDL EXTR R:SSIG EXTR R:RE12 * INT: REL SHARABLE INT: ROMMABLE INT: LK:IDL EQU $ COPY X,Y COPY Y,A JSK *CI:STA(Y) * COPY Y,X ADD =CI:CSM,X SIGNAL INPUT PROCESS JSK R:SSIG JMP R:RE12 END TITL INTRACOMM INPUT PROCESS - 93702-21E000 BOX LK:ID,-,IDENTIFY,TYPE,OF,HEADER * * * A=ON EXIT * 0 DATA * 1 STRT * 2 STACK * 3 ACK * 4 NAK * 5 REP * 6 LOAD * * * JSK LK:ID * ERROR RETURN * NORMAL RETURN * NAM LK:ID EXTR H:DUMP * INT: REL SHARABLE INT: ROMMABLE INT: LK:ID EQU $ COPY *LC:PRI(Y),A FIRST WORD OF OF HEADER COPY =6,X INITIALIZE TYPE * LK:ID01 EQU $ COPY A,Q MOVE HEADER TO Q XNX X XOR TYPE,Q COMPARE WITH TYPE IN TABLE XNX X AND MASK,Q MASK OFF INSIGNIFICANT BITS JEQ Q,LK:ID02 COMPARE EQUAL JNED X,LK:ID01 RSK ERROR RETURN * LK:ID02 EQU $ COPY X,A CODE TO A REG JSK H:DUMP IMS *LC:MSG(X,Y) LOG TYPE OF MESSAGE RECEIVED NOP * COPY K,X INDEX STACK IMS 0(X) NORMAL RETURN RSK * TYPE EQU $ WORD ENQ%8++STRTTYPE WORD ENQ%8++STCKTYPE WORD ENQ%8++REPTYPE WORD ENQ%8++NAKTYPE WORD ENQ%8++ACKTYPE WORD SOH%8 WORD ENQ%8++LOADTYPE ***** * MASK EQU $ WORD :FFFF WORD :FFFF WORD :FFFF WORD :FFFF WORD :FFFF WORD :FF00 WORD :FFFF ***** END TITL INTRACOMM INPUT PROCESS - 93702-21E000 TITL NAM H:DUMP * INT: REL SHARABLE INT: ROMMABLE INT: H:DUMP EQU $ RSK JF SS,$+4 COPY A,Q ADD =:30,Q OUT Q,:F8 RSK END TITL INTRACOMM INPUT PROCESS - 93702-21E000 BOX LK:INM1H,-,INPUT,PROCESS,LINK,MANAGEMENT,-,HDX,-,PART,1 * * Y=LCB * NAM LK:INM1H EXTR R:ISIG,R:IWAI EXTR LK:PFR * INT: REL SHARABLE INT: ROMMABLE INT: LK:INM1H EQU $ COPY LC:PFG(Y),A TEST FOR SELECTION OF THIS STATION TBIT PF:SEL,A JT OV,INM1H1 CONTINUE IF NOT * COPY LC:PSM(Y),X RELEASE PROTOCOL DATABASE JSK R:ISIG JMP INM1H2 * * THIS STATION SELECTED, STOP TIMER START OUTPUT * INM1H1 EQU $ COPY =0,A COPY A,*LC:INSM(Y) SINGLE SIGNAL SEMAPHORE COPY LC:ICIB(Y),X * COPY LC:PFG(Y),A TEST FOR REPLY TIMER EXPIRATION TBIT PF:TIM,A IS TIMER RUNNING JF OV,$+2 SBIT PF:REP,A YES, SET SREP COPY A,LC:PFG(Y) * COPY LC:PSM(Y),X RELEASE PROTOCOL DATABASE JSK R:ISIG * COPY LC:OUSM(Y),X START OUTPUT PROCESS JSK R:ISIG * COPY LC:INSM(Y),X WAIT FOR END OF SELECTION JSK R:IWAI * INM1H2 EQU $ * * RESTART SELECTION TIMER * COPY LC:ICIB(Y),X ADDRESS OF INPUT CIB JSK LK:PFR RESET TO FLAG, TIMER, COMPLETION SEMAPHORE JMP INM1H3 POWERFAIL DETECTED * COPY LC:TIM(Y),A SELECTION INTERVAL COPY LC:ICIB( Y),X COPY A,CI:TIM(X) START TIMER COPY =0,A COPY A,CI:CSM(X) * INM1H3 EQU $ RSK END TITL INTRACOMM INPUT PROCESS - 93702-21E000 BOX LK:INM2H,-,INPUT,LINK,MANAGEMENT,-,HDX,-,PART,2 * Y=LCB NAM LK:INM2H * INT: REL SHARABLE INT: ROMMABLE INT: LK:INM2H EQU $ COPY LC:PFG(Y),A ON EXPIRATION OF HARDWARE TIMER SBIT PF:SEL,A FORCE SELECTION OF THIS STATION COPY A,LC:PFG(Y) RSK END TITL INTRACOMM INPUT PROCESS - 93702-21E000 BOX LK:INM1F,-,INPUT,PROCESS,LINK,MANAGEMENT,-,FDX,-,PART,1 * Y=LCB * NAM LK:INM1F EXTR R:ISIG EXTR LK:TIB * INT: REL SHARABLE INT: ROMMABLE INT: LK:INM1F EQU $ COPY LC:ICIB(Y),X ADDRESS OF INPUT CIB COPY LC:PFG(Y),A TBIT PF:TON,A REQUEST TO TURN ON REPLY TIMER? JF OV,INM1F1 * COPY LC:TIM(Y),Q COPY Q,CI:TIM(X) TURN ON REPLY TIMER RBIT PF:TON,A RESET TIMER REQUEST * INM1F1 EQU $ TBIT PF:TOF,A REQUEST TO TURN OFF REPLY TIMER JF OV,INM1F2 * COPY =0,Q COPY Q,CI:TIM(X) STOP TIMER RBIT PF:TOF,A RESET REQUEST * INM1F2 EQU $ COPY A,LC:PFG(Y) UPDATE PROTOCOL FLAGS * TBIT PF:BSY,A IS OUTPUT ACTIVITY IDLE JF OV,INM1F4 * AND =CTLFG,A ARE ANY CONTROL MESSAGE REQUESTS OUTSTANDING JNE A,INM1F3 * COPY LC:T(Y),A CHECK FOR DATA MESSAGES TO SEND JSK LK:TIB DOES MSG T REMAIN IN QUEUE JMP INM1F4 NO * INM1F3 EQU $ COPY LC:OCIB(Y),X ADD =CI:CSM,X START UP OUTPUT ACTIVITY JSK R:ISIG * INM1F4 EQU $ COPY LC:PSM(Y),X RELEASE PROTOCOL DATABASE JSK R:ISIG * RSK * CTLFG MASK PF:NAK,PF:ACK,PF:REP,PF:STRT,PF:STAK END TITL INTRACOMM INPUT PROCESS - 93702-21E000 BOX LK:INM2F,-,INPUT,PROCESS,LINK,MANAGEMENT,-,FDX,-,PART,2 * Y=LCB NAM LK:INM2F * INT: REL SHARABLE INT: ROMMABLE INT: LK:INM2F EQU $ COPY LC:PFG(Y),A SBIT PF:REP,A SET SREP COPY A,LC:PFG(Y) RSK END REMAIN IN QUEUE JMP INM1F4 NO * INM1F3 EQU $ COPY LC:OCIB(Y),X ADD =CI:CSM,X START UP OUTPUT ACTIVITY JSK R:ISIG * INM1F4 EQU $ COPY LC:PSM(Y),X RELEASE PROTOCOL DATABASE JSK R:ISIG * RSK * CTLFG MASK PF:NAK,PF:ACK,PF:REP,PF:STRT,PF:STAK END TITL INTRACOMM INPUT PROCESS - 93702-21E000 BOX LK: TITL INTRACOMM OUTPUT PROCESS - 93702-22E000 TBOX LK:OUT,-,INTRACOMM,OUTPUT,ACTIVITY * Y=LCB NAM LK:OUT EXTR LK:MSG  EXTR I:EOB EXTR R:END EXTR LK:HOT EXTR LK:SND EXTR LK:RTON EXTR LK:CLACK EXTR LK:CACK2 EXTR LK:SACK EXTR R:ISIG EXTR R:IWAI EXTR R:END * INT: REL SHARABLE INT: ROMMABLE INT: LK:OUT EQU $ JSK *LC:OTM1(Y) OUTPUT LINK MANAGEMENT * COPY LC:PFG(Y),A TEST FOR ABORT TBIT PF:ABT,A JF OV,$+2 JMP LK:OUT90 ABORT!!! * RBIT PF:BSY,A OUTPUT ACTIVITY NO LONGER IN IDLE STATE COPY A,LC:PFG(Y) * JSK LK:MSG DETERMINE WHICH CONTROL MSG TO WRITE JMP LK:OUT70 NO CONTROL MESSAGE * COPY LC:HDR(Y),X ADDRESS OF OUTPUT HEADER BUFFER * XNX A JMP *$+1 WORD LK:OUT20 STACK WORD LK:OUT10 STRT WORD LK:OUT40 REP WORD LK:OUT50 NAK * TBOX LK:OUT10,-,SEND,START,MESSAGE * LK:OUT10 EQU $ COPY =ENQ%8++STRTTYPE,A CONTROL + MESSAGE TYPE COPY A,HDR:1(X) COPY =1%SEL,A SELECT OTHER STATION COPY A,HDR:2(X) COPY =FILL,A COPY A,HDR:3(X) * JMP LK:OUT61 TBOX LK:OUT20,-,SEND,START,ACKNOWLEDGE * LK:OUT20 EQU $ COPY =ENQ%8++STCKTYPE,A CONTROL + MESSAGE TYPE COPY A,HDR:1(X) COPY =1%SEL,A SELECT OTHER STATION COPY A,HDR:2(X) COPY =FILL,A COPY A,HDR:3(X) * JMP LK:OUT61 TBOX LK:OUT30,-,SEND,ACK EXTR LK:THC * LK:OUT30 EQU $ COPY LC:HDR(Y),X ADD RESS OF HEADER BLOCK COPY =ENQ%8++ACKTYPE,A CONTROL + MESSAGE TYPE COPY A,HDR:1(X) COPY LC:R(Y),A SEND HIGHEST MSG NO. REC'D FOR ACK COPY A,HDR:2(X) COPY =FILL,A COPY A,HDR:3(X) JSK LK:CLACK RESET SACK FLAG * COPY =1,A ACK SENT JSK LK:THC CLEAR ERROR COUNTS JMP LK:OUT60 TBOX LK:OUT40,-,SEND,REP,MSG LK:OUT40 EQU $ COPY =ENQ%8++REPTYPE,A CONTROL + MESSAGE TYPE COPY A,HDR:1(X) COPY =FILL,A COPY A,HDR:2(X) COPY LC:N(Y),A SEND HIGHEST MSG. NO. SENT TO GENERATE ACK ROTATE A,L,8 COPY A,HDR:3(X)  JSK LK:RTON START SELECT TIMER * JMP LK:OUT60 TBOX LK:OUT50,-,SEND,NAK LK:OUT50 EQU $ COPY =ENQ%8++NAKTYPE,A CONTROL + MESSAGE TYPE COPY A,HDR:1(X) COPY LC:RSN(Y),A REASON FOR NAK SHIFT A,LO,10 OR LC:R(Y),A HIGHEST MSG. NO RECEIVED COPY A,HDR:2(X) COPY =FILL,A COPY A,HDR:3(X) * JMP LK:OUT60 TBOX LK:OUT60,-,SEND,CONTROL,MESSAGE LK:OUT60 EQU $ COPY LC:PFG(Y),A CHECK FOR ANY REMAINING CONTROL MESSAGES AND =CTLFG,A MASK OFF OTHER BITS JNE A,LK:OUT61 SKIP SELECT SET IF ANY SET COPY HDR:2(X),A SBIT SEL,A SET SELECT FLAG COPY A,HDR:2(X) * LK:OUT61 EQU $ COPY LC:PFG(Y),A ***** TBIT PF:MAINT,A *****IS LINK IN MAINTENANCE MODE? JF OV,$+4 *****NO-JUMP COPY HDR:2(X),A *****YES-MUST SET MAINTMSG BIT IN HEADER SBIT MAINTMSG,A ***** COPY A,HDR:2(X) ***** JSK LK:CACK2 CANCEL IDLE ACK AFTER ANY 'REAL' CONTROL MSG COPY LC:PSM(Y),X UNLOCK PROTOCOL DATABASE JSK R:ISIG JSK LK:HOT SET UP HEADER OUTPUT COPY LC:OCIB(Y),X COPY CI:HTC(X),Q SET UP TIMER VALUE JSK LK:SND SEND CONTROL MESSAGE JMP LK:OUT95 ERROR JMP LK:OUT START OVER * CTLFG MASK PF:ACK,PF:NAK,PF:REP LPOOL TBOX LK:OUT70,-,SEND,DATA,MESSAGE,-,PREPARE,HEADER EXTR LK:TIB EXTR LK:THC * LK:OUT70 EQU $ COPY LC:T(Y),A GET NUMBER OF NEXT MESSAGE JSK LK:TIB LOCATE ASSOCIATED TIB JMP LK:OUT80 NO DATA MESSAGES COPY X,LC:WTIB(Y) SAVE TIB ADDRESS * COPY TI:BCT(X),A MESSAGE BYTE COUNT COPY A,Q SAVE REST OF COUNT SHIFT A,RO,6 OR =SOH%8,A ADD CONTROL CHARACTER COPY A,*LC:HDR(Y) DATA + COUNT(8MSB) COPY TI:NUM(X),A LOAD MESSAGE NUMBER * COPY LC:HDR(Y),X ADDRESS OF HEADER BUFFER SHIFT Q,LO,10 OR LC:R(Y),Q SBIT SEL,Q SELECT OTHER STATION COPY Q,HDR:2(X) COUNT (6LSB) + RESP COPY LC:PFG(Y),Q ***** TBIT PF:MAINT,Q *****IS LINK IN MAINTENANCE MODE? JF OV,$+4  *****NO-JUMP COPY HDR:2(X),Q *****YES-MUST SET MAINTMSG BIT IN HEADER SBIT MAINTMSG,Q ***** COPY Q,HDR:2(X) ***** * SHIFT A,LO,8 COPY A,HDR:3(X) MESSAGE NUMBER * COPY LC:R(Y),A GET HIGHEST MESSAGE NUMBER RECEIVED JEQ A,$+3 IF ZERO, NO ACK SENT COPY =1,A ACK SENT JSK LK:THC CLEAR ERROR COUNTS TBOX LK:OUT70,-,UPDATE,PROTOCOL,DATABASE JSK LK:CLACK RESET SACK FLAG * COPY LC:T(Y),A COPY A,LC:X(Y) X <- T * COPY LC:N(Y),Q IF T=N+1 ADD =1,Q AND =:FF,Q XOR A,Q JNE Q,$+2 COPY A,LC:N(Y) N <- N + 1 * ADD =1,A AND =:FF,A COPY A,LC:T(Y) T <- T + 1 * JSK LK:RTON TURN ON REPLY TIMER JSK LK:CACK2 CANCEL IDLE ACK AFTER ANY DATA MSG * COPY LC:PSM(Y),X RELEASE PROTOCOL DATABASE JSK R:ISIG * JSK LK:HOT PREPARE HEADER FOR OUTPUT COPY LC:OCIB(Y),X COPY CI:HTC(X),Q SET UP TIMER VALUE JSK LK:SND SEND BUFFER JMP LK:OUT95 ON WRITE ERROR * TBOX LK:OUT70,-,SEND,DATA,BLOCK COPY LC:WTIB(Y),X COPY TI:SB(X),A GET SB BIT SHIFT A,RO,1 SAVE SB IN OV COPY TI:BUF(X),A GET BUFFER ADDRESS COPY TI:BCT( X),Q GET BYTE COUNT * COPY LC:OCIB(Y),X POINT TO OUTPUT CIB COPY Q,CI:ICT(X) STORE COUNT COPY A,CI:IBF(X) BUFFER ADDRESS COPY =0,A SB BIT ROTATE A,LO,1 RESTORE FROM OV COPY A,CI:SB(X) STORE IN CIB * COPY CI:DTC(X),Q SET UP DATA TIMER JSK LK:SND WRITE DATA BUFFER JMP LK:OUT95 ON WRITE ERROR * TBOX LK:OUT70,-,SEND,CRC COPY LC:OCIB(Y),X COPY LC:WTIB(Y),A GET TIB OF REQUESTING ACTIVITY ADD =TI:CRC,A CRC CALCULATED BY ACTIVITY COPY A,CI:IBF(X) COPY =2,A 2 BYTE CRC COPY A,CI:ICT(X) COPY =0,A SB BIT COPY A,CI:SB(X) * COPY CI:CTC(X),Q SET UP CRC TIMER JSK LK:SND SEND CRC BUFFER JMP LK:OUT95 * JMP LK:OUT TBOX LK:OUT80,-,NO,MESSAGE,ACTIVITY LK:OUT80 EQU $ COPY LC:PFG(Y),A CHECK FOR ACK REQUEST TBIT PF:ACK,A JF OV,$+2 JMP LK:OUT30 SEND ACK TBIT PF:ACK2,A CHECK FOR 'IDLE' ACK JF OV,$+2 JMP LK:OUT30 SEND ACK * * NO MESSAGE TRAFFIC * SBIT PF:BSY,A MARK OUTPUT TASK IN IDLE OR BUSY STATE SBIT PF:ACK2,A SEND 'IDLE' ACK AFTER DELAY COPY A,LC:PFG(Y) * COPY LC:ITIM(Y),A GET IDLE TIMER VALUE COPY LC:OCIB(Y),X ADDRESS OF OUTPUT CIB COPY A,CI:TIM(X) START TIMER COPY =0,A COPY A,CI:CSM(X) CLEAR SEMAPHORE * COPY LC:PSM(Y),X RELEASE PROTOCOL DATABASE JSK R:ISIG * COPY LC:OCIB(Y),X ADD =CI:CSM,X JSK R:IWAI WAIT FOR TIMER TO EXPIRE * COPY LC:OCIB(Y),X STOP TIMER COPY =0,A COPY A,CI:TIM(X) * JMP LK:OUT TBOX LK:OUT90,-,ABORT,PROTOCOL * LK:OUT90 EQU $ COPY LC:CLC(Y),Q LOAD REASON FOR THIS ABORT * RETURN STATUS TO OUTPUT TIB QUEUE LK:OUT91 COPY LC:OUTQ(Y),X QUEUE OF OUTPUT TIBS JEQ X,LK:OUT93 IF NOT ANY COPY TI:LNK(X),A STORE NEXT ENTRY COPY A,LC:OUTQ(Y) AS LIST HEAD COPY Q,TI:SOF(X) REASON CODE TO TIB STATUS ADD =TI:WAI,X JSK R:ISIG START HIM UP JMP LK:OUT91 REPEAT * RETURN STATUS TO READ TIB LK:OUT93 COPY LC:RTIB(Y),X TIB ADR OF READ REQUEST JEQ X,LK:OUT94 IF NO READ REQUEST, SKIP COPY Q,TI:SOF(X) REPORT ABORT REASON IN TIB ADD =TI:WAI,X JSK R:ISIG START HIM UP * COPY LC:RSM(Y),X ALLOW WAITING READ ACTIVITIES TO CLEAR THEMSELVES JSK R:ISIG * LK:OUT94 COPY LC:OPTI(Y),X SIGNAL OPEN/CLOSE ACCESS MANAGER JEQ X,LK:OUT92 COPY Q,TI:SOF(X) REPORT ABORT REASON TO TIB ADD =TI:WAI,X JSK R:ISIG * LK:OUT92 EQU $ COPY LC:INSM(Y),X SIGNAL INPUT ACTIVITY (EFFECTIVE HDX ONLY) JSK R:ISIG * COPY LC:PSM(Y),X RELEASE PROTOCOL DATABASE JSK R:ISIG * JSK R:END DELETE THIS INSTANCE OF OUTPUT ACTIVITY TBOX LK:OUT95,-,ERROR,ON,OUTPUT EXTR LK:TAB * LK:OUT95 EQU $ JSK LK:TAB TEST FOR ABORT JMP LK:OUT THRESHOLD ERROR, TAKE STANDARD ABORT! JMP LK:OUT END TITL INTRACOMM OUTPUT PROCESS - 93702-22E000 BOX LK:OTM1H,-,OUTPUT,PROCESS,LINK,MANAGEMENT,-,HDX,-,PART,1 * * Y=LCB * NAM LK:OTM1H EXTR R:ISIG,R:IWAI EXTR LK:SND * INT: REL ROMMABLE INT: SHARABLE INT: LK:OTM1H EQU $ COPY LC:OCIB(Y),X COPY =0,A COPY A,CI:TIM(X) COPY LC:PFG(Y),A TEST SELECT FLAG TBIT PF:SEL,A JT OV,OTM1H2 CONTINUE IF STILL SELECTED * * SELECTION ENDED * * SEND PAD CHARACTERS * COPY LC:PAD(Y),A GET NUMBER OF PAD CHARACTERS JEQ A,OTM1H1 BYPASS IF ZERO COUNT COPY LC:OCIB(Y),X ADDRESS OF OUTPUT CIB COPY A,CI:ICT(X) GIVE COUNT TO DRIVER COPY LC:HDR(Y),A ADDRESS OF HEADER BLOCK SUB =4,A ADDRESS OF DELS COPY A,CI:IBF(X) GIVE BUFFER ADDRESS TO DRIVER COPY =0,A COPY A,CI:SB(X) START WITH LEFT BYTE * COPY CI:PTC(X),Q SET UP TIMER FOR PAD CHARACTE RS JSK LK:SND OUTPUT NOP ERROR COPY =0,A COPY A,CI:TIM(X) * OTM1H1 EQU $ COPY =0,A COPY A,*LC:OUSM(Y) SINGLE SIGNAL SEMAPHORE * COPY LC:INSM(Y),X START INPUT PROCESS JSK R:ISIG * COPY LC:OUSM(Y),X WAIT FOR SELECTION JSK R:IWAI * OTM1H2 EQU $ COPY LC:PSM(Y),X LOCK PROTOCOL DATABASE JSK R:IWAI RSK LPOOL END TITL INTRACOMM OUTPUT PROCESS - 93702-22E000 BOX LK:OTM1F,-,OUTPUT,PROCESS,LINK,MANAGEMENT,-,FDX,-,PART,1 * Y=LCB NAM LK:OTM1F EXTR R:IWAI * INT: REL SHARABLE INT: ROMMABLE INT: LK:OTM1F EQU $ COPY LC:PSM(Y),X LOCK PROTOCOL DATABASE JSK R:IWAI * COPY LC:PFG(Y),A CHECK REQUEST TO TURN ON REPLY TIMER TBIT PF:TON,A JF OV,OTM1F2 * RBIT PF:TON,A COPY A,LC:PFG(Y) RESET REQUEST * COPY LC:ICIB(Y),X ADDRESS OF INPUT CIB (LOCATION OF REPLY TIMER) COPY LC:TIM(Y),A GET TIMER VALUE SIN 2 COPY CI:TIM(X),Q GET CURRENT VALUE JNE Q,$+2 DON'T RESET IF ALREADY RUNNING COPY A,CI:TIM(X) SET TIMER IF NOT RUNNING * OTM1F2 EQU $ RSK END TITL INTRACOMM OUTPUT PROCESS - 93702-22E000 BOX LK:HOT,-,CALCULATE,CRC,AND,SET,UP,HEADER,I/O * NAM LK:HOT EXTR LK:SND EXTR LK:CRC EXTR LK:OSEL EXTR I:EOB * INT: REL SHARABLE INT: ROMMABLE INT: LK:HOT EQU $ COPY LC:HDR(Y),X OUTPUT HEADER BUFFER COPY =6,Q BYTE COUNT FOR HEADER COPY =0,A START WITH LEFT BYTE JSK LK:CRC COPY A,HDR:4(X) STORE IN HEADER BUFFER * COPY LC:OCIB(Y),X ADDRESS OF OUTPUT CIB * COPY LC:DELS(Y),A NUMBER OF PRECEEDING DELS ADD =8,A ADD NUMBER BYTES IN HEADER COPY A,CI:ICT(X) GIVE COUNT TO DRIVER * COPY LC:DELS(Y),A LOAD NUMBER OF EXTRA BYTES COPY =0,Q SHIFT A,RO,1 MAKE WORD COUNT JF OV,$+2 CHECK FOR ODD COUNT ADD =1,A ROTATE Q,LO,1 SHIFT ODD COUNT TO SB NEG A,A ADD LC:HDR(Y),A NEW BUFFER ADDRESS COPY A,CI:IBF(X) COPY Q,CI:SB(X) * COPY =L:WR,A COPY A,CI:FC(X) WRITE FUNCTION CODE COPY =I:EOB,A COPY A,CI:EOB+3(X) END OF BLOCK * JSK LK:OSEL CHECK FOR SELECT SENT RSK END TITL INTRACOMM OUTPUT PROCESS - 93702-22E000 BOX LK:SND,-,SEND,BUFFER * * Y=LCB * Q=TIMER VALUE (POSITIVE) * NAM LK:SND EXTR LK:PFR EXTR LK:CST EXTR LK:THX EXTR R:ISIG EXTR R:IWAI * INT: REL SHARABLE INT: ROMMABLE INT: LK:SND EQU $ COPY LC:OCIB(Y),X ADDRESS OF OUTPUT CIB JSK LK:PFR POWERFAIL RESET JMP LK:SND10 POWERFAIL * COPY LC:OCIB(Y),X NEG Q,Q COPY Q,CI:TIM(X) START TIMER COPY X,A COPY CI:FUN(X),X JSK 0(X) PERFORM FUNCTION * COPY LC:OCIB(Y),X ADD =CI:CSM,X JSK R:IWAI WAIT FOR COMPLETION * COPY LC:OCIB(Y),X ADDRESS OF OUTPUT CIB COPY =0,Q COPY Q,CI:TIM(X) JSK LK:CST CHECK FLAGS JMP LK:SND10 ABNORMAL * COPY LC:OCIB(Y),X ADDRESS OF OUTPUT CIB COPY X,A COPY CI:STA(X),X ADDRESS OF STATUS CALL JSK 0(X) GET HARDWARE STATUS JNE A,LK:SND10 * COPY K,X IMS 0(X) NORMAL RETURN * LK:SND10 EQU $ COPY LC:PSM(Y),X JSK R:IWAI LOCK PROTOCOL DATABASE COPY A,X JSK LK:THX MONITOR ERROR COPY LC:PSM(Y),X JSK R:ISIG UNLOCK PROTOCOL DATABASE RSK ERROR RETURN END TITL INTRACOMM OUTPUT PROCESS - 93702-22E000 BOX LK:MSG,-,ANALYZE,PROTOCOL,FLAGS,FOR,NEXT,MESSAGE NAM LK:MSG * A=MESSAGE CODE ON RETURN * INT: REL  SHARABLE INT: ROMMABLE INT: LK:MSG EQU $ COPY LC:PFG(Y),A COPY =3,X * LK:MSG01 EQU $ XNX X COPY BIT,Q LOAD BIT TO TEST SHIFT Q,LO,4 SHIFT TO K4 XNX Q TBIT 0,A JT OV,LK:MSG02 JNED X,LK:MSG01 RSK * LK:MSG02 EQU $ XNX Q RESET THE BIT RBIT 0,A C OPY A,LC:PFG(Y) * COPY X,A GET CODE FOR THIS BIT COPY K,X IMS 0(X) RSK * BIT EQU $ WORD PF:STAK WORD PF:STRT WORD PF:REP  WORD PF:NAK END TITL INTRACOMM OUTPUT PROCESS - 93702-22E000 BOX LK:OSEL,-,RESET,SELECT,FLAG,WHEN,OTHER,STATION,SELECTED *  Y=LCB NAM LK:OSEL * INT: REL SHARABLE INT: ROMMABLE INT: LK:OSEL EQU $ COPY LC:HDR(Y),X COPY HDR:2(X),A TBIT SEL,A  JT OV,$+2 RSK * COPY LC:PFG(Y),A RBIT PF:SEL,A COPY A,LC:PFG(Y) RSK END TITL INTRACOMM OUTPUT PROCESS - 93702-22E000 BOX LK:CLACK,-,CLEAR,SACK FLAG * Y=LCB * NAM LK:CLACK * INT: REL SHARABLE INT: ROMMABLE INT: LK:CLACK EQU $ COPY LC:PFG(Y),A RBIT PF:ACK,A COPY A,LC:PFG(Y) RSK END TITL INTRACOMM OUTPUT PROCESS - 93702-22E000 BOX LK:CACK2,-,CLEAR,ACK2,-,'IDLE',-,ACK,FLAG * Y=LCB NAM LK:CACK2 * INT: REL SHARABLE INT: ROMMABLE INT: LK:CACK2 EQU $ COPY LC:PFG(Y),A RBIT PF:ACK2,A COPY A,LC:PFG(Y) RSK END A RBIT PF:SEL,A COPY A,LC:PFG(Y) RSK END TITL INTRACOMM OUTPUT PROCESS - 93702-22E000 BO TITL INTRACOMM DOWN-LINE LOAD - 93702-23E000 NAM DLL: ABS 0 INIOB RES 1 DEFINE INPUT IOB OFFSET OUTIOB RES 1 DEFINE OUTPUT IOB OFFSET ABS 0 LREG RES 1 DEFINE 'PUSH' REGISTER OFFSETS SREG RES 1 AREG RES  1 QREG RES 1 XREG RES 1 YREG RES 1 PREG RES 1 SPACE 2 INT: REL SHARABLE INT: ROMMABLE INT: DLL: PUSH XA:V SAVE PARAMETERS COPY X,Y * COPY =IO:BUF,X COPY *INIOB(X,Y),A COPY A,OUTIOB(X,Y) USE INPUT BUFFER AS OUTPUT BUFFER ALSO * COPY =FU:%4+OM:,A COPY =IO:FC,X COPY A,OUTIOB(X,Y) STORE FUNCTION CODE IN IOB I:IO OUTIOB(Y) OPEN THE LINK (MAINT. MODE) JMP OP:ERR IF ERROR, REPORT IT OPNERR COPY =WR:%4+MD:,A COPY =IO:FC,X COPY A,OUTIOB(X,Y) XFER I:IO *INIOB(Y) READ A RECORD FROM THE DISC JMP  RD:ERR IF ERROR, GO PROCESS (MAY BE EOF) NORERR COPY =IO:ACT,X COPY *INIOB(X,Y),A JEQ A,XFER COPY =IO:BCT,X COPY A,OUTIOB(X,Y) I:IO OUTIOB(Y) WRITE A RECORD TO LINK JMP WR:ERR IF ERROR, GO REPORT! JMP XFER * OP:ERR  COPY =IO:ST,X CHECK FOR NULL ERROR COND. COPY OUTIOB(X,Y),A JNE A,EXIT IF NON-ZERO STATUS, RETURN WITH OPEN ERR. JMP OPNERR IF STATUS = 0, NO ERR. * RD:ERR COPY =IO:ST,X CHECK FOR EOF CONDITION COPY *INIOB(X,Y),A LOAD STATUS WORD JEQ A,NORERR IF ZERO, NO READ ERROR! SBIT 15,A MARK AS AN INPUT ERROR!  CLSN =EOF:,A IS IT EOF? COPY =0,A JMP EXIT THEN RETURN TO CALLER! * WR:ERR COPY =IO:ST,X RETURN ERROR CODE IN A-REG COPY OUTIOB(X,Y),A LOAD STATUS WORD JEQ A,XFER IF ZERO, NO WRITE ERROR AFTER ALL! * EXIT COPY K,Y COPY A,AREG(Y) RETURN A TO STACKED A REG. COPY XREG(Y),Y RESTORE USER X-REG TO Y. COPY =IO:FC,X COPY =FU:%4+MC:,A COPY A,OUTIOB(X,Y) SET FUNCTION CODE TO CLOSE/MAINT  I:IO OUTIOB(Y) AND CLOSE LINK NOP --- IGNORING ANY ERRORS POP RSK END :ST,X RETURN ERROR CODE IN A-REG COPY OUTIOB(X,Y),A LOAD STATUS WORD JEQ A,XFER IF ZERO, NO WRITE ERROR AFT ER ALL! * EXIT COPY K,Y COPY A,AREG(Y) RETURN A TO STACKED A REG. COPY XREG(Y),Y RESTORE USER X-REG TO Y. COPY =IO:FC,X COPY =FU:%4+MC:,A COPY A,OUTIOB(X,Y) SET FUNCTION CODE TO CLOSE/MAINT  TITL INTRACOMM COMMON ROUTINES - 93702-24E000 BOX LK:TAB,-,TEST,FOR,ABORT NAM LK:TAB INT: REL SHARABLE INT: ROMMABLE INT: LK:TAB EQU $ * Y=LCB * REG X DESTROYED COPY LC:PFG(Y),X GET PROTOCOL FLAG WORD TBIT PF:ABT,X TEST ABORT BIT JF OV,$+2 RSK ERROR RETURN - ABORT COPY K,X GET STACK IMS 0(X) POINT TO P+2 RSK NORMAL RETURN END TITL INTRACOMM COMMON ROUTINES - 93702-24E000 BOX LK:THX,-,ERROR,MONITOR,AND,CONTROL NAM LK:THX EXTR LK:CLF INT: REL SHARABLE INT: ROMMABLE INT: LK:THX EQU $ * Y=LCB (LOCKED) * X=ERROR CODE (:0 TO :F) * ALL REGISTERS PRESERVED PUSH XA:V SAVE REGISTERS AND =:F,X ENSURE ERROR RANGE :0 TO :F JEQ X,LK:THX1 IGNORE ZERO ERROR (NORMAL) COPY X,A ERROR IN REG A COPY LC:THRSH(Y),Q ADR OF THRESHOLD TABLE COPY LC:ERR(Y),X ADR OF ERROR TABLE ADD A,X POINT TO ERROR COUNTER IMS 0(X) INCREMENT COUNTER NOP NEVER SKIP EXCH X,Q ADR OF THRESHOLD TABLE ADD A,X POINT TO THRESHOLD VALUE COPY 0(X),X OBTAIN VALUE IN REG X * MULTIPLY THRESHOLD VALUE BY WORKING FACTOR IN LCB COPY A,LC:TMP(Y) SAVE REG A IN LCB TEMPORARY COPY =0,A CLEAR REG A MUL LC:WFACT(Y),AX REG X=VALUE * (WORKING FACTOR) COPY LC:TMP(Y),A RESTORE REG A JEQ X,LK:THX1 IF ZERO VALUE, DO NOT TEST COUNTER EXCH X,Q ADR OF COUNTER IN X COPY 0(X),X OBTAIN COUNTER CSM X,Q COMPARE COUNTER TO VALUE JMP LK:THX1 VALUE, ** THRESHOLD ERROR ** SBIT 12,A :1000+ERROR COPY A,LC:CLC(Y) SAVE REASON FOR ABORT COPY Y,X LCB IN REG X JSK LK:CLF MARK THE LINK CLOSED LK:THX1 POP RESTORE REGISTERS RSK END TITL INTRACOMM COMMON ROUTINES - 93702-24E000 BOX LK:THC,-,CLEAR,THRESHOLD,ERROR,COUNTERS NAM LK:THC INT: REL SHARABLE INT: ROMMABLE INT: LK:THC EQU $ * Y=LCB (LOCKED) * A=0 (ACK RECEIVED) OR A=1 (ACK SENT) * ALL REGISTERS PRESERVED * IF A=0 CLEAR WORDS :0-:7 OF THE ERROR TABLE * IF A=1 CLEAR WORDS :8-:F OF THE ERROR TABLE * ZERO THRESHOLD COUNTERS ARE NOT CLEARED PUSH XA:V SAVE REGISTERS COPY =-8,X COUNT OF -8 COPY X,LC:TMP(Y) IN LCB TEMPORARY COPY LC:THRSH(Y),Q ADR OF THRESHOLD TABLE COPY LC:ERR(Y),X ADR OF ERROR TABLE JEQ A,LK:THC0 IF A=0, POINT TO FIRST HALF ADD =8,Q A=1, POINT TO SECOND HALF ADD =8,X OF EACH TABLE LK:THC0 EXCH X,Q ADR OF THRESHOLD TABLE COPY 0(X),A GET THRESHOLD VALUE EXCH X,Q ADR OF ERROR TABLE JEQ A,LK:THC1 IF ZERO VALUE, DO NOT CLEAR ERROR COUNTER COPY =0,A CLEAR ERROR COPY A,0(X) COUNTER LK:THC1 ADD =1,X BUMP ADD =1,Q POINTERS IMS LC:TMP(Y) BUMP COUNT JMP LK:THC0 REPEAT POP RESTORE REGISTERS RSK END TITL INTRACOMM COMMON ROUTINES - 93702-24E000 BOX LK:CLF,-,SET,FLAGS,TO,CLOSE,LINK * X=LCB NAM LK:CLF * INT: REL SHARABLE INT: ROMMABLE INT: LK:CLF EQU $ COPY LC:FLG(X),A RESET OPEN FLAG RBIT LCF:OP,A COPY A,LC:FLG(X) * COPY LC:PFG(X),A SET ABORT FLAG SBIT PF:ABT,A COPY A,LC:PFG(X) RSK END TITL INTRACOMM COMMON ROUTINES - 93702-24E000 BOX LK:CST,-,CHECK,FLAGS,AFTER,COMPLETION,SEMAPHORE NAM LK:CST * Y=LCB * X=CIB *  P=P+1 ERROR RETURN (CODE IN A) * P=P+2 NORMAL RETURN (NO FLAGS SET) * INT: REL SHARABLE INT: ROMMABLE INT: LK:CS T EQU $ COPY LC:PFG(Y),A PROTOCOL FLAG WORD TBIT PF:ABT,A ABORT REQUESTED? JF OV,LK:CST02 JMP IF NOT COPY =ABT:,Q JMP LK:CST06 * LK:CST02 EQU $ COPY CI:FLG(X),A CIB FLAG WORD TBIT CIF:PU,A TEST POWERFAIL JF OV,LK:CST04 JMP IF NOT COPY =POWER:,Q JMP LK:CST06 * LK:CST04 EQU $ TBIT CIF:TO,A TEST TIMER EXPIRED JF OV,LK:CST08 JMP IF NOT COPY =TIMER:,Q * * LK:CST06 EQU $ COPY =L:RST,A RESET FUNCTION COPY A,CI:FC(X) PASS TO DRIVER COPY X,A COPY CI:FUN(X),X ADDRESS OF DRIVER JSK 0(X) PERFORM RESET TO CLEAR INTERRUPTS COPY Q,A RETURN ERROR CODE IN A RSK ERROR RETURN * LK:CST08 EQU $ COPY K,X INDEX STACK IMS 0(X) P=P+2  RSK NORMAL RETURN END TITL INTRACOMM COMMON ROUTINES - 93702-24E000 BOX LK:TIB,-,FIND,TIB,WITH,GIVEN,MESSAGE,NUMBER *  Y=LCB * A=NUM ON ENTRY * X=TIB ADDRESS ON EXIT * NORMAL RETURN P+2 * ERROR RETURN P+1 * NAM LK:TIB * INT: REL SHARABLE INT: ROMMABLE INT: LK:TIB EQU $ COPY LC:OUTQ(Y),X * LK:TIB1 EQU $ JEQ X,LK:TIB2 ERROR - NO MORE ACTIVITIES COPY TI:NUM(X),Q XOR A,Q JEQ Q,$+3 FOUND TIB COPY TI:LNK(X),X JMP LK:TIB1 * COPY X,A COPY K,X INDEX STACK IMS 0(X) NORMAL RETURN COPY A,X TIB ADDRESS * LK:TIB2 EQU $ RSK * END TITL INTRACOMM COMMON ROUTINES - 93702-24E000 BOX LK:SNAK,-,SET,SNAK,FLAG,AND,REASON,CODE * X=LCB * A=REASON CODE ON ENTRY NAM LK:SNAK * INT: REL SHARABLE INT: ROMMABLE INT: LK:SNAK EQU $ COPY A,LC:RSN(X) STORE REASON CODE COPY LC:PFG(X),A SBIT PF:NAK,A SET SNAK RBIT PF:ACK,A CLEAR SACK COPY A,LC:PFG(X) RSK END TITL INTRACOMM COMMON ROUTINES - 93702-24E000 BOX LK:SACK,-,SET,SACK,FLAG * X=LCB NAM LK:SACK * INT: REL SHARABLE INT: ROMMABLE INT: LK:SACK EQU $ COPY LC:PFG(X),A SBIT PF:ACK,A SET SACK RBIT PF:NAK,A CLEAR SNAK COPY A,LC:PFG(X) RSK END TITL INTRACOMM COMMON ROUTINES - 93702-24E000 BOX LK:RTON,-,LK:RTOFF,-,REPLY,TIMER,ON,OR,OFF * Y=LCB NAM LK:RTON NAM LK:RTOFF * INT: REL SHARABLE INT: ROMMABLE INT: LK:RTON EQU $ COPY LC:PFG(Y),A SBIT PF:TIM,A SBIT PF:TON,A TURN ON HARDWARE TIMER COPY A,LC:PFG(Y) RSK * LK:RTOFF EQU $ COPY LC:PFG(Y),A RBIT PF:TIM,A SBIT PF:TOF,A TURN OFF HARDWARE TIMER COPY A,LC:PFG(Y) RSK END TITL INTRACOMM COMMON ROUTINES - 93702-24E000 BOX LK:PFR,-,RESET,COMPLETION,SEMAPHORE,IF,NO,PF * X = CIB ADDRESS * P=P+1 ERROR RETURN IF POWERFAIL (CODE IN A) * P=P+2 NORMAL RETURN * NAM LK:PFR * INT: REL SHARABLE INT: ROMMABLE INT: LK:PFR EQU $ SIN 8 PROTECT FROM POWER FAILURE COPY CI:FLG(X),A LOAD PF FLAG TBIT CIF:PU,A JT OV,LK:PFR2 RBIT CIF:TO,A RESET TIME OUT COPY A,CI:FLG(X) COPY =0,A COPY A,CI:CSM(X) CLEAR SEMAPHORE COPY A,CI:CFL(X) CLEAR COMPLETION FLAG COPY A,CI:TIM(X) STOP TIMER COPY K,X INDEX STACK IMS 0(X) NORMAL RETURN RSK * LK:PFR2 EQU $ COPY =POWER:,A ERROR RETURN SIN 1 RSK END TITL INTRACOMM COMMON ROUTINES - 93702-24E000 BOX LK:DTIMO/LK:DTIMI,-,CALCULATE,DATA,TIMER * Y=TIB * NAM LK:DTIMO NAM LK:DTIMI * INT: REL SHARABLE INT: ROMMABLE INT: LK:DTIMO EQU $ COPY TI:FCB(Y),X COPY LC:OCIB(X),X USE OUTPUT CIB JMP LK:DTIM * LK:DTIMI EQU $ COPY TI:FCB(Y),X COPY LC:ICIB(X),X USE INPUT CIB * LK:DTIM EQU $ COPY TI:BCT(Y),A GET CHARACTER COUNT COPY CI:SPC(X),Q GET SHIFT COUNT JLT Q,LK:DTIM1 MINUS SHIFT JEQ Q,LK:DTIM2 NO SHIFT * SUB  =1,Q SHIFT Q,LO,4 FIX UP SHIFT COUNT FOR XNX XNX Q SHIFT A,LO,1 TIMER=SHIFTED CHAR COUNT JMP LK:DTIM2 * LK:DTIM1 EQU $ NEG Q,Q MAKE COUNT POSITIVE SUB =1,Q SHIFT Q,LO,4 FIX UP FOR XNX XNX Q SHIFT A,RO,1 TIMER=SHIFTED CHAR COUNT * LK:DTIM2 EQU $ ADD CI:WBT(X),A ADD BASE TO CALCULATED TIMER VALUE COPY A,CI:DTC(X) SAVE RESULTING TIMER RSK END TITL INTRACOMM COMMON ROUTINES - 93702-24E000 BOX LK:CRC,-,CRC-16,BLOCK,CHECK,GENERATOR * X=BUFFER ADDRESS * Q=BYTE COUNT * A=SB * * A=CRC-16 ON RETURN * NAM LK:CRC * INT: REL SHARABLE INT: ROMMABLE INT: LK:CRC EQU $ PUSH XA:V COPY X,Y TBIT 0,A CHECK SB COPY =0,A ZERO CRC-16 JT OV,LK:CRC20 START ON SECOND BYTE IF SB SET * LK:CRC10 EQU $ JEQD Q,LK:CRC30 CHECK BYTE COUNT COPY 0(Y),X LOAD HIGH ORDER BYTE SHIFT X,RO,8 ADJUST XOR A,X W=CL.XOR.B AND =:FF,X MAKE INDEX ADD =CRC:TBL,X SHIFT A,RO,8 CL=FL.XOR.CH XOR 0(X),A CH=FH * LK:CRC20 EQU $ JEQD Q,LK:CRC30 CHECK BYTE COUNT COPY 0(Y),X GET RIGHT BYTE XOR A,X W=CL.XOR.B AND =:FF,X MAKE INDEX ADD =CRC:TBL,X SHIFT A,RO,8 CL=FL.XOR.CH XOR 0(X),A CH=FH IJNE Y,LK:CRC10 NEXT FULL WORD * LK:CRC30 EQU $ COPY K,Y ADDRESS STACK ROTATE A,L,8 SWAP BYTES TO OUTPUT LSB THRU MSB COPY A,LAST:A(Y) POP RSK LPOOL * CRC:TBL EQU $ WORD 0 WORD :C0C1 WORD :C181 WORD :0140 WORD :C301 WORD :03C0 WORD :0280 WORD :C241 WORD :C601 WORD :06C0 WORD :0780 WORD :C741 WORD :0500 WORD :C5C1 WORD :C481 WORD :0440 WORD :CC01 WORD :0CC0 WORD :0D80 WORD :CD41 WORD :0F00 WORD :CFC1 WORD :CE81 WORD :0E40 WORD :0A00 WORD :CAC1 WORD :CB81 WORD :0B40 WORD :C901 WORD :09C0 WORD :0880 WORD :C841 WORD :D801 WORD :18C0 WORD :1980 WORD :D941 WORD :1B00 WORD :DBC1 WORD :DA81 WORD :1A40 WORD :1E00 WORD :DEC1 WORD :DF81 WORD :1F40 WORD :DD01 WORD :1DC0 WORD :1C80 WORD :DC41 WORD :1400 WORD :D4C1 WORD :D581 WORD :1540 WORD :D701 WORD :17C0 WORD :1680 WORD :D641 WORD :D201 WORD :12C0 WORD :1380 WORD :D341 WORD :1100 WORD :D1C1 WORD :D081 WORD :1040 WORD :F001 WORD :30C0 WORD :3180 WORD :F141 WORD :3300 WORD :F3C1 WORD :F281 WORD :3240 WORD :3600 WORD :F6C1 WORD :F781 WORD :3740 WORD :F501 WORD :35C0 WORD :3480 WORD :F441 WORD :3C00 WORD :FCC1 WORD :FD81 WORD :3D40 WORD :FF01 WORD :3FC0 WORD :3E80 WORD :FE41 WORD :FA01 WORD :3AC0 WORD :3B80 WORD :FB41 WORD :3900 WORD :F9C1 WORD :F881 WORD :3840 WORD :2800 WORD :E8C1 WORD :E981 WORD :2940 WORD :EB01 WORD :2BC0 WORD :2A80 WORD :EA41 WORD :EE01 WORD :2EC0 WORD :2F80 WORD :EF41 WORD :2D00 WORD :EDC1 WORD :EC81 WORD :2C40 WORD :E401 WORD :24C0 WORD :2580 WORD :E541 WORD :2700 WORD :E7C1 WORD :E681 WORD :2640 WORD :2200 WORD :E2C1 WORD :E381 WORD :2340 WORD :E101 WORD :21C0 WORD :2080 WORD :E041 WORD :A001 WORD :60C0 WORD :6180 WORD :A141 WORD :6300 WORD :A3C1 WORD :A281 WORD :6240 WORD :6600 WORD :A6C1 WORD :A781 WORD :6740 WORD :A501 WORD :65C0 WORD :6480 WORD :A441 WORD :6C00 WORD :ACC1 WORD :AD81 WORD :6D40 WORD :AF01 WORD :6FC0 WORD :6E80 WORD :AE41 WORD :AA01 WORD :6AC0 WORD :6B80 WORD :AB41 WORD :6900 WORD :A9C1 WORD :A881 WORD :6840 WORD :7800 WORD :B8C1 WORD :B981 WORD :7940 WORD :BB01 WORD :7BC0 WORD :7A80 WORD :BA41 WORD :BE01 WORD :7EC0 WORD  :7F80 WORD :BF41 WORD :7D00 WORD :BDC1 WORD :BC81 WORD :7C40 WORD :B401 WORD :74C0 WORD :7580 WORD :B541 WORD :7700 WORD :B7C1 WORD :B681 WORD :7640 WORD :7200 WORD :B2C1 WORD :B381 WORD :7340 WORD :B101 WORD :71C0 WORD :7080 WORD :B041 WORD :5000 WORD :90C1 WORD :9181 WORD :5140 WORD :9301 WORD :53C0 WORD :5280 WORD :9241 WORD :9601 WORD :56C0 WORD :5780 WORD :9741 WORD :5500 WORD :95C1 WORD :9481 WORD :5440 WORD :9C01 WORD :5CC0 WORD :5D80 WORD :9D41 WORD :5F00 WORD :9FC1 WORD :9E81 WORD :5E40 WORD :5A00 WORD :9AC1 WORD :9B81 WORD :5B40 WORD :9901 WORD :59C0 WORD :5880 WORD :9841 WORD :8801 WORD :48C0 WORD :4980 WORD :8941 WORD :4B00 WORD :8BC1 WORD :8A81 WORD :4A40 WORD :4E00 WORD :8EC1 WORD :8F81 WORD :4F40 WORD :8D01 WORD :4DC0 WORD :4C80 WORD :8C41 WORD :4400 WORD :84C1 WORD :8581 WORD :4540 WORD :8701 WORD :47C0 WORD :4680 WORD :8641 WORD :8201 WORD :42C0 WORD :4380 WORD :8341 WORD :4100 WORD :81C1 WORD :8081 WORD :4040 END TITL INTRACOMM COMMON ROUTINES - 93702-24E000 BOX DRV:BBC,-,SET,AUTO,I/O,BYTE,COUNT,-,BUFFER,ADDRESS * Y = CIB ADDRESS * NAM DRV:BBC * INT: REL SHARABLE INT: ROMMABLE INT: DRV:BBC EQU $ COPY CI:IV(Y),X VECTOR BASE COPY CI:ICT(Y),Q BYE COUNT COPY CI:IBF(Y),A BUFFER WORD ADRESS NEG Q,Q PREPARE FOR AIO ARGUMENT SUB =1,A BACK OFF ONE WORD JGE A,$+2 SKIP IF MSB=0 RBIT 15,Q THERE WILL BI 'CARRY' ADD A,A MAKE WORD ADDRESS INTO BYTE ADD =1,A FINISH FOR AIO ARGUMENT COPY A,IV:BUF(X) STORE IT AWAY COPY Q,IV:CNT(X) ETC. COPY CI:SB(Y),A GET SB:FLAG JEQ A,$+2 SKIP IF NOT SET IMS IV:BUF(X) INCR THE BUFFER RSK RBIT 15,Q COPY Q,IV:CNT(X) RSK END TITL INTRACOMM COMMON ROUTINES - 93702-24E000 BOX DRV:SND,-,OUTPUT,COMMAND,TO,DEVICE *  Y = CIB ADDRESS * NAM DRV:SND * INT: REL SHARABLE INT: ROMMABLE INT: DRV:SND EQU $ SIN 4 PROTECT THROUGH OUTPUT INSTRUCTION COPY CI:FLG(Y),Q LOAD PF FLAG TBIT CIF:PU,Q DON'T OUT IF PF HAPPENED JT OV,DRV:SND2 COPY CI:DA(Y),Q XNX Q OUT A,1 SEND COMMAND DRV:SND2 EQU $ RSK END TITL INTRACOMM COMMON ROUTINES - 93702-24E000 BOX DRV:AIB,-,STORE,AUTO,INPUT,BYTE *  Y=CIB * NAM DRV:AIB * INT: REL SHARABLE INT: ROMMABLE INT: DRV:AIB EQU $ COPY CI:DA(Y),A GET DEVICE ADDRESS OR AIB,A CONSTRUCT INSTRUCTION COPY CI:IV(Y),X GET VECTOR LOCATION COPY A,IV:AIO(X) STORE IN VECTOR LOCATION * RSK AIB AIB 0 END TITL INTRACOMM COMMON ROUTINES - 93702-24E000 BOX DRV:AOB,-,STORE,AUTO,OUTPUT,BYTE * Y = CIB * NAM DRV:AOB * INT: REL SHARABLE INT: ROMMABLE INT: DRV:AOB EQU $ COPY CI:DA(Y),A GET DEVICE ADDRES OR AOB,A COMBINE WITH AOB COPY CI:IV(Y),X GET VECTOR BASE COPY A,IV:AIO(X) * RSK AOB AOB 0 END TITL INTRACOMM COMMON ROUTINES - 93702-24E000 BOX DRV:INS,-,INPUT,MUX,STATUS *  Y=CIB * A=HARDWARE STATUS ON RETURN * NAM DRV:INS * INT: REL SHARABLE INT: ROMMABLE INT: DRV:INS EQU $ COPY CI:DA(Y),A XNX A IN 1,A SELP A,:04 RSK END TITL INTRACOMM COMMON ROUTINES - 93702-24E000 BOX DRV:CNT,-,GET,REMAINING,BYTE,COUNT * Y=CIB * A=BYTE COUNT ON RETURN * NAM DRV:CNT INT: REL SHARABLE INT: ROMMABLE INT: DRV:CNT EQU $ COPY CI:IV(Y),X COPY IV:CNT(X),A SHIFT A,LO,1 GET RID OF ADDRESS BIT SHIFT A,RA,1 EXTEND SIGN NEG A,A MAKE POSITIVE RSK END !  Y=CIB * A=HARDWARE STATUS ON RETURN * NAM DRV:INS * INT: REL SHARABLE INT: ROMMABLE INT: DRV:INS EQU $ COPY CI:DA(Y),A XNX A IN 1,A SELP A,:04 RSK END TITL INTRACOMM COMMON ROUTINES - 93702-24E000 BOX DRV:CNT,-,GET,REMAINING,BYTE,CO TITL INTRACOMM ASYNC MUX DRIVER - 93703-20E000 BOX AMX:FUN,-,ASYNC,MUX,FUNCTION,HANDLER,FOR,DDCMP * A= CIB ADDRESS * NAM AMX:FUN EXTR AMF:WR EXTR AMF:RD EXTR AMF:SYN EXTR AMF:IDL EXTR AMF:RST EXTR AMF:OP * INT: REL SHARABLE INT: ROMMABLE INT: AMX:FUN EQU $ PUSH XA:V COPY A,Y COPY CI:FC(Y),Q LOAD FUNCTION CODE AND DECODE SELP Q,:04 ***** DEBUG ***** XNX Q JMP *$+1 WORD AMF:WR WRITE WORD AMF:RD READ WORD AMF:SYN SYNCHRONIZE WORD AMF:IDL IDLE WORD AMF:RST RESET WORD AMF:OP OPEN END TITL INTRACOMM ASYNC MUX DRIVER - 93703-20E000 BOX AMF:OP,-,OPEN,FUNCTION * Y = CIB ADDRESS * NAM AMF:OP EXTR I:EOB,R:IWAI EXTR AMF:WOT EXTR AMF:WSC EXTR AMF:WMR EXTR LK:PFR EXTR DRV:SND * INT: REL SHARABLE INT: ROMMABLE INT: AMF:OP EQU $ COPY =:A000,A JSK DRV:SND RESET INPUT AND OUTPUT CHANNELS COPY CI:FLG(Y),A RESET PU,TO RBIT CIF:PU,A RBIT CIF:TO,A COPY A,CI:FLG(Y) * COPY =0,A COPY A,CI:CFL(Y) UNCONDITIONAL PF RESET COPY A,CI:CSM(Y) CLEAR COMPLETION SEMAPHORE * COPY =I:EOB,A SET STANDARD EOB ROUTINE COPY A,CI:EOB+3(Y) * COPY Y,A ADD =CI:EOB,A CALCULATE EOB VECTOR ADRESS COPY CI:IV(Y),X COPY A,IV:EOB(X) STORE IN VECTOR LOCATION * COPY JSK,A STORE JSK *$+1 COPY A,IV:JSK(X) * COPY CI:FLG(Y),A CHECK FOR INPUT CIB - DON'T WRITE OPTION TABLE TBIT CIF:IN,A JT OV,AMX:OP20 * * WRITE OPTION TABLE * JSK AMF:WOT WRITE OPTION TABLE * COPY =-10,A TIME 1.25 SEC COPY A,CI:TIM(Y) * COPY Y,X ADD =CI:CSM,X WAIT FOR COMPLETION JSK R:IWAI * COPY CI:CFL(Y),A LOAD COMPLETION FLAG JEQ A,AMX:OP20 RETURN IMMEDIATELY IF NOT COMPLETE * COPY =0,A STOP TIMER COPY A,CI:TIM(Y) * * WRITE SPECIAL CHARACTER TABLE * COPY Y,X JSK LK:PFR CHECK FOR PF AND RESET COMPLKETION FLKAG JMP AMX:OP20 RETURN FOR PF DETECTED * JSK AMF:WSC WRITE SPECIAL CHARACTER TABLE * COPY =-10,A TIME 1.25 SEC COPY A,CI:TIM(Y) * COPY Y,X ADD =CI:CSM,X JSK R:IWAI WAIT FOR COMPLETION * COPY CI:CFL(Y),A LOAD COMPLETION FLAG JEQ A,AMX:OP20 RETURN IMMEDIATE IF NOT COMPLETE * COPY =0,A COPY A,CI:TIM(Y) STOP TIMER * * WRITE MODEM REGISTER - DTR UP * COPY Y,X JSK LK:PFR RESET CFL IF NO PF JMP AMX:OP20 RETURN FOR PF DETECTED * COPY =:01,A TURN ON DTR JSK AMF:WMR * COPY =-10,A TIME 1.25 SEC COPY A,CI:TIM(Y) * COPY Y,X WAIT FOR COMPLETION ADD =CI:CSM,X JSK R:IWAI * AMX:OP20 EQU $ COPY =0,A COPY A,CI:TIM(Y) * POP RSK JSK JSK *$+1 END TITL INTRACOMM ASYNC MUX DRIVER - 93703-20E000 BOX AMF:WR,-,WRITE,REQUEST * Y = CIB * NAM AMF:WR EXTR DRV:BBC EXTR DRV:AOB EXTR DRV:SND * INT: REL SHARABLE INT: ROMMABLE INT: AMF:WR EQU $ JSK DRV:AOB STORE AOB IN VECTOR LOCATION * JSK DRV:BBC SET IV:BCT AND IV:BUF * COPY =:1040,A SEND WRITE BUFFER JSK DRV:SND * POP RSK * END TITL INTRACOMM ASYNC MUX DRIVER - 93703-20E000 BOX AMF:RD,-,READ,REQUEST * Y = CIB * NAM AMF:RD EXTR DRV:BBC EXTR DRV:SND EXTR DRV:AIB * INT: REL SHARABLE INT: ROMMABLE INT: AMF:RD EQU $ JSK DRV:AIB SET UP AUTO INPUT BYTE * JSK DRV:BBC SET IV:BCT,IV:BUF * COPY =:4800,A SEND READ MSG WITHOUT " CM OR RM JSK DRV:SND * POP RSK * END TITL INTRACOMM ASYNC MUX DRIVER - 93703-20E000 BOX AMX:SYN,-,SYNCHRONIZE,REQUEST *  Y = CIB * NAM AMF:SYN EXTR DRV:SND * INT: REL SHARABLE INT: ROMMABLE INT: AMF:SYN EQU $ COPY CI:IV(Y),X GET INTERRUPT VECTOR BASE COPY JSK,A COPY A,IV:AIO(X) SET UP JSK *$+1 COPY Y,A ADD =CI:IDL,A CALCULATE DATA INTERRUPT ROUTINE ADDRESS COPY A,IV:CNT(X) STORE IN NEXT LOC COPY =0,A COPY A,CI:ICNT(Y) ZERO AS IMS ARG * COPY =:4900,A RECEIVE MESSAGE WITH CHARACTER MATCH JSK DRV:SND * POP RSK * JSK JSK *$+1 END TITL INTRACOMM ASYNC MUX DRIVER - 93703-20E000 BOX AMF:IDL,-,IDLE,REQUEST *  Y = CIB * NAM AMF:IDL EXTR DRV:SND * INT: REL SHARABLE INT: ROMMABLE INT: AMF:IDL EQU $ COPY CI:IV(Y),X GET INTERRUPT VECTOR BASE COPY JSK,A COPY A,IV:AIO(X) SET UP JSK *$+1 COPY Y,A ADD =CI:IDL,A CALCULATE IDLE ROUTINE ADDRESS COPY A,IV:CNT(X) STORE IN AUTO IO COUNT POSITION COPY CI:ICT(Y),A GET COUNT NEG A,A COPY A,CI:ICNT(Y) STORE AS IMS ARGUMENT * COPY =:4800,A RECEIVE MESSAGE, NO CM OR RM JSK DRV:SND * POP RSK * JSK JSK *$+1 END TITL INTRACOMM ASYNC MUX DRIVER - 93703-20E000  BOX AMF:RST,-,RESET,REQUEST * * Y = CIB * NAM AMF:RST EXTR DRV:SND * INT: REL SHARABLE INT: ROMMABLE INT: AMF:RST EQU $ COPY CI:RST(Y),A RESET RECEIVE AND/OR XMITT CHANNELS JSK DRV:SND POP RSK END TITL INTRACOMM ASYNC MUX DRIVER - 93703-20E000 BOX AMF:WOT,WRITE,OPTION,TABLE * Y = CIB * NAM AMF:WOT EXTR DRV:SND EXTR DRV:BBC EXTR DRV:AOB * INT: REL SHARABLE INT: ROMMABLE INT: AMF:WOT EQU $ COPY CI:OPT(Y),A GET OPTION TABLE ADDRESS COPY A,CI:IBF(Y) COPY =4,A FOUR BYTE WRITE COPY A,CI:ICT(Y) COPY =0,A COPY A,CI:SB START WITH FIRST BYTE * JSK DRV:AOB STORE AUTO OUTPUT BYTE * JSK DRV:BBC SET UP IV:CNT AND IV:BUF * COPY =:1020,A WRITE OPTION TABLE JSK DRV:SND * RSK END TITL INTRACOMM ASYNC MUX DRIVER - 93703-20E000 BOX AMF:WSC,-,WRITE,SPECIAL,CHARACTER TABLE * Y = CIB * NAM AMF:WSC EXTR DRV:SND EXTR DRV:BBC EXTR DRV:AOB * INT: REL  SHARABLE INT: ROMMABLE INT: AMF:WSC EQU $ COPY CI:OPT(Y),A GET OPTION TABLE ADDRESS ADD =2,A COPY A,CI:IBF(Y) LAST WORD OF OPTION TABLE IS SC TABLE COPY =2,A COPY A,CI:ICT(Y) TWO BYTE WRITE COPY =0,A COPY A,CI:SB(Y) START WITH FIRST BYTE * JSK DRV:BBC SET UP IV:CNT AND IV:BUF * JSK DRV:AOB SET UP AUTO OUTPUT BYTE * COPY =:10C0,A JSK DRV:SND WRITE SPECIAL CHARACTER TABLE * RSK END TITL INTRACOMM ASYNC MUX DRIVER - 93703-20E000 BOX AMF:WMR,-,WRITE,MODEM,REGISTER * A=MODEM CONTROL BITS * Y = CIB NAM AMF:WMR EXTR DRV:SND * INT: REL SHARABLE INT: ROMMABLE INT: AMF:WMR EQU $ AND =:F,A OR =:1000,A JSK DRV:SND RSK END TITL INTRACOMM ASYNC MUX DRIVER - 93703-20E000 BOX AMX:STAT,-,ASYNC,MUX,STATUS,HANDLER,FOR,DDCMP *  A=CIB * NAM AMX:STAT EXTR AMS:WR EXTR AMS:RD EXTR AMS:SYN EXTR AMS:IDL EXTR AMS:RST EXTR AMS:OP * INT: REL SHARABLE INT: ROMMABLE INT: AMX:STAT EQU $ PUSH XA:V COPY A,Y COPY CI:FC(Y),Q GET FUCTION CODE XNX Q JMP *$+1 JUMP TO PROCESSING ROUTINE WORD AMS:WR WRITE WORD AMS:RD READ WORD AMS:SYN SYNCHRONIZE WORD AMS:IDL IDLE WORD AMS:RST RESET WORD AMS:OP OPEN END TITL INTRACOMM ASYNC MUX DRIVER - 93703-20E000 BOX AMS:OP,OPEN,STATUS * Y=CIB NAM AMS:OP EXTR AMS:RTN * INT: REL S# HARABLE INT: ROMMABLE INT: AMS:OP EQU $ * * CI:CFL =1 FOR NORMAL COMPLETION * COPY CI:FLG(Y),A RETURN GOOD STATUS FOR NULL OPEN TBIT CIF:IN,A JT OV,AMS:OP02 * COPY CI:CFL(Y),A JNE A,AMS:OP02 COPY =HDWR:,A JMP AMS:RTN * AMS:OP02 EQU $ COPY =NORML:,A JMP AMS:RTN END TITL INTRACOMM ASYNC MUX DRIVER - 93703-20E000 BOX AMS:WR,-,WRITE,STATUS * Y=CIB NAM AMS:WR EXTR DRV:INS EXTR AMS:RTN EXTR DRV:CNT * INT: REL SHARABLE INT: ROMMABLE INT: AMS:WR EQU $ JSK DRV:INS TBIT TX:ERR,A CHECK FOR ANY ERROR JF OV,AMS:WR20 COPY =IC:LDSR:,A ONLY ERROR IS LOST DSR JMP AMS:RTN * AMS:WR20 EQU $ JSK DRV:CNT GET REMAINING BYTE COUNT JEQ A,AMS:WR30 MUST BE ZERO COPY =HDWR:,A JMP AMS:RTN * AMS:WR30 EQU $ COPY =NORML:,A JMP AMS:RTN * TX:ERR EQU 11 END TITL INTRACOMM ASYNC MUX DRIVER - 93703-20E000 BOX AMS:RD,-,READ,STATUS * Y=CIB NAM AMS:RD EXTR DRV:INS EXTR AMS:ERR EXTR AMS:RTN EXTR DRV:CNT * INT: REL SHARABLE INT: ROMMABLE INT: AMS:RD EQU $ JSK DRV:INS GET HARDWARE STATUS TBIT RX:ERR,A ANY READ CHANNEL ERRORS JF OV,AMS:RD20 JSK AMS:ERR GET ERROR CODE JMP AMS:RTN * AMS:RD20 EQU $ AND =:60,A REMOVE ALL BUT C0,C1 JNE A,AMS:RD30 SHOULD BE ZERO JSK DRV:CNT GET REMAINING BYTE COUNT JNE A,AMS:RD30 COPY =NORML:,A JMP AMS:RTN * AMS:RD30 EQU $ COPY =HDWR:,A JMP AMS:RTN * RX:ERR EQU 7 END TITL INTRACOMM ASYNC MUX DRIVER - 93703-20E000 BOX AMS:SYN,-,SYNC,STATUS * Y=CIB NAM AMS:SYN EXTR DRV:INS EXTR AMS:RTN EXTR AMS:ERR * INT: REL SHARABLE INT: ROMMABLE INT: AMS:SYN EQU $ JSK DRV:INS TBIT RX:ERR,A ANY READ ERRORS JF OV,AMS:SY20 JSK AMS:ERR GET ERROR CODE JMP AMS:RTN * AMS:SY20 EQU $ COPY CI:OPT(Y),X OPTION TABLE ADDRESS COPY 2(X),Q GET SPECIAL CHARACTER TABLE AND =:61,A REMOVE ALL STATUS BUT C0,C1,D0  CLSN =:60,A MATCH ON CHARACTER 1 JMP AMS:SY30 CLSN =:61,A MATCH ON CHARACTER 2 JMP AMS:SY40 COPY =HDWR:,A ANY OTHER STATUS NOT ACCEPTABLE JMP AMS:RTN * AMS:SY30 EQU $ SHIFT Q,RO,8 * AMS:SY40 EQU $ AND =:FF,Q COPY Q,CI:CHR(Y) COPY =NORML:,A JMP AMS:RTN RX:ERR EQU 7 END TITL INTRACOMM ASYNC MUX DRIVER - 93703-20E000 BOX AMS:IDL,-,IDLE,STATUS * Y=TIB NAM AMS:IDL  EXTR DRV:INS EXTR AMS:RTN EXTR AMS:ERR EXTR DRV:SND * INT: REL SHARABLE INT: ROMMABLE INT: AMS:IDL EQU $ JSK DRV:INS TBIT RX:BSY,A STATUS MAY NOT BE VALID IF NOT TERMINATED BY EOB JT OV,AMS:ID20 TBIT RX:ERR,A CHECK ANY READ ERRORS JF OV,AMS:ID20 JSK AMS:ERR JMP AMS:RTN * AMS:ID20 EQU $ COPY =:8000,A RESET INPUT CHANNEL JSK DRV:SND COPY CI:ICNT(Y),A JEQ A,AMS:ID30 COPY =HDWR:,A ERROR IF NOT TERMINATED BY ZERO COUNT JMP AMS:RTN * AMS:ID30 EQU $ COPY =NORML:,A JMP AMS:RTN * RX:BSY EQU 12 RX:ERR EQU 7 END TITL INTRACOMM ASYNC MUX DRIVER - 93703-20E000 BOX AMS:RST,-,RESET,STATUS * Y=TIB NAM AMS:RST EXTR AMS:RTN * INT: REL SHARABLE INT: ROMMABLE INT: AMS:RST EQU $ COPY =NORML:,A JMP AMS:RTN END TITL INTRACOMM ASYNC MUX DRIVER - 93703-20E000 BOX AMS:ERR,-,INPUT,ERROR,CODES * A=HARDWARE STATUS ON ENTRY * A=ERROR CODE ON RETURN * NAM AMS:ERR * INT: REL SHARABLE INT: ROMMABLE INT: AMS:ERR EQU $ AND =:07,A XNX A COPY ERRTBL,A RSK * ERRTBL EQU $ WORD IC:LDSR: WORD LCD: WORD HDWR: WORD HDWR: WORD IC:OE: * END TITL INTRACOMM ASYNC MUX DRIVER - 93703-20E000 BOX AMS:RTN,-,STATUS,R$ ETURN NAM AMS:RTN * INT: REL SHARABLE INT: ROMMABLE INT: AMS:RTN EQU $ COPY K,Y INDEX STACK COPY A,LAST:A(Y) RETURN STATUS CODE IN A REG POP RSK END ,INPUT,ERROR,CODES * A=HARDWARE STATUS ON ENTRY * A=ERROR CODE ON RETURN * NAM AMS:ERR * INT: REL SHARABLE INT: ROMMABLE INT: AMS:ERR EQU $ AND =:07,A XNX A COPY ERRTBL,A RSK * ERRTBL EQU $ WORD IC:LDSR: WORD LCD: WORD HDWR: WORD HDWR: WORD IC:OE: * END TITL INTRACOMM ASYNC MUX DRIVER - 93703-20E000 BOX AMS:RTN,-,STATUS,R TITL INTRACOMM SERIAL DRIVER - 93703-21E000 BOX SIO:FUN,-,SERIAL,MODEM,PICO,HANDLER,FOR,DDCMP * A = CIB * NAM SIO:FUN EXTR SIF:WR EXTR SIF:RD EXTR SIF:SYN EXTR SIF:IDL EXTR SIF:RST EXTR SIF:OP * INT: REL SHARABLE INT: ROMMABLE INT: SIO:FUN EQU $ PUSH XA:V COPY A,Y COPY CI:FC(Y),Q DECODE FUNCTION CODE SELP Q,:04 ***** DEBUG ***** XNX Q JMP *$+1 WORD SIF:WR WRITE WORD SIF:RD READ WORD SIF:SYN SYNCHRONIZE WORD SIF:IDL IDLE WORD SIF:RST RESET WORD SIF:OP OPEN * END TITL INTRACOMM SERIAL DRIVER - 93703-21E000 BOX SIF:OP,-,OPEN,FUNCTION * Y=CIB * NAM SIF:OP EXTR DRV:SND EXTR I:EOB * INT: REL SHARABLE INT: ROMMABLE INT: SIF:OP EQU $ COPY =:100,A JSK DRV:SND RESET INTERRUPTS * COPY CI:FLG(Y),A RESET PU,TO RBIT CIF:PU,A RBIT CIF:TO,A COPY A,CI:FLG(Y) * COPY =0,A COPY A,CI:CFL(Y) UNCONDITIONAL PF RESET COPY A,CI:CSM(Y) CLEAR COMPLETION SEMAPHORE *  COPY =I:EOB,A SET STANDARD EOB ROUTINE COPY A,CI:EOB+3(Y) * COPY Y,A ADD =CI:EOB,A CALCULATE EOB ADDRESS COPY CI:IV(Y),X GET BASE INTERRUPT VECTOR COPY A,IV:EOB(X) STORE IN VECTOR LOCATION * COPY JSK,A STORE JSK *$+1 COPY A,IV:JSK(X) * POP RSK JSK JSK *$+1 END TITL INTRACOMM SERIAL DRIVER - 93703-21E000 BOX SIF:RD,-,READ,REQUEST * Y=CIB NAM SIF:RD EXTR DRV:BBC EXTR DRV:SND EXTR DRV:AIB * INT: REL SHARABLE INT: ROMMABLE INT: SIF:RD EQU $ JSK DRV:AIB SET UP AUTO INPUT BYTE * JSK DRV:BBC SET UP IV:CNT, IV:BUF * COPY =:0680,A NEXT INPUT, NO RESET, NO CHARACTER DETECT, NO PARITY STANDARD JSK DRV:SND * POP  RSK * END TITL INTRACOMM SERIAL DRIVER - 93703-21E000 BOX SIF:WR,-,WRITE,FUNCTION * Y=CIB * NAM SIF:WR EXTR DRV:BBC EXTR DRV:AOB EXTR DRV:SND * INT: REL SHARABLE INT: ROMMABLE INT: SIF:WR EQU $ JSK DRV:AOB SET UP AUTO OUTPUT BYTE * JSK DRV:BBC SET UP IV:CNT AND IV:BUF * COPY =:0622,A RESET XMITR, THEN OUTPUT, WAIT FOR CTS JSK DRV:SND * POP RSK END TITL INTRACOMM SERIAL DRIVER - 93703-21E000 BOX SIF:RST,-,RESET,PICO * Y=CIB * NAM SIF:RST EXTR DRV:SND * INT: REL SHARABLE INT: ROMMABLE INT: SIF:RST EQU $ COPY =:100,A JSK DRV:SND POP RSK END TITL INTRACOMM SERIAL DRIVER - 93703-21E000 BOX SIF:SYN,-,SYNCHRONIZE,FUNCTION * Y=CIB * NAM SIF:SYN EXTR DRV:SND EXTR SIO:SYN EXTR SIO:DI * INT: REL SHARABLE INT: ROMMABLE INT: SIF:SYN EQU $ JSK SIO:DI SET UP INTERRUPT VECTORS * COPY =SIO:SYN,A LOAD ADDRESS OF DATA INTERRUPT ROUTINE COPY A,CI:DI+4(Y) STORE IN CIB * COPY =0,A CLEAR PREVIOUS SYNC CHARACTER COPY A,CI:CHR(Y) * COPY =:100,A JSK DRV:SND RESET PICO *  COPY =:0620,A RESET, NEXT INPUT, WAIT FOR CD JSK DRV:SND * POP RSK END TITL INTRACOMM SERIAL DRIVER - 93703-21E000 BOX SIO:SYN,-,SYNC,DATA,INTERRUPT * Y=CIB NAM SIO:SYN * INT: REL SHARABLE INT: ROMMABLE INT: SIO:SYN EQU $ COPY A,CI:A(Y) % SAVE A COPY Q,CI:Q(Y) SAVE Q COPY CI:DA(Y),Q GET DEVICE ADDRESS COPY EOB,A XNX Q OUT A,1 XNX Q IN 0,A INPUT CHARACTER CLSN =SOH,A JMP SIO:SYN3 CLSN =ENQ,A JMP SIO:SYN3 * SIO:SYN2 EQU $ COPY CI:Q(Y),Q RESTORE Q COPY CI:A(Y),A RESTORE A COPY CI:Y(Y),Y RESTORE Y SIN 1 RSK * SIO:SYN3 EQU $ SIN 9 PROTECT FROM EOB INTERRUPT COPY A,CI:CHR(Y) SAVE SYNC CHARACTER COPY RESET,A XNX Q OUT A,1 ISSUE RESET COPY EOB,A XNX Q OUT A,1 FORCE EOB INTERRUPT JMP SIO:SYN2 * RESET WORD :0100 EOB WORD :02F0 END TITL INTRACOMM SERIAL DRIVER - 93703-21E000 BOX SIF:IDL,-,IDLE,REQUEST * Y=CIB * NAM SIF:IDL EXTR DRV:SND EXTR SIO:IDL EXTR SIO:DI * INT: REL SHARABLE INT: ROMMABLE INT: SIF:IDL EQU $ JSK SIO:DI SET UP INTERRUPT VECTORS (DATA) * COPY =SIO:IDL,A PUT DATA INTERRUPT ADDRESS IN CIB COPY A,CI:DI+4(Y) * COPY CI:ICT(Y),A GET BYTE COUNT TO SKIP NEG A,A COPY A,CI:DI+8(Y) STORE FOR USE BY DATA INT. * COPY =:0680,A NEXT INPUT, NO RCVR RESET JSK DRV:SND * POP RSK END TITL INTRACOMM SERIAL DRIVER - 93703-21E000 BOX SIO:IDL,-,IDLE,FUNCTION,DATA,INT.,ROUTINE * Y=CIB * NAM SIO:IDL * INT: REL SHARABLE INT: ROMMABLE INT: SIO:IDL EQU $ COPY A,CI:A(Y) SAVE A COPY Q,CI:Q(Y) SAVE Q IMS CI:DI+8(Y) INCREMENT SKIP COUNT JMP SIO:IDL2 NOT FINISHED * COPY CI:DA(Y),Q LOAD DEVICE ADDRESS * COPY RESET,A RESET PICO TO ACCEPT BRANCH ADDRESS XNX Q OUT A,1 COPY EOB,A FORCE EOB FROM PICO XNX Q OUT A,1 * COPY CI:Q(Y),Q RESTORE Q COPY CI:A(Y),A RESTORE A * COPY CI:Y(Y),Y RESTORE Y SIN 1 RSK * SIO:IDL2 EQU $ IF NOT END OF IDLING COPY CI:DA(Y),Q COPY EOB,A XNX Q FLUSH ONE BYTE OF DATA OUT A,1 COPY CI:A(Y),A COPY CI:Q(Y),Q COPY CI:Y(Y),Y RESTORE USER REGISTERS SIN 1 RSK * RESET WORD :0100 EOB WORD :02F0 END TITL INTRACOMM SERIAL DRIVER - 93703-21E000 BOX SIO:DI,-,SET,UP,DATA,INTERRUPT,VECTORS * Y=CIB * NAM SIO:DI * INT: REL SHARABLE INT: ROMMABLE INT: SIO:DI EQU $ COPY CI:IV(Y),X STORE ADDRESS OF CI:DI COPY Y,A ADD =CI:DI,A COPY A,IV:CNT(X) * COPY JSK,A STORE JSK *$+1 COPY A,IV:AIO(X) RSK * JSK JSK *$+1 END TITL INTRACOMM SERIAL DRIVER - 93703-21E000 TBOX SIO:STAT,-,STATUS,HANDLER,FOR,SERIAL,I/O * A=CIB NAM SIO:STAT * EXTR DRV:INS INT: REL SHARABLE INT: ROMMABLE INT: SIO:STAT EQU $ PUSH XA:V COPY A,Y COPY CI:FC(Y),Q DECODE FUNCTION CODE XNX Q JMP *$+1 WORD SIS:WR WRITE WORD SIS:RD READ WORD SIS:SYN SYNCHRONIZE WORD SIS:IDL IDLE WORD SIS:RST RESET WORD SIS:OP OPEN * * SIO STATUS REGISTER ASSIGNMENTS * CD EQU 0 CARRIER DECT CTS EQU 1 CLEAR TO SEND DSR EQU 2 DATA SET READY DR EQU 3 DATA READY (INPUT) TBE EQU 4 TRANSMITTER BUFFER EMPTY FE EQU 5 FRAMMING ERROR TBOX SIS:OP,-,OPEN,STATUS * Y=CIB NAM SIS:OP EXTR DRV:INS ERR MASK DSR * SIS:OP EQU $ JSK DRV:INS READ HARDWARE STATUS REGISTER AND =ERR,A LOOK AT ONLY DSR JEQ A,$+2 JSK SIO:ERR ANALYZE ERROR JMP SIS:RTN TBOX SIS:RD,-,READ,STATUS * Y=CIB * NAM SIS:RD EXTR DRV:INS EXTR DRV:CNT EXTR SIO:ERR ERR MASK CD,DSR,FE * SIS:RD EQU $ JSK DRV:INS READ STATUS AND =ERR,A CLEAR UNIMPORTANT BITS JEQ A,SIS:RD20 ZERO IS GOOD STATUS JSK SIO:ERR ANALYZE CAUSE OF ERROR JMP SIS:RTN * SIS:RD20 EQU $ JSK DRV:CNT COUNT REMAINING BYTES IN AUTO/IO INSTR JEQ A,$+2 SHOULD BE ZERO COPY =IC:OE:,A OTHERWISE OVERRUN JMP&  SIS:RTN TBOX SIS:WR,-,WRITE,STATUS * Y=CIB NAM SIS:WR ERR MASK CTS,DSR * SIS:WR EQU $ JSK DRV:INS READ STATUS AND =ERR,A CLEAR UNIMPORTANT BITS JEQ A,SIS:WR20 ZERO IS GOOD STATUS JSK SIO:ERR ANALYZE CAUSE OF ERROR JMP SIS:RTN * SIS:WR20 EQU $ JSK DRV:CNT COUNT REMAINING BYTES IN AUTO IO JEQ A,$+2 COPY =HDWR:,A OTHEWRISE SOME HARDWARE ERORR JMP SIS:RTN TBOX SIS:IDL,-,IDLE,STATUS * Y=CIB * NAM SIS:IDL EXTR SIO:ERR ERR MASK CD,DSR,FE * SIS:IDL EQU $ JSK DRV:INS READ STATUS AND =ERR,A CLEAR MISC BITS JEQ A,SIS:IDL2 SHOULD BE ZERO JSK SIO:ERR * SIS:IDL2 EQU $ COPY CI:DI+8(Y),A GET COUNT JEQ A,$+2 SHOULD BE ZERO COPY =IC:OE:,A OTHERWITH IS OVERRUN JMP SIS:RTN TBOX SIS:SYN,-,SYNCHRONIZE,STATUS * Y=CIB NAM SIS:SYN EXTR DRV:INS EXTR SIO:ERR ERR MASK DSR,CD,FE * SIS:SYN EQU $ JSK DRV:INS READ STATUS AND =ERR,A CLEAR MISC BITS JEQ A,SIS:SYN2 SHOULD BE ZERO JSK SIO:ERR ANALYZE STATUS JMP SIS:RTN * SIS:SYN2 EQU $ COPY CI:CHR(Y),Q GET SYNC CHARACTER JNE Q,$+2 SHOULD NOT BE ZERO COPY =IC:OE:,A ASSUME OVERRUN JMP SIS:RTN * * * SIS:RTN EQU $ COPY K,Y INDEX STACK COPY A,LAST:A(Y) ERROR CODE TO STACK POP RSK TBOX SIS:RST,-,RESET,STATUS NAM SIS:RST * SIS:RST EQU $ COPY =NORML:,A JMP SIS:RTN END TITL INTRACOMM SERIAL DRIVER - 93703-21E000 BOX SIO:ERR,-,ANALYZE,SIO,HARDWARE,STATUS NAM SIO:ERR * INT: REL SHARABLE INT: ROMMABLE INT: SIO:ERR EQU $ COPY A,Q MOVE HARDWARE STATUS TO Q TBIT CD,Q TEST CARRIER DETECT JF OV,$+2 COPY =LCD:,A REPORT LOST CARRIER DETECT TBIT CTS,Q TEST FOR CLEAR TO SEND JF OV,$+2 COPY =LCTS:,A REPORT LOST CTS TBIT DSR,Q TEST FOR DATA SET READY JF OV,$+2 COPY =IC:LDSR:,A REPORT LOST DSR TBIT FE,Q TEST FRAMING ERROR JF OV,$+2 COPY =HDWR:,A REPORT FRAMING ERROR RSK * FE EQU 5 FRAMING ERROR DSR EQU 2 DATA SET READY CTS EQU 1 CLEAR TO SEND CD EQU 0 CARRIER DETECT * END REL SHARABLE INT: ROMMABLE INT: SIO:ERR EQU $ COPY A,Q MOVE HARDWARE STATUS TO Q TBIT CD,Q TEST CARRIER DETECT JF OV,$+2 COPY =LCD:,A REPORT LOST CARRIER DETECT JLK:INP O0SEGMENTBLANK INT: o DKLK:CLF LK:RSN LK:RTON KLK:ACK LK:TIB LK:ISEL KLK:NUM LK:RESP LK:SNAK KLK:SAL LK:TAB LK:THX KLK:SACK LK:RTOFFR:IWAI KR:ISIG R:END LK:HDR KLK:ID iig cSឋ{ FQ$֟9 =   ) ʟʀJ|J^J 6E J M |S{ FQGG``$9 .K=   ) J|J]W 6ȀJ6B ` `Wttt  t t t t Srq{ Fgg9 q=   J|JbM +t tSJI ?@N9C =  `c  `ߞ_U] ` ٞĀJ J # H ` ˞ `Jʘ^D  `ÞC `@W.,)  ` a-/`7+ H^KX@QAf + fNd a` abttttttttt Hg1Fgć+xf1E ć+dM1Cć+Q O+c H `U^ttJLK:HDR O0SEGMENTBLANK INT: o .KLK:THX LK:ISEL LK:SYN KLK:CST LK:PFR R:IWAI iig N W  N N+cNW  p܀# Np  # ttttttJLK:ISEL O0SEGMENTBLANK INT: o  iig W' 6A# JJ# JLK:NUM O0SEGMENTBLANK INT: o iigWy# JLK:RESP O0SEGMENTBLANK INT: o iigW# JLK:ACK O0SEGMENTBLANK INT: o KLK:THC R:ISIG LK:RESP iig g1F@ _Q# `g g+`Bu p܀ # tttJLK:RSN O0SEGMENTBLANK INT: o iig  #  JLK:SAL O0SEGMENTBLANK INT: o iig o6ʠW6ƀli f# JLK:SYN O0SEGMENTBLANK INT: o $KLK:READ R:SSIG R:RE12 iig ` JN UI ` +`K UGqI  HObU`KtttJLK:READ O0SEGMENTBLANK INT: o EKLK:IDL LK:BCC LK:CRC KR:RE12 R:SSIG iig ` JI IF `+NyLwa QN@Q ;S1Q <ĉ IPOcU` KaKQ HOeU`KtttttJLK:BCC O0SEGMENTBLANK INT: o KR:RE12 R:SSIG LK:EOB iig ` JϠS+I Q  POdU`Ka0 `+tttJLK:EOB O0SEGMENTBLANK INT: o KR:SSIG R:RE12 iig ` JA0a `+ttJLK:IDL O0SEGMENTBLANK INT: o  KR:RE12 R:SSIG iig` `J `+ttJLK:ID O0SEGMENTBLANK INT: o  KH:DUMP iig W)@# ڌ# ֑QB5#  p܀# tJH:DUMP O0SEGMENTBLANK INT: o iig# @K0B# JLK:INM1HO0SEGMENTBLANK INT: o  KLK:PFR R:IWAI R:ISIG iig J6Cc PNJ6 JcQPNRN # tttJLK:INM2HO0SEGMENTBLANK INT: o iigJJ# JLK:INM1FO0SEGMENTBLANK INT: o KLK:TIB R:ISIG iig NJ6Rĕ}6Iĕ J/6ȖÀaO+c# |ttJLK:INM2FO0SEGMENTBLANK INT: o iigJJ#  o iig# @K0B# JLK:INM1HO0SEGMENTBLANK INT: o  KLK:PFR R:IWAI R:ISIG iig J6Cc PNJ6 JcQPNRN # tttJLK:INM2HO0SEGMENTBLANK INT: o  TITL INTRACOMM ACCESS MANAGER - 93702-20E000 TBOX LK:MGR,-,INTRACOMM,ACCESS,MANAGER,ENTRY * Y=TIB ADDRESS * NAM LK:MGR EXTR R:ISIG EXTR R:IWAI * INT: REL SHARABLE INT: ROMMABLE INT: LK:MGR EQU $ COPY =NORML:,A COPY A,TI:SOF(Y) INIT SOFTWARE STATUS COPY TI:FC(Y),Q FUNCTION CODE FROM TIB SHIFT Q,RO,4 ISOLATE FC AND =:03,Q COPY TI:FCB(Y),X ***** COPY LC:PFG(X),A  ***** TBIT PF:MAINT,A *****ARE WE IN MAINTENANCE MODE? JT OV,LK:MGR10 *****YES-JUMP XNX Q JUMP INDEXED BY FUNCTION JMP *$+1 WORD LK:RE READ WORD LK:WR WRITE WORD LK:ILL POSITION WORD LK:FU FUNCTION LK:MGR10 EQU $ ***** XNX Q  ***** JMP *$+1 ***** WORD LK:MERR *****READ (NOT VALID IN MAINTENANCE MODE) WORD LK:WRM  *****WRITE WORD LK:ILL *****POSITION (NEVER VALID IN INTRACOMM) WORD LK:FUM *****FUNCTION TBOX LK:MGR,-,INTRACOMM,ACCESS,MANAGER,FUNCTION,REQUEST LK:FU EQU $ COPY TI:FC(Y),Q AND =:0F,Q ISOLATE FUNCTION MODIFIER XNX Q JUMP INDE( XED BY FUNCTION MODIFIER JMP *$+1 WORD LK:OP OPEN WORD LK:CL CLOSE WORD LK:ILL WORD LK:WF WRITE FILE MARK WORD LK:ET READ ERROR TABLE WORD LK:ST SET THRESHOLD TABLE WORD LK:ILL WORD LK:EC CLEAR ERROR TABLE WORD LK:OPM *****OPEN FOR MAINTENANCE WORD LK:ILL WORD LK:ILL WORD LK:ILL WORD LK:ILL WORD LK:ILL WORD LK:ILL WORD LK:ILL TBOX LK:MGR,-,INTRACOMM,ACCESS,MANAGER,MAINTENANCE,FUNCTION,REQUEST LK:FUM EQU $ ***** COPY TI:FC(Y),Q ***** AND =:F,Q ***** XNX Q *****USE FUNC MODIFIER AS OFFSET INTO JUMP TABLE JMP *$+1 ***** WORD LK:MERR ***** WORD LK:MERR ***** WORD LK:MERR ***** WORD LK:MERR ***** WORD LK:ET *****READ ERROR TABLE WORD LK:ST *****SET THRESHOLD TABLE WORD LK:MERR ***** WORD LK:EC *****CLEAR ERROR TABLE WORD LK:OPM *****OPEN FOR MAINTENANCE WORD LK:CLM ***** WORD LK:MERR ***** WORD LK:MERR ***** WORD LK:MERR ***** WORD LK:MERR ***** WORD LK:MERR ***** WORD LK:MERR  ***** TBOX LK:MGR,-,INTRACOMM,ACCESS,MANAGER,LINK,OPEN,REQUEST EXTR LK:OBGIN EXTR LK:IBGIN EXTR LK:INIT EXTR LK:BGIN EXTR LK:LOCK,LK:UNLOK * LK:OPM EQU $ ***** COPY TI:FCB(Y),X ***** ADD =LC:OPSM,X ***** JSK R:IWAI *****WAIT FOR CONTROL COPY TI:FCB(Y),X ***** COPY LC:FLG(X),A ***** TBIT LCF:OP,A *****IS THE LINK OPEN? JT OV,LK:OPM10 *****YES-JUMP AND RETURN ERROR TO USER COPY LC:PFG(X),A ***** SBIT PF:MAINT,A ***** COPY A,LC:PFG(X) ***** JMP LK:OP10 *****GO DO NORMAL OPEN * LK:OPM10 EQU $ ***** COPY LC:PFG(X),A ***** TBIT PF:MAINT,A *****IS LINK IN MAINTENANCE MODE ALREADY? JT OV,LK:OP90 *****YES-JUMP COPY =FILEO:,A ***** COPY A,TI:SOF(Y) ***** JMP LK:OP90 ***** * LK:OP EQU $ COPY TI:FCB(Y),X FROM LCB ADD =LC:OPSM,X GET ADDRESS OF OPEN SEMAPHORE JSK R:IWAI WAIT FOR CONTROL LK:OP10 EQU $ ***** COPY TI:FCB(Y),X FROM LCB COPY LC:FLG(X),A GET FLAG WORD TBIT LCF:OP,A AND TEST FOR ALREADY OPEN LCB JT OV,LK:OP90 COPY LC:FACT(X),A GET CONSTANT FACTOR (FOR OPEN THRESHOLDS) COPY A,LC:WFACT(X) WORKING FACTOR=CONSTANT FACTOR JSK LK:EC CLEAR ERROR TABLE COPY TI:FCB(Y),X RESTORE LCB IN X ! JSK LK:INIT INITIALIZE LCB AND CIB'S JNE A,LK:OP90 FAILURE OF INPUT OR OUTPUT DEVICE COPY Y,LC:OPTI(X) DEPOSIT TIB ADDRESS IN THE LCB * COPY =0,A COPY A,TI:WAI(Y) CLEAR CELL USED FOR WAIT SEMAPHORE * * START BOTH PROTOCOL ACTIVITIES * COPY =LK:IBGIN,Q ADDRESS OF INPUT BEGIN BLOCK COPY Q,TI:T1(Y) JSK LK:BGIN * COPY =LK:OBGIN,Q ADDRESS OF OUTPUT BEGOUT BLOCK COPY Q,TI:T1(Y) JSK LK:BGIN * * WAIT HERE FOR STARTUP TO FINISH * COPY Y,X CALCULATE ADDRESS OF TIB COMPLETION SAEMAPHORE ADD =TI:WAI,X JSK R:IWAI * * CHECK SOFTWARE STATUS FOR NORMAL COMPLETION * COPY TI:FCB(Y),X COPY TI:SOF(Y),A GET FINAL SOFTWARE STATUS CLSN A,=NORML: CHECK FOR NORMAL RETURN JMP LK:OP50 COPY LC:PFG(X),A ***** RBIT PF:MAINT,A *****IF ERROR, TAKE OUT OF MAINT MODE COPY A,LC:PFG(X) ***** JMP LK:OP90 * * SET LINK OPEN * LK:OP50 EQU $ SIN 3 COPY LC:FLG(X),A SBIT LCF:OP,A SET OPEN FLAG IN LCB COPY A,LC:FLG(X) * * SIGNAL OPEN SEMAPHORE * LK:OP90 EQU $ COPY =1,A GET NORMAL THRESHOLDS FOR RUNNING STATE COPY A,LC:WFACT(X) WORKING FACTOR=1 COPY =0,A CLEAR OPEN TIB ADDRESS COPY A,LC:OPTI(X) ADD =LC:OPSM,X CA) LCULATE ADDRESS JSK R:ISIG COPY =0,A CLEAR A RSK LPOOL TBOX LK:ST,-,INTRACOMM,ACCESS,MGR,SET,THRESHOLD,TABLE LK:ST EQU $ COPY TI:FCB(Y),X FROM LCB ADD =LC:OPSM,X GET ADR OF OPEN SEMA JSK R:IWAI WAIT FOR CONTROL COPY TI:FCB(Y),X FROM LCB COPY LC:FLG(X),A GET FLAG WORD TBIT LCF:OP,A AND TEST FOR OPEN JT OV,LK:STBAD BAD- ALREADY OPEN *LINK NOT OPEN, COPY USER TABLE INTO THRESHOLD TABLE COPY LC:THRSH(X),X ADR OF THRESHOLD TABLE COPY TI:BUF(Y),Q ADR OF USER TABLE COPY =-16,A COUNT OF -16 COPY A,TI:TMP(Y) IN TIB TEMPORARY LK:STLP EXCH X,Q USER TABLE ADR IN X COPY 0(X),A GET TABLE WORD EXCH X,Q THRESHOLD TABLE ADR IN X COPY A,0(X) STORE TABLE WORD ADD =1,X BUMP ADD =1,Q POINTERS IMS TI:TMP(Y) BUMP COUNT JMP LK:STLP REPEAT COPY =NORML:,A NO ERROR JMP $+2 LK:STBAD COPY =FILEO:,A LINK WAS OPEN COPY A,TI:SOF(Y) SAVE STATUS COPY TI:FCB(Y),X FROM LCB ADD =LC:OPSM,X GET ADR OF OPEN SEMA JSK R:ISIG RELEASE OPEN SEMA COPY =0,A CLEAR A RSK LPOOL TBOX LK:ET,-,INTRACOMM,ACCESS,MGR,READ,ERROR,TABLE LK:ET EQU $ JSK LK:LOCK LOCK PROTOCOL DATABASE * COPY ERROR TABLE INTO USER BUFFER COPY TI:FCB(Y),X FROM LCB COPY LC:ERR(X),X GET ADR OF ERROR TABLE COPY TI:BUF(Y),Q ADR OF USER BUFFER COPY =-16,A COUNT OF -16 COPY A,TI:TMP(Y) IN TIB TEMPORARY LK:ETLP COPY 0(X),A GET ERROR WORD EXCH X,Q ADR OF USER BUFFER IN X COPY A,0(X) STORE ERROR WORD EXCH X,Q ADR OF ERROR TABLE IN X ADD =1,X BUMP ADD =1,Q POINTERS IMS TI:TMP(Y) BUMP COUNT JMP LK:ETLP REPEAT COPY =NORML:,A NO ERROR CAN OCCUR COPY A,TI:SOF(Y) SAVE STATUS JSK LK:UNLOK RELEASE PROTOCOL DATABASE COPY =0,A CLEAR A RSK LPOOL TBOX LK:EC,-,INTRACOMM,ACCESS,MGR,CLEAR,ERROR,TABLE LK:EC EQU $ JSK LK:LOCK LOCK PROTOCOL DATABASE *CLEAR THE ERROR TABLE COPY TI:FCB(Y),X FROM LCB COPY LC:ERR(X),X GET ADR OF ERROR TABLE COPY =-16,A COUNT OF -16 COPY =0,Q CLEAR Q COPY Q,0(X) ZERO ERROR WORD ADD =1,X BUMP POINTER IJNE A,$-2 REPEAT COPY =NORML:,A NO ERROR CAN OCCUR COPY A,TI:SOF(Y) SAVE STATUS JSK LK:UNLOK RELEASE PROTOCOL DATABASE COPY =0,A CLEAR A RSK LPOOL TBOX LK:WR,-,ACCESS,MGR,WRITE,FUNCTION * Y=TIB * EXTR LK:TOP EXTR LK:BSY EXTR LK:SB EXTR LK:CRC EXTR LK:LOCK EXTR LK:UNLOK EXTR LK:DTIMO * LK:WRM EQU $ ***** COPY TI:FC(Y),Q ***** AND =:F,Q ***** XNX Q ***** JMP *$+1 ***** WORD LK:MERR ***** WORD LK:MERR ***** WORD LK:WR *****  WORD LK:MERR ***** WORD LK:MERR ***** WORD LK:MERR ***** WORD LK:MERR ***** WORD LK:MERR ***** WORD LK:MERR ***** WORD LK:MERR ***** WORD LK:MERR ***** WORD LK:MERR ***** WORD LK:MERR ***** WORD LK:MERR ***** WORD LK:MERR ***** WORD LK:MERR ***** * LK:WR EQU $ JSK LK:SB SET UP SB BIT IN DRIVER FORMAT * COPY TI:SB(Y),A PARAMETERS TO CALCULATE DATA CRC COPY TI:BCT(Y),Q JNE Q,$+2 JMP LK:ILL COPY TI:BUF(Y),X JNE X,$+2 JMP LK:ILL JSK LK:CRC COPY A,TI:CRC(Y) STORE CRC IN TIB * JSK LK:DTIMO CALCULATE TIMER FOR DATA JSK LK:LOCK LOCK PROTOCOL DATABASE JSK LK:TOP CHECK FOR LINK OPEN JMP LK:WR30 NOT OPEN * * ADD TIB TO CHAIN * COPY TI:FCB(Y),X COPY LC:OUTQ(X),X LOAD HEAD OF CHAIN JNE X,LK:WR10 * COPY TI:FCB(Y),X ADDRESS OF LCB COPY Y,LC:OUTQ(X) FIRST ELEMENT IN CHAIN, STORE ADDR* ESS OF TIB COPY LC:N(X),A CALCULATE NUMBER OF THIS MESSAGE ADD =1,A AND =:FF,A COPY A,TI:NUM(Y) JMP LK:WR20 * LK:WR10 EQU $ COPY X,A COPY TI:LNK(X),X LOOP THROUGH TIBS TO FIND END JNE X,LK:WR10 * COPY A,X FOUND IT, RESTORE POINTER COPY TI:NUM(X),A NEW MSG NUMBER IS OLD +1 ADD =1,A AND =:FF,A COPY A,TI:NUM(Y) COPY Y,TI:LNK(X) LINK TO END OF CHAIN * LK:WR20 EQU $ COPY =0,A COPY A,TI:LNK(Y) SET TIB LINK TERMINATOR COPY A,TI:WAI(Y) CLEAR CELL USED FOR WAIT SEMAPHORE * JSK LK:BSY WAKE UP OUTPUT ACTIVITY * JSK LK:UNLOK RELEASE PROTOCOL DATABASE * COPY Y,X ADD =TI:WAI,X JSK R:IWAI WAIT FOR EVERYTHING FINISHED COPY =0,A CLEAR A RSK * LK:WR30 EQU $ JSK LK:UNLOK RELEASE PROTOCOL DATABASE COPY =0,A CLEAR A RSK LPOOL TBOX LK:RE,-,ACCESS,MGR,READ,FUNCTION * Y=TIB * EXTR LK:BSY EXTR LK:SACK EXTR LK:SNAK EXTR LK:CRC EXTR R:GPR EXTR R:SPRI EXTR LK:LOCK EXTR LK:UNLOK EXTR LK:DTIMI EXTR LK:THX * LK:RE EQU $ COPY TI:BCT(Y),Q JNE Q,$+2 JMP LK:ILL COPY TI:BUF(Y),Q JNE Q,$+2 JMP LK:ILL JSK LK:DTIMI CALCULATE TIMER FOR DATA JSK LK:SB SET UP SB BIT IN DRIVER FORMAT * COPY =0,A COPY A,TI:WAI(Y) CLEAR CELL USED FOR WAIT SEMAPHORE * JSK R:GPR GET CURRENT PRIORITY COPY A,TI:PRI(Y) SAVE COPY =:5200,X LOAD PRIORITY BETWEEN OUTPUT AND INPUT ACTIVITY JSK R:SPRI * LK:RE02 EQU $ JSK LK:TOP CHECK FOR FILE OPEN JMP LK:RE10 NO, NOT OPEN * LK:RE04 EQU $ COPY TI:FCB(Y),X GET ADDRESS OF LCB COPY LC:RSM(X),X JSK R:IWAI WAIT FOR NEXT OPPORTUNITY * SIN 4 PROTECT USE OF LCB (NOT USING LC:PSM) COPY TI:FCB(Y),X LCB ADDRESS COPY LC:PFG(X),A PROTOCOL FLAGS TBIT PF:ABT,A CHECK FOR ABORT CONDITION JT OV,LK:RE20 COPY Y,LC:RTIB(X) STORETIB IN LCB COPY LC:ICIB(X),X COPY Y,CI:TIB(X) STORE TIB IN INPUT CIB * COPY Y,X ADD =TI:WAI,X JSK R:IWAI WAIT FOR EVERYTHING FINISHED * * WAIT FOR INPUT TO COMPLETE * COPY TI:SOF(Y),A IF GOOD STATUS, MUST STILL CHECK CRC JNE A,LK:RE10 * COPY TI:SB(Y),A PREPARE TO CALCULATE DATA CRC COPY TI:ACT(Y),Q ACTUAL BYTE COUNT COPY TI:BUF(Y),X ADDRESS OF MY BUFFER JSK LK:CRC CALCULATE CRC * XOR TI:CRC(Y),A COMPARE TRANSMITTED AND CALCULATED CRC COPY A,TI:CRC(Y) SAVE RESULT FOR LATER REFERENCE * JSK LK:LOCK LOCK PROTOCOL DATABASE * COPY TI:FCB(Y),X LCB ADDRESS IS OFTEN USED PARAMETER COPY TI:CRC(Y),A CHECK CRC COMPARE JNE A,LK:RE06 * JSK LK:SACK CRC GOOD, SET SACK COPY TI:NUM(Y),A R <- R+1 COPY A,LC:R(X) UPDATE HIGHEST RECEIVED MESSAGE * TEST FOR FORMATTED ALPHA COPY TI:FC(Y),A CHECK AND =:F,A FUNCTION CODE CLSN A,=FA: IS IT FA:? JMP $+2 YES JMP LK:RE05 NO COPY TI:BUF(Y),X GET FIRST WORD COPY 0(X),A OF RECEIVED DATA SUB LKEOF,A IS IT '/*' ? JNE A,LK:RE05 NO COPY =EOF:,A YES, RETURN EOF STATUS COPY A,TI:SOF(Y) VIA TIB LK:RE05 JMP LK:RE08 * LK:RE06 EQU $ COPY =DCRC:NAK,A CRC NO GOOD JSK LK:SNAK SET SNAK * COPY Y,A SAVE TIB COPY X,Y LCB IN Y REG COPY =DCRC:,X DATA CRC ERROR JSK LK:THX MONITOR ERROR COPY A,Y TIB IN Y REG * LK:RE08 EQU $ JSK LK:BSY WAKE UP OUTPUT ACTIVITY * JSK LK:UNLOK RELEASE PROTOCOL DATABASE * COPY TI:CRC(Y),A IF CRC BAD, GET BACK IN LINE JNE A,LK:RE04 * LK:RE10 EQU $ COPY TI:PRI(Y),X GET ORIGINAL PRIORITY JSK R:SPRI AND RETURN THERE COPY =0,A CLEAR A RSK * LK:RE20 EQU $ COPY LC:CLC(X),A REASON FOR ABORT COPY A,TI:SOF(Y) PASS TO ERROR PROCESSING COPY LC:RSM(X+ ),X PERMIT NEXT READ ACTIVITY JSK R:ISIG * JMP LK:RE10 LPOOL TBOX LK:CL,-,INTRACOMM,ACCESS,MANAGER,CLOSE,FUNCTION * Y=TIB EXTR LK:LOCK EXTR LK:UNLOK EXTR R:IWAI EXTR R:ISIG EXTR LK:CLF * LK:CLM EQU $ ***** COPY TI:FCB(Y),X ***** ADD =LC:OPSM,X ***** JSK R:IWAI *****WAIT FOR CONTROL COPY TI:FCB(Y),X ***** COPY LC:PFG(X),A ***** RBIT PF:MAINT,A *****TAKE LINK OUT OF MAINTENANCE MODE COPY A,LC:PFG(X) ***** JMP LK:CL10 ***** * LK:CL EQU $ COPY TI:FCB(Y),X FROM LCB ADD =LC:OPSM,X ADDRESS OF OPEN SEMAPHORE JSK R:IWAI WAIT FOR CONTROL * LK:CL10 EQU $ ***** COPY TI:FCB(Y),X ADDRESS OF LCB COPY LC:FLG(X),A LCB FLAGS TBIT LCF:OP,A DON'T CLOSE IF NOT ALREADY OPEN JF OV,LK:CL08 JSK LK:LOCK LOCK LCB * COPY =STOPPED:,A STORE CAUSE OF ABORT IN LCB COPY TI:FCB(Y),X COPY A,LC:CLC(X) COPY Y,LC:OPTI(X) TIB ADDRESS IN LCB JSK LK:CLF CLOSE LINK * COPY TI:FCB(Y),X UNCONDITIONAL SIGNAL COMPLETION SEMAPHORE COPY LC:ICIB(X),X INPUT ADD =CI:CSM,X JSK R:ISIG * COPY =0,A COPY A,TI:WAI(Y) CLEAR CELL FOR USE AS SEMAPHORE JSK LK:UNLOK UNLOCK LCB * COPY Y,X ADD =TI:WAI,X JSK R:IWAI WAIT FOR PROCESS 1 JSK R:IWAI WAIT FOR PROCESS 2 * COPY TI:FCB(Y),X COPY =0,A COPY A,LC:OPTI(X) CLEAR TIB ADDRESS * LK:CL08 EQU $ COPY =NORML:,A NO ERROR CAN OCCUR COPY A,TI:SOF(Y) SAVE STATUS ADD =LC:OPSM,X JSK R:ISIG TO PERMIT OPEN COPY =0,A CLEAR A RSK TBOX LK:MGR,-,INTRACOMM,ACCESS,MANAGER,ILLEGAL,REQUEST LK:MERR EQU $ LK:ILL EQU $ COPY =ILLOP:,A COPY A,TI:SOF(Y) SAVE STATUS COPY =0,A CLEAR A RSK TBOX LK:MGR,-,INTRACOMM,ACCESS,MANAGER,WRITE,FILE,MARK LK:WF EQU $ * COPY =LKEOF,A PUT FIXED EOF BUFFER COPY A,TI:BUF(Y) DATA INTO COPY =2,A THE TIB COPY A,TI:BCT(Y) JSK LK:WR USE 'WRITE' PROCESSING TO SEND EOF COPY =0,A CLEAR A COPY A,TI:BUF(Y) CLEAR TIB BUF AND CNT SO COPY A,TI:BCT(Y) USER CAN'T DIDDLE IT RSK * THE FOLLOWING WORD IS NEVER ALTERED (REENTRANCY OK) LKEOF WORD '/*' END OF FILE INDICATOR END TITL INTRACOMM ACCESS MANAGER - 93702-20E000 BOX LK:TOP,-,CHECK,FOR,OPEN,LINK NAM LK:TOP * INT: REL SHARABLE INT: ROMMABLE INT: LK:TOP EQU $ COPY TI:FCB(Y),X COPY LC:FLG(X),A TBIT LCF:OP,A JT OV,LK:TOP10 COPY =FNOP:,A COPY A,TI:SOF(Y) RSK * LK:TOP10 EQU $ COPY K,X IMS 0(X) RSK END TITL INTRACOMM ACCESS MANAGER - 93702-20E000 BOX LK:SB,-,EXTRACT,SB,FROM,FUNCTION,CODE NAM LK:SB * INT: REL SHARABLE INT: ROMMABLE INT: LK:SB EQU $ COPY TI:FC(Y),A TBIT SB:,A LOAD OV WITH ODD-BYTE FLAG COPY =0,A ROTATE A,LO,1 COPY A,TI:SB(Y) RSK END TITL INTRACOMM ACCESS MANAGER - 93702-20E000 BOX LK:BSY,-,START,OUTPUT,ACTIVITY,IF,IDLE * * Y=TIB NAM LK:BSY EXTR R:ISIG * INT: REL SHARABLE INT: ROMMABLE INT: LK:BSY EQU $ COPY TI:FCB(Y),X LCB ADDRESS COPY LC:PFG(X),A PROTOCOL FLAG WORD TBIT PF:BSY,A JF OV,LK:BSY02 * COPY LC:OCIB(X),X SIGNAL OUTPUT ACTIVITY IF IDLE ADD =CI:CSM,X JSK R:ISIG * LK:BSY02 EQU $ RSK END TITL INTRACOMM ACCESS MANAGER - 93702-20E000 BOX LK:INIT,-,LCB,INITIALIZATION,ROUTINE * Y=TIB NAM LK:INIT * INT: REL SHARABLE INT: ROMMABLE INT: LK:INIT EQU $ PUSH XA:V COPY TI:FCB(Y),Y LOAD LCB ADDRESS IN Y * * INITIALIZE LCB BUFFERS * COPY =0,A COPY =3,X COPY A,*LC:HDR(X,Y) CLEAR OUTPUT HEADER BUFFER JNED X,$-1 COPY =4,X COPY A,*LC:PRI(X,Y) CLEAR INPUT HEADER BUFFER JNED X,$-1 COPY,  =6,X COPY A,*LC:MSG(X,Y) CLEAR RECEIVED MESSAGE COUNT BUFFER JNED X,$-1 COPY Y,X * * INITITLIZE LCB * COPY LC:PFG(Y),A ***** TBIT PF:MAINT,A *****ARE WE IN MAINTENANCE MODE? JT OV,$+3 *****YES-JUMP COPY =PFGS,A *****NO JMP $+2 ***** COPY =PFGSM,A ***** COPY A,LC:PFG(Y) PROTOCOL FLAGS COPY =0,A COPY A,LC:A(Y) MSG ACKED COPY A,LC:R(Y) MSG RECD COPY A,LC:N(Y) HIGHEST MSG SENT COPY A,LC:X(Y) LAST MSG SENT COPY A,*LC:INSM(Y) INPUT SEMAPHORE COPY A,*LC:OUSM(Y) OUTPUT SEMAPHORE COPY A,LC:CLC(Y) COPY =1,A COPY A,LC:T(Y) NEXT MSG TO SEND * * INITIALIZE CIBS AND DEVICES * COPY LC:ICIB(X),Y INPUT CIB COPY X,CI:LCB(Y) PUT LCB ADDRESS IN CIB * COPY =L:OP,A COPY A,CI:FC(Y) OPEN FUNCTION COPY Y,A JSK *CI:FUN(Y) PERFORM OPEN * JSK *CI:STA(Y) OPEN STATUS RETURN JNE A,LK:INIT1 INPUT DEVICE FAILED COPY LC:OCIB(X),Y OUTPUT CIB COPY X,CI:LCB(Y) LCB ADDRESS IN CIB * COPY =L:OP,A COPY A,CI:FC(Y) OPEN FUNCTION COPY Y,A JSK *CI:FUN(Y) PERFORM OPEN FUNCTION * JSK *CI:STA(Y) STATUS RETURN JNE A,LK:INIT2 OUTPUT DEVICE FAILED JMP LK:INIT3 NO ERRORS LK:INIT1 COPY =IDVF:,A INPUT DEVICE FAILED JMP LK:INIT3 LK:INIT2 COPY =ODVF:,A OUTPUT DEVICE FAILED LK:INIT3 COPY K,X GET STACK COPY LAST:Y(X),Y RESTORE Y=TIB COPY A,TI:SOF(Y) SAVE SOFTWARE STATUS COPY A,LAST:A(X) SAVE REG A FOR RETURN CODE POP RSK * * INITIAL VALUE OF PROTOCOL FLAGS PFGS MASK PF:SEL,PF:STRT,PF:TON PFGSM MASK PF:SEL,PF:STRT,PF:TON,PF:MAINT END TITL INTRACOMM ACCESS MANAGER - 93702-20E000 BOX LK:IBGIN,-,LK:OBGIN,-,INTRACOMM,PROTOCOL,PROCESS,TCB,BEGIN,BLOCK NAM LK:IBGIN NAM LK:OBGIN EXTR LK:INP EXTR LK:OUT * INT: REL SHARABLE INT: ROMMABLE INT: BGIN:A LK:IBGIN,IN:TCB,:5500 * BGIN:A LK:OBGIN,OUT:TCB,:5000 * TDB:A IN:TCB,LK:INP,0,0,:40,0,:7FFF TDB:A OUT:TCB,LK:OUT,0,0,:40,0,:7FFF END TITL INTRACOMM ACCESS MANAGER - 93702-20E000 BOX LK:BGIN,-,START,PROTOCOL,ACTIVITY * Y = TIB * TI:T1(Y) = BEGIN BLOCK * NAM LK:BGIN EXTR R:BGIN * INT: REL SHARABLE INT: ROMMABLE INT: LK:BGIN EQU $ PUSH XA:V COPY TI:T1(Y),X GET BEGIN BLOCK ADDRESS COPY TI:FCB(Y),Y YREG POINTS TO LCB NOW PUSH XA:V JSK R:BGIN INVOKE BEGIN SERVICE, XREG=ADDR OF PARMS POP POP RSK END TITL INTRACOMM ACCESS MANAGER - 93702-20E000 BOX LK:LOCK,-,LOCK,PROTOCOL,DATABASE * Y=TIB NAM LK:LOCK EXTR R:IWAI * INT: REL SHARABLE INT: ROMMABLE INT: LK:LOCK EQU $ COPY TI:FCB(Y),X COPY LC:PSM(X),X JSK R:IWAI RSK END TITL INTRACOMM ACCESS MANAGER - 93702-20E000 BOX LK:UNLOK,-,UNLOCK,PROTOCOL,DATABASE * Y=TIB NAM LK:UNLOK EXTR R:ISIG * INT: REL SHARABLE INT: ROMMABLE INT: LK:UNLOK EQU $ COPY TI:FCB(Y),X COPY LC:PSM(X),X JSK R:ISIG RSK END R OF PARMS POP POP RSK END TITL INTRACOMM ACCESS MANAGER - 93702-20E000 BOX LK:LOCK,-,LOCK,PROTOCOL,DATABASE * Y=TIB NAM LK:LOCK EXTR R:IWAI * INT: REL SHARABLE INT: ROMMABLE INT: LK:LOCK EQU $ COPY TI:FCB(Y),X COPY LC:PSM(X),X JSK R:IWAI RSK END TITL INTRACOMM ACCESS MANAGER - 93702-20E000 BOX LK:UNLOK,-,UNLJLK:MGR O0SEGMENTBLANK INT: o KLK:CLF LK:THX LK:DTIMIKR:SPRI R:GPR LK:SNAK KLK:SACK LK:DTIMOLK:CRC KLK:SB LK:BSY LK:TOP KLK:UNLOKLK:LOCK LK:BGIN KLK:INIT LK:IBGINLK:OBGINKR:IWAI R:ISIG iig GFN9XA6- FC  C )FXC  Nh=FXC  =` A+ A6D  6h TGA+ A6^ ۠A OŸN žN `+AG  /  +  # tttttt A+ vA6NEI @(@(+KIx TG A+ ` # AEI @(@(+KIx G # t t  }AIĀ+ Gt # FXC   JDQE1NQ A1ǠA䧀 K 1 K LO 8 `+ # 2 # t tt t tt DQEQq OƄM mAk?A_6p 䦠 `+`GJIEW NNANKF  E G ` ` )`A:;A98@ ()@+*A./A -,@$%A'&@ "#@! A`aA cb@fg@edA lm@onAjkA ih@xy@{zA ~A}|@tuA wv@rs@qpA PQ@SRAVWA UT@\]A_^@ Z[@YXAHIA KJ@NO@MLA DE@GFABCAA@@JDRV:BBC O0SEGMENTBLANK INT: o iig FQI@A A@ āPA܂# @ā# JDRV:SND O0SEGMENTBLANK INT: o iig?A@6CEC # JDRV:AIB O0SEGMENTBLANK INT: o iigEF# EJDRV:AOB O0SEGMENTBLANK INT: o iigEF# e1 JDRV:INS O0SEGMENTBLANK INT: o iigE # JDRV:CNT O0SEGMENTBLANK INT: o iigF # JDRV:BBC O0SEGMENTBLANK INT: o iig FQI@A A@ āPA܂# TITL INTRACOMM EQUATES AND GENERAL MACROS - 93702-60E000 XMACRO BOX ********************************************************************* ********************************************************************* * * #1 #2 #3 #4 #5 #6 #7 #8 #9 #10 #11 #12 * ********************************************************************* ********************************************************************* * ENDM XMACRO TBOX TITL ********************************************************************** ********************************************************************** * * #1 #2 #3 #4 #5 #6 #7 #8 #9 #10 #11 #12 * ********************************************************************** ********************************************************************** * ENDM * MACRO MASK MACLAB M:: SET 0 MASK: #1,#2,#3,#4,#5,#6,#7,#8 #(-1) SET M:: ENDM MACRO MASK: IFT #(1,?)>0 M:: SET 1%#(1)++M:: MASK: #2,#3,#4,#5,#6,#7,#8 ENDC ENDM * * DOWN-LINE LOAD MACRO DLL: MACRO NOTE '*** DLL: MACRO DESTROYS ALL REGISTERS EXCEPT THE YREG ***' COPY P,X IJNE X,!DL: WORD #(2) IFT #(1,'''') IOB:A ,#(1),0,0,0,0,0 ENDC IFF #(1,'''') IOB:A ,0,0,0,0,0,0 ENDC !DL: EQU $ IFF #(1,'''') !DA: SYMATT #(1) IFT !DA:&:2000 COPY #(1),IO:LUN+1(X) ENDC IFF !DA:&:2000 COPY #(1),A COPY A,IO:LUN+1(X) ENDC ENDC EXTR DLL: JSK DLL: ENDM * LCB EQUATES * LC:FLG EQU 1 LCB FLAG WORD - EQUIVALENT TO DI:FLG LC:CLC EQU 8 CLOSE (OR OTHER ABORT ) ERROR CODE LC:PAD EQU 9 NUMBER OF PAD CHARACTERS BEFORE LINE TURNAROUND LC:PFG EQU 10 PROTOCOL STATE FLAGS IE. PF:XXXX LC:OPSM EQU 12 SEMAPHORE CONTROLS OPEN-CLOSE LC:OPTI EQU 13 TIB ADDRESS OF OPEN-CLOSE ACTIVITY LC:ICIB EQU 14 INPUT CIB LC:OCIB EQU 15 OUTPUT CIB LC:INSM EQU 16 SEMAPHORE CONTROLS INPUT-OUTPUT EXCLUSIVE FOR HDX LC:OUSM EQU 17 SEMAPHORE CONTROS INPUT-OUTPUT EXCLUSIVE FOR HDX LC:TIM EQU 18 NEGATIVE REPLY (FDX) OR SECECTION (HDX) TIMER VALUE LC:INM1 EQU 19 INPUT LINK MANAGEMENT PART 1 LC:OTM1 EQU 20 OUTPUT LINK MANAGEMENT PART 1 LC:INM2 EQU 21 INPUT LINK MANAGEMENT PART 2 LC:PRI EQU 23 PRIMARY HEADER INPUT BUFFER LC:ITIM EQU 24 IDLE TIMER VALUE LC:HDR EQU 25 OUTPUT HEADER BUFFER LC:MSG EQU 26 ADDRESS OF MESSAGE COUNT BUFFER LC:ERR EQU 27 ADDRESS OF ERROR COUNT BUFFER LC:THRSH EQU 28 ADDRESS OF THRESHOLD TABLE LC:DELS EQU 29 DEL BLOCK TO PREFIX HEADER BUFFER LC:R EQU 30 HIGHEST MSG NO. RECEIVED LC:N EQU 31 HIGHEST MSG XMITTED LC:A EQU 32 HIGHEST MSG ACKED LC:T EQU 33 NEXT DATA MSG TO XMIT LC:X EQU 34 LAST MSG XMITTED LC:PSM EQU 35 SEMAPHORE-CONTROLLS ACCESS TO PROTOCOL DATABASE LC:RSM EQU 36 SEMAPHORE-CONTROLLS READ REQUESTS LC:WTIB EQU 37 CURRENT ACTIVITY WRITE LC:RTIB EQU 38 CURRENT ACTIVITY READ LC:OUTQ EQU 39 OUTPUT TIB WRITE REQUEST QUEUE HEAD LC:RSN EQU 40 NAK REASON CODE LC:TMP EQU 41 LCB TEMPORARY LC:FACT EQU 42 CONSTANT FACTOR=OPEN THRESHOLD/RUNNING THRESHOLD LC:WFACT EQU 43 WORKING FACTOR=CONSTANT FACTOR OR 1 LC:BDID EQU 44 BOARD ID OF DLL AUTOLOAD ROM * *  PROTOCOL FLAG WORD EQUATES * PF:SEL EQU 15 1-THIS STATION SELECTED PF:STRT EQU 14 1-SEND START PF:STAK EQU 13 1-SEND STAC2 K PF:ACK EQU 12 1-SEND ACK (SACK) PF:REP EQU 11 1-SEND REP (SREP) PF:NAK EQU 10 1- SEND NAK (SNAK) PF:TIM EQU 8 REPLY TIMER FLAG PF:TOF EQU 9 TURN OFF HARDWARE TIMER PF:TON EQU 7 TURN ON HARDWARE TIMER PF:ACK2 EQU 6 ACK MSG FOR LINE TURNAROUND OR 'IDLE' PF:ABT EQU 5 ABORT (CLOSE) PROTOCOL PF:BSY EQU 2 1-OUTPUT PROCESS WAITING PF:MAINT EQU 0 ***** 1-MAINTENANCE MODE * * LCB FLAG WORD EQUATES * LCF:OP EQU 0 LINK OPEN * * MISC EQUATES * PRI: EQU 1 BEGIN BLOCK PRIORITY TCB: EQU 0 BEGIN BLOCK TCB ADDRESS SCOUT: EQU 6 BIT IN FMT INSTR RETURN FOR SCOUT CPU * * ABNORMAL ERRORS - CAUSE LINK SHUTDOWN * STARTED: EQU :F0 POWERFL: EQU :F1 POWERFAIL ON READ STOPPED: EQU :F2 CLOSE REQUEST COMPLETED TCBAD: EQU :F3 *****BAD TYPE CODE RCVD (DOWN-LOAD) STMAINT: EQU :F4 ***** IDVF: EQU :F5 INPUT DEVICE FAILED (ON 'OPEN') ODVF: EQU :F6 OUTPUT DEVICE FAILED (ON 'OPEN') * * ADDED TO IOS MACRO DEFINITIONS: * MD: EQU 2 *****MAINTENANCE DATA ET: EQU 4 READ ERROR TABLE ST: EQU 5 SET THRESHOLD TABLE DL: EQU 6 DOWN-LINE-LOAD EC: EQU 7 CLEAR ERROR TABLE OM: EQU 8 *****OPEN LINK FOR MAINTENANCE MC: EQU 9 *****CLOSE LINK FROM MAINTENANCE MODE * *  TIB EQUATES * TI:TMP EQU 9 TIB TEMPORARY TI:SB EQU 10 SB BIT IN DRIVER FORMAT TI:NUM EQU 11 MESSAGE NUMBER THIS WRITE TI:LNK EQU 12 WRITE TIB CHAIN TI:CRC EQU 14 OUTPUT DATA CRC TI:WAI EQU 15 SEMAPHORE - ACTIVITY WAIT FOR REQUEST COMPLETE * * CIF:IN EQU 0 INPUT ONLY ASYNC MUX CIB * * PROTOCOL CONSTANTS * SOH EQU :81 ENQ EQU :05 STRTTYPE EQU :06 STCKTYPE EQU :07 NAKTYPE EQU :02 ACKTYPE EQU :01 REPTYPE EQU :03 LOADTYPE EQU :1B FILL EQU 0 SEL EQU 8 MAINTMSG EQU 9 ***** OUT EQU 8 * * CIB EQUATES (NON-STANDARD) * CI:OPT EQU 24 MUX OPTION TABLE CI:STA EQU 10 STATUS FUNCTION VECTOR CI:RST EQU 4 RESET COMMAND WORD FOR ASYNC MUX CI:CHR EQU 7 MESSAGE FRAMING CHARACTER DETECTED CI:FC EQU 8 FUNCTION CODE (WR,RD,SYN,IDL,RST,OP) CI:IBF EQU 9 BUFFER ADDRESS CI:SB EQU 16 SECOND BYTE FLAG CI:ICT EQU 17 BYTE COUNT CI:LCB EQU 18 LCB ADDRESS CI:IDL EQU 25 IDLE DATA INTERRUPT ROUTINE CI:DI EQU 25 DATA INTERRUPT ROUTINE CI:ICNT EQU 30 IDLE COUNT CI:Y EQU 30 Y SAVE CI:Q EQU 31 Q SAVE CI:A EQU 32 A SAVE CI:HDR EQU 33 ADDRESS OF HEADER BUFFER CI:HTC EQU 34 HEADER TICK COUNT CI:DTC EQU 35 DATA TICK COUNT CI:CTC EQU 36 DATA CRC TICK COUNT CI:ITC EQU 37 IDLE TICK COUNT CI:PTC EQU 38 PAD CHAR TICK COUNT CI:SPC EQU 39 TIMER SHIFTS PER CHARACTER CI:WBT EQU 40 TIMER BASE TICK COUNT * * HANDLER FUNCTIONS * L:WR EQU 0 WRITE L:RD EQU 1 READ L:SYN EQU 2 SYNCHRONIZE (FRAME HEADER) L:IDL EQU 3 IDLE (SKIP BYTES) L:RST EQU 4 RESET L:OP EQU 5 OPEN * * HARDWARE DEVICE INDEPENDENT ERROR CODES * * - BOTH INPUT AND OUTPUT ERRORS - (:0 TO :7) * NORML: EQU :0 NORMAL STATUS ABT: EQU :40 ABT PROTOCOL HDWR: EQU :1 HARDWARE ERROR - UNEXPECTED INTERRUPT WITH GOOD STATUS LE:HDW EQU HDWR:&:F IC:LDSR: EQU :2 LOST DSR MODEM SIGNAL LE:DSR EQU IC:LDSR:&:F TIMER: EQU :13 WATCHDOG TIMER EXPIRED LE:TIM EQU TIMER:&:F POWER: EQU :24 POWER FAIL DETECTED LE:PWR EQU POWER:&:F LCTS: EQU :5 LOST CLEAR TO SEND LE:CTS EQU LCTS:&:F NAKS: EQU :6 RECEIVED NAKS LE:NAK EQU NAKS:&:F * * - INPUT ERRORS ONLY - (:8 TO :F) * IC:OE: EQU :8 HARDWARE OVERRUN DETECTED LE:OVR EQU IC:OE:&:F LCD: EQU :9 LOST CARRIER DETECT MODEM LE:CDT EQU LCD:&:F HCRC: EQU :A HEADER CRC ERROR LE:HCR EQU3  HCRC:&:F BUF: EQU :3B NO DATA BUFFER AVAILABLE LE:BUF EQU BUF:&:F SIZ: EQU :3C DATA BUFFER TOO SMALL LE:SIZ EQU SIZ:&:F OPERR: EQU :D UNACCEPTABLE MESSAGE DURING OPEN LE:MSG EQU OPERR:&:F DCRC: EQU :E DATA CRC ERROR LE:DCR EQU DCRC:&:F * * HEADER MESSAGE EQUATES * HDR:1 EQU 0 HDR:2 EQU 1 HDR:3 EQU 2 HDR:4 EQU 3 HDR:5 EQU 4 * * NAK REASON CODED * HCRC:NAK EQU 1 HEADER CRC ERROR DCRC:NAK EQU 2 DATA CRC ERROR REP:NAK EQU 3 REP MSG GENERATES NO ACK BUF:NAK EQU 8 NO DATA BUFFER AVAILABLE OE:NAK EQU 9 OVERRUN MOD:NAK EQU 10 MODEM STATUS ERROR NOM:NAK EQU 14 DLL ROM RCVD NON-MAINT MSG TC:NAK EQU 15 *****BAD TYPE CODE (DOWN-LOAD) SIZE:NAK EQU 16 MESSAGE TO LONG FOR AVAILABLE BUFFER FMT:NAK EQU 17 BAD HEADER FORMAT SAVE END :&:F * * HEADER /MACRO DF1.INT:AMX(D=SF.GEN+SF.IOS+SF.IOSD+DF1.INT) OM790111120000OM790111120000OM790111120000 TITL INTD.MAC - INTRACOMM TABLE BUILD MACROS - 93702-61E000 * MACRO TO SPECIFY BOARD ID FOR DOWN-LOADING * XCOM:C MACRO X:CE#(1) SET 0 * IFF #(1,?)=4 NOTE E,'##(1)--INVALID LINK NAME (PARAMETER 1)' NOTE 'MUST BE 4 CHARACTERS' X:CE#(1) SET 1 ENDC * CA:T1 SET #(2,':')+1 CA:T2 SET #(2,?) * IFT :#(2,CA:T1,CA:T2)<1 NOTE E,'##(1)--INVALID BOARD ID (PARAMETER 2)' NOTE 'MUST BE IN RANGE OF 1 TO :E' X:CE#(1) SET 1 ENDC * IFT :#(2,CA:T1,CA:T2)>:E NOTE E,'##(1)--INVALID BOARD ID (PARAMETER 2)' NOTE 'MUST BE IN RANGE OF 1 TO :E' X:CE#(1) SET 1 ENDC * IFT #(1,?)=4 X:C1#(1) SET :#(2,CA:T1,CA:T2) ENDC * ENDM * * * * MACRO TO SET TIMERS AND PAD CHARACTERS * XCOM:B MACRO X:BE#(1) SET 0 * IFF #(1,?)=4 NOTE E,'##(1)--INVALID LINK NAME (PARAMETER 1)' NOTE 'MUST BE 4 CHARACTERS' X:BE#(1) SET 1 ENDC * IFT #(1,?)=4 * IFT #(2,?) X:B1#(1) SET #(2) ENDC * IFT #(3,?) X:B2#(1) SET #(3) ENDC * IFT #(4,?) * IFT #(4)>8 NOTE E,'##(1)--INVALID PAD CHARACTER COUNT (PARAMETER 4)' NOTE 'MUST BE IN RANGE OF 0 TO 8' X:BE#(1) SET 1 ENDC * X:B3#(1) SET #(4) ENDC * IFT #(5,?) * IFT #(5)>8 NOTE E,'##(1)--INVALID PAD CHARACTER COUNT (PARAMETER 5)' NOTE 'MUST BE IN RANGE OF 0 TO 8' X:BE#(1) SET 1 ENDC * X:B4#(1) SET #(5) ENDC * ENDC * ENDM * * * *  MACRO TO CONVERT 'K' TO THOUSANDS (19.2K TO 19200) * XCOM:A MACRO XCA:1 SET #(1,'.') XCA:2 SET #(1,?) * IFT #(1,'K') XCA:2 SET XCA:2-1 ENDC * IFT XCA:1=0 #(2) SET #(1,1,XCA:2) ENDC * IFF XCA:1=0 * IFT XCA:1=XCA:2 XCA:4 SET XCA:4-1 #(2) SET #(1,1,XCA:2) ENDC * IFF XCA:1=XCA:2 XCA:3  SET XCA:1-1 XCA:1 SET XCA:1+1 #(2) SET #(1,1,XCA:3)#(1,XCA:1,XCA:2) ENDC * ENDC * IFT #(1,'K') #(2) SET #(2)*100 * IFT XCA:1=0 #(2) SET #(2)*10 ENDC * ENDC * ENDM * * * * MACRO TO CREATE INTRACOMM CIB * COMM:C MACRO NAM C:#(1)#(3) C:#(1)#(3) EQU $ EXTR I:EOB,#(2):FUN,#(2):STAT,R:SA12 4  CHAN CIB: WORD #(3) RES 2,0 WORD CA:RC#(3) WORD CA:DV#(3) WORD CA:IV#(3) RES 3,0 WORD #(2):STAT WORD #(2):FUN JST R:SA12 COPY =$-CI:EOB-1,X JMP *$+1 WORD I:EOB RES 8,0 IFT CA:P6=4 WORD !X SIN 3 SELP A,CA:DA#(3)%4+7 IMS $+3  RSK JMP $-CI:IDL+CI:EOB-4 RES 4,0 WORD 10%CA:TS+CA:TB WORD 0 WORD 4%CA:TS+CA:TB WORD 16383%CA:TS WORD CA:T3+1%CA:TS+CA:TB WORD CA:TS WORD CA:TB !X EQU $ WORD CA:SVO%3+CA:SB%2+CA:PR%4+:10D WORD CA:BR%8+:3037 WORD :8105 ENDC IFT CA:P6=8 WORD 0 SIN 14 COPY Y,$+4 COPY =$-CI:DI-2,Y JMP *$+1 WORD 0 RES 4,0 WORD 10%CA:TS+CA:TB WORD 0 WORD 4%CA:TS+CA:TB WORD 16383%CA:TS WORD CA:T3+1%CA:TS+CA:TB WORD CA:TS WORD CA:TB ENDC RES 10,0 LPOOL ENDM * * * * MACRO TO CREATE INTRACOMM LCB * COMM:A MACRO CA:1#(1) SYMATT X:B1#(1) CA:2#(1) SYMATT X:B2#(1) CA:3#(1) SYMATT X:B3#(1) CA:4#(1) SYMATT X:B4#(1) CA:5#(1) SYMATT X:C1#(1) CA:6#(1) SYMATT X:BE#(1) CA:7#(1) SYMATT X:CE#(1) CA:P2 SET 1 IFF '##(2)'='H' IFF '##(2)'='HDX' CA:P2 SET 3 IFF '##(2)'='F' IFF '##(2)'='FDX' CA:P2 SET :FFFF ENDC ENDC ENDC ENDC CA:P6 SET 4 IFF '##(6)'='AM' CA:P6 SET 8 IFF '##(6)'='SS' CA:P6 SET :FFFF ENDC  ENDC CA:P26 SET CA:P2+CA:P6 IFT CA:5#(1)&:80 X:C1#(1) SET 0 ENDC XCOM:A #(3),CA:T9 CA:BR SET 0 CA:TM SET 80 CA:TB SET 0 CA:TS SET 2 IFF CA:T9=50 CA:BR SET 1 CA:TM SET 64 CA:TB SET 256 CA:TS SET 1 IFF CA:T9=75 CA:BR SET 2 CA:TB SET 196 CA:TS SET 0 IFF CA:T9=110 CA:BR SET 3 CA:TM SET 56 CA:TB SET 155 IFF CA:T9=134 IFF CA:T9=1345 IFF CA:T9=135 CA:BR SET 4 CA:TB SET 128 IFF CA:T9=150 CA:BR SET 5 CA:TB SET 64 CA:TS SET -1 IFF CA:T9=300 CA:BR SET 6 CA:TM SET 48 CA:TB SET 32 CA:TS SET -2 IFF CA:T9=600 CA:BR SET 7 CA:TS SET -3 IFF CA:T9=1200 CA:BR SET 8 CA:TM SET 40 CA:TB SET 24 IFF CA:T9=1800 CA:BR SET 9 CA:TB SET 22 IFF CA:T9=2000 CA:BR SET :A CA:TB SET 16 CA:TS SET -4 IFF CA:T9=2400 CA:BR SET :B CA:TM SET 32 CA:TB SET 12 IFF CA:T9=3600 CA:BR SET :C CA:TB SET 8 IFF CA:T9=4800 CA:BR SET :D CA:TM SET 24 CA:TB SET 12 CA:TS SET -5 IFF CA:T9=7200 CA:BR SET :E CA:TB SET 8 IFF CA:T9=9600 CA:BR SET :F CA:TB SET 4 IFF CA:T9=19200 CA:BR SET :FFFF ENDC ENDC  ENDC ENDC ENDC ENDC ENDC ENDC ENDC ENDC ENDC ENDC ENDC ENDC ENDC ENDC ENDC ENDC CA:TM SET CA:P6-4*2+CA:TM IFT CA:1#(1)&:80 X:B1#(1) SET CA:TM ENDC IFT CA:2#(1)&:80 IFT CA:P2=1 X:B2#(1) SET X:B1#(1)/8 ENDC IFT CA:P2=3 X:B2#(1) SET X:B1#(1)*2 ENDC ENDC IFT CA:3#(1)&:80 X:B3#(1) SET 8 IFT CA:P2=1 X:B3#(1) SET 2 ENDC ENDC IFT CA:4#(1)&:80 X:B4#(1) SET 0 ENDC CA:PR SET 0 IFF '##(4)'='N' IFF '##(4)'='NONE' CA:PR SET 1 IFF '##(4)'='O' IFF '##(4)'='ODD' CA:PR SET 3 IFF '##(4)'=5 'E' IFF '##(4)'='EVEN' CA:PR SET :FFFF ENDC ENDC ENDC ENDC ENDC ENDC  XCOM:A #(5),CA:T9 CA:SB SET 1 IFF CA:T9=1 CA:SB SET 2 IFF CA:T9=15 CA:SB SET 3 IFF CA:T9=2 CA:SB SET :FFFF ENDC ENDC ENDC CA:T1 SET #(7,':')+1 CA:T2 SET #(7,?) CA:T3 SET #(8,':')+1 CA:T4  SET #(8,?) IFT CA:P6=4 CA:SVO SET 0 CA:RC0 SET :A000 CA:CH0 SET :#(7,CA:T1,CA:T2)**:F CA:DA0 SET  :#(7,CA:T1,CA:T2)**:F0%-4 CA:DV0 SET CA:DA0%3+CA:CH0%1 CA:IV0 SET :#(8,CA:T3,CA:T4)%-7%4+CA:CH0%3 ENDC IFT  CA:P26=7 CA:SVO SET 1 CA:RC0 SET :2000 CA:RC1 SET :8000 CA:DA1 SET CA:DA0 CA:DV1 SET CA:DV0 CA:IV1 SET CA:IV0+:40 ENDC IFT CA:P6=8 CA:RC0 SET 0 CA:DV0 SET :#(7,CA:T1,CA:T2) CA:IV0 SET :#(8,CA:T3,CA:T4)  ENDC IFT CA:P26=11 CA:T5 SET #(9,':')+1 CA:T6 SET #(9,?) CA:T7 SET #(10,':')+1 CA:T8 SET #(10,?) CA:RC1 SET 0 CA:DV1 SET CA:DV0+2 CA:IV1 SET CA:IV0+8 IFF CA:T6=0 CA:DV1 SET :#(9,CA:T5,CA:T6) ENDC IFF CA:T8=0 CA:IV1 SET :#(10,CA:T7,CA:T8) ENDC ENDC * CA:NT1 SET 0 CA:NT2 SET 0 IFT CA:P26=11 IFF CA:5#(1)&:80 IFF CA:DV0+2=CA:DV1 CA:NT1 SET 1 ENDC IFT CA:DV0&:3 CA:NT2 SET 1 ENDC ENDC ENDC CA:E SET 0 IFT CA:6#(1)&:80 X:BE#(1) SET 0 ENDC IFT CA:7#(1)&:80 X:CE#(1) SET 0 ENDC IFF #(1,?)=4 NOTE E,'##(1)--INVALID LINK NAME (PARAMETER 1),' NOTE 'MUST BE 4 CHARACTERS' CA:E SET 1 ENDC IFT CA:P2=:FFFF NOTE E,'##(1)--INVALID LINE TYPE (PARAMETER 2),' NOTE 'ONLY F[DX] OR H[DX] VALID' CA:E SET 1 ENDC IFT CA:BR=:FFFF  NOTE E,'##(1)--INVALID BAUD RATE (PARAMETER 3)' CA:E SET 1 ENDC IFT CA:PR=:FFFF NOTE E,'##(1)--INVALID PARITY (PARAMETER 4),' NOTE 'ONLY N[ONE],O[DD],OR E[VEN] VALID' CA:E SET 1 ENDC IFT CA:SB=:FFFF  NOTE E,'##(1)--INVALID STOP BIT (PARAMETER 5),' NOTE 'ONLY 1,1.5,OR 2 VALID' CA:E SET 1 ENDC IFT CA:P6=:FFFF NOTE E,'##(1)--INVALID DEVICE TYPE (PARAMETER 6),' NOTE 'ONLY AM OR SS VALID' CA:E SET 1  ENDC IFT CA:P6=4 IFT CA:DA0<1 NOTE E,'##(1)--INVALID DEVICE ADDRESS,' NOTE 'MUST BE IN RANGE OF 1 TO :F' CA:E SET 1 ENDC IFT CA:CH0>7 NOTE E,'##(1)--INVALID CHANNEL ADDRESS,' NOTE 'MUST BE IN RANGE OF 0 TO 7' CA:E SET 1 ENDC ENDC IFT CA:P26=11 IFT CA:DV0=CA:DV1 NOTE E,'##(1)--INVALID DEVICE CONFIGURATION,' NOTE 'FDX REQUIRES 2 DIFFERENT DEVICE ADDRESSES' CA:E SET 1 ENDC IFT  CA:IV0=CA:IV1 NOTE E,'##(1)--INVALID DEVICE CONFIGURATION,' NOTE 'FDX REQUIRES 2 DIFFERENT INTERRUPT VECTORS' CA:E SET 1 ENDC ENDC IFT CA:NT1+CA:NT2 NOTE W,'##(1)--NOT CONFIGURED FOR DOWNLOADING,' IFT CA:NT2 NOTE 'OUTPUT DEV ADDR NOT MULTIPLE OF 4' ENDC IFT CA:NT1 NOTE 'INPUT DEV ADDR NOT :##(7,CA:T1,CA:T2)+2' ENDC ENDC IFF CA:E=0 NOTE W,'TABLES NOT CREATED DUE TO COMM:A ERRORS' ENDC IFF X:BE#(1)=0 NOTE W,'TABLES NOT CREATED DUE TO XCOM:B6  ERRORS' ENDC IFF X:CE#(1)=0 NOTE W,'TABLES NOT CREATED DUE TO XCOM:C ERRORS' ENDC * IFT X:BE#(1)+X:CE#(1)+CA:E=0 IFT CA:P26=9 IFF CA:5#(1)&:80 NOTE 'DEVICE ADDRESS :##(7,CA:T1,CA:T2)+2 RESERVED FOR DLL' ENDC ENDC IFT CA:P26=11 IFT CA:T6=0 NOTE '##(1)--INPUT DEV ADDR DEFAULTED TO :##(7,CA:T1,CA:T2)+2' ENDC IFT CA:T8=0 NOTE '##(1)--INPUT INT VECT DEFAULTED TO :##(8,CA:T3,CA:T4)+8' ENDC ENDC NAM D:#(1) D:#(1) EQU $ EXTR LK:MGR,LK:INM1#(2,1,1),LK:INM2#(2,1,1),LK:OTM1#(2,1,1) WORD 0 WORD :8000 RES 2,0 BYTE '##(1)' WORD 0 WORD LK:MGR WORD 0 WORD X:B4#(1) &&&& WORD 0 WORD :F0AF WORD 1 WORD 0 IFT CA:P26=5  WORD C:#(6)#(7,CA:T1,CA:T2)0 WORD C:#(6)#(7,CA:T1,CA:T2)0 ENDC IFT CA:P26=7 WORD C:#(6)#(7,CA:T1,CA:T2)1 WORD C:#(6)#(7,CA:T1,CA:T2)0 ENDC IFT CA:P26=9 WORD C:#(6)#(7,CA:T1,CA:T2)0  WORD C:#(6)#(7,CA:T1,CA:T2)0 ENDC IFT CA:P26=11 WORD C:#(6)#(7,CA:T1,CA:T2)1 WORD C:#(6)#(7,CA:T1,CA:T2)0 ENDC WORD !A+2 WORD !A WORD -X:B1#(1) &&&& WORD LK:INM1#(2,1,1)  WORD LK:OTM1#(2,1,1) WORD LK:INM2#(2,1,1) WORD 0 WORD !B WORD -X:B2#(1) &&&&  WORD !D WORD !D+4 WORD !D+:B WORD !D+:1B WORD X:B3#(1) &&&& RES 5,0  WORD !A+4 WORD !A+6 RES 5,0 WORD 3 WORD 0 WORD X:C1#(1) RES 10,0 * !A EQU $  WORD 0 WORD SD:CHK WORD 0 WORD SD:CHK WORD 1 WORD SD:CHK WORD 1 WORD SD:CHK !B RES 5,0 RES 4,:FFFF &&&& !D RES 4,0 RES 7,0 RES 16,0 RES 16,0 CA:T3 SET X:B4#(1) * IFT CA:P26=5 COMM:C #(6)#(7,CA:T1,CA:T2),AMX,0 ENDC IFT CA:P26=7 COMM:C #(6)#(7,CA:T1,CA:T2),AMX,0 COMM:C #(6)#(7,CA:T1,CA:T2),AMX,1 ENDC IFT CA:P26=9 COMM:C #(6)#(7,CA:T1,CA:T2),SIO,0 ENDC IFT CA:P26=11 COMM:C #(6)#(7,CA:T1,CA:T2),SIO,0 COMM:C #(6)#(7,CA:T1,CA:T2),SIO,1  ENDC ENDC ENDM SAVE END &&&& !D RES 4,0 RES 7,0 RES 16,0 RES 16,0 CA:T3 SET X:B4#(1) * IFT CA:P26=5 COMM:C #(6)#(7,CA:T1,CA:T2),AMX,0 ENDC IFT CA:P26=7 COMM:C #(6)#(7,CAJLK:MGR O0SEGMENTBLANK INT: o KLK:CLF LK:THX LK:DTIMIKR:SPRI R:GPR LK:SNAK KLK:SACK LK:DTIMOLK:CRC KLK:SB LK:BSY LK:TOP KLK:UNLOKLK:LOCK LK:BGIN KLK:INIT LK:IBGINLK:OBGINKR:IWAI R:ISIG iig GFN9XA6FC  C )FXC  Nh=FXC  =` A+ A6D  6h TGA+ A6^ ۠A OŸN žN `+AG  /  +  # tttttt A+ vA6NEI @(@(+KIx TG A+ ` # AEI @(@(+KIx G # t t  }AIĀ+ Gt # FXC   JDQE1NQ A7 1ǠA䧀 K 1 K LO 8 `+ # 2 # t tt t tt DQEQq OƄM mAk?A_6p 䦠 `+`GJIEW NNANKF  E G ` ` )`A:;A98@ ()@+*A./A -,@$%A'&@ "#@! A`aA cb@fg@edA lm@onAjkA ih@xy@{zA ~A}|@tuA wv@rs@qpA PQ@SRAVWA UT@\]A_^@ Z[@YXAHIA KJ@NO@MLA DE@GFABCAA@@JDRV:BBC O0SEGMENTBLANK INT: o iig FQI@A A@ āPA܂# @ā# JDRV:SND O0SEGMENTBLANK INT: o iig?A@6CEC # JDRV:AIB O0SEGMENTBLANK INT: o iigEF# EJDRV:AOB O0SEGMENTBLANK INT: o iigEF# eJDRV:INS O0SEGMENTBLANK INT: o iigE # JDRV:CNT O0SEGMENTBLANK INT: o 9 iigF # JDRV:BBC O0SEGMENTBLANK INT: o iig FQI@A A@ āPA܂# @ā# JDRV:SND O0SEGMENTBLANK INT: o iig?A@6CEC # JDRV:AIB O0SEGMENTBJAMX:FUN O0SEGMENTBLANK INT: o  KAMF:OP AMF:RST AMF:IDL KAMF:SYN AMF:RD AMF:WR iigC @`HDC ttttttJAMF:OP O0SEGMENTBLANK INT: o BKDRV:SND LK:PFR AMF:WMR KAMF:WSC AMF:WOT R:IWAI KI:EOB  iig A݄A WVO` FA6aU ` +WY U `U `+WL U `  U `+ Uc # tttttttJAMF:WR O0SEGMENTBLANK INT: o  KDRV:SND DRV:AOB DRV:BBC iigc # tt@tJAMF:RD O0SEGMENTBLANK INT: o  KDRV:AIB DRV:SND DRV:BBC iigc # ttHtJAMF:SYN O0SEGMENTBLANK INT: o KDRV:SND iig F`  ^c # ItJAMF:IDL O0SEGMENTBLANK INT: o KDRV:SND iig F` Q^c # HtJAMF:RST O0SEGMENTBLANK INT: o KDRV:SND iigDc # tJAMF:WOT O0SEGMENTBLANK INT: o KDRV:AOB DRV:BBC DRV:SND iig XI Q # tt tJAMF:WSC O0SEGMENTBLANK INT: o KDRV:AOB DRV:BBC DRV:SND iig X I Q P# tttJAMF:WMR O0SEGMENTBLANK INT: o KDRV:SND iig# tJAMX:STATO0SEGMENTBLANK INT: o  KAMS:OP AMS:RST AMS:IDL KAMS:SYN AMS:RD AMS:WR iigC @`HC ttttttJAMS:OP O0SEGMENTBLANK INT: o  KAMS:RTN iig A6DW  tJAMS:WR O0SEGMENTBLANK INT: o KDRV:CNT AMS:RTN DRV:INS iig 6 B  tttJAMS:RD O0SEGMENTBLANK INT: o KDRV:CNT AMS:RTN AMS:ERR KDRV:INS iig 6` ttttJAMS:SYN O0SEGMENTBLANK INT: o KAMS:ERR AMS:RTN DRV:INS iig 6Xa ` a NyXG tttJAMS:IDL O0SEGMENTBLANK INT: o KDRV:SND AMS:ERR AMS:RTN KDRV:INS iig 6D6^B  ttttJAMS:RST O0SEGMENTBLANK INT: o KAMS:RTN iig tJAMS:ERR O0SEGMENTBLANK INT: o  iig  #  JAMS:RTN O0SEGMENTBLANK INT: o iig`pBc # ANK INT: o KAMS:ERR AMS:RTN DRV:INS iig 6Xa ` a NyXG tttJAMS:IDL O0SEGMENTBLANK INT: o KDRV:SND AMS:ERR AMS:RTN KDRV:INS iJSIO:FUN O0SEGMENTBLANK INT: o  KSIF:OP SIF:RST SIF:IDL KSIF:SYN SIF:RD SIF:WR iigC @`HDC ttttttJSIF:OP O0SEGMENTBLANK INT: o KI:EOB DRV:SND iig A݄A WVO`  Fc # ttJSIF:RD O0SEGMENTBLANK INT: o  KDRV:AIB DRV:SND DRV:BBC iigc # tttJSIF:WR O0SEGMENTBLANK INT: o  KDRV:SND DRV:AOB DRV:BBC iigc # tt"t: JSIF:RST O0SEGMENTBLANK INT: o KDRV:SND iigc # tJSIF:SYN O0SEGMENTBLANK INT: o KSIO:DI SIO:SYN DRV:SND iig ] Gc # ttt JSIO:SYN O0SEGMENTBLANK INT: o iig `_EC C   _`^# GC C rJSIF:IDL O0SEGMENTBLANK  INT: o KSIO:DI SIO:IDL DRV:SND iig ]Qac # tttJSIO:IDL O0SEGMENTBLANK INT: o iig `_aEC C _ `^# EC `_^# JSIO:DI O0SEGMENTBLANK INT: o iigF` # JSIS:OP SIS:RST SIS:IDL JSIS:SYN SIS:RD SIS:WR JSIO:STATO0SEGMENTBLANK INT: o =KDRV:CNT SIO:ERR DRV:INS iigC @`HC +#8 gAg %BA g BA g%AaA g %BGQ `pBc # g ztttJSIO:ERR O0SEGMENTBLANK INT: o iig @@6 @6 @/6 @_6 # C `_^# JSIO:DI O0SEGMENTBLANK INT: o iigF` # JSIS:OP SIS:RST SIS:IDL JSIS:SYN SIS:RD SIS:WR JSIO:STATO0SEGMENTBLANK INT: o =KDRV:CNT SIO:ERR DRV:INS iigC @`HC +#8 gAg %BA g BA g%AaA g %BGQ `pBc # g ztttJSIO:ERR O0SEGMENTBLANK/MACRO DF1.INT.LIB=DF1.INTD.MAC(NOO,D=SF.GEN+SF.IOS+SF.IOSD+ DF1.INT(L,S))+ DF1.INT:MGR(OBJ,D=SF.RTX)+ DF1.INT:INPUT+ DF1.INT:OUTPUT+ DF1.INT:DLL+ DF1.INT:AMX+ DF1.INT:SPI+ DF1.INT:COMMON OM790111120000OM790111120000OM790111120000/MACRO DF1.INT:INPUT(D=SF.GEN+SF.IOSD+SF.IOS+DF1.INT) OM790111120000OM790111120000OM790111120000/MACRO DF1.INTD.MAC(NOO,D=SF.GEN+SF.IOS+SF.IOSD+SF.RTX+DF1.INT(L)) OM790111120000OM790111120000OM790111120000/MACRO DF1.INT:COMMON(D=SF.GEN+SF.IOS+SF.IOSD+DF1.INT) ; OM790111120000OM790111120000OM790111120000/MACRO DF1.INT:DLL(D=SF.GEN+SF.IOS+SF.IOSD+DF1.INT) OM790111120000OM790111120000OM790111120000/MACRO DF1.INT:MGR(D=SF.GEN+SF.IOS+SF.IOSD+DF1.INT+SF.RTX) OM790111120000OM790111120000OM790111120000/MACRO DF1.INT:SPI(D=SF.GEN+SF.IOS+SF.IOSD+DF1.INT) OM790111120000OM790111120000OM790111120000< = > ? @ A B C D E F G H I J K L