DSN * /--- FILE TYPE = E * /--- BLOCK IDENT 00 000 86/05/28 13.59 IDENT DSN,MAI DATA SERVICES NETWORK DRIVER PERIPH SST SYSCOM TITLE DSN - DRIVER FOR DATA SERVICES NETWORK. COMMENT DSN - DRIVER FOR DATA SERVICES NETWORK. COMMENT COPYRIGHT CONTROL DATA CORP. 1982. BASE M LIST F SPACE 5,11 *** DSN - DRIVER FOR DATA SERVICES NETWORK. * * THIS PP ROUTINE DRIVES THE DATA SERVICES NETWORK * VIA CCP 2.0. * * THIS PROTOCOL IS BASED ON THE I.B.M. BI-SYNC * PROTOCOL. THERE ARE SEVERAL DOCUMENTS WHICH MAY * BE USEFUL; THE MOST IMPORTANT FOR THIS PROGRAM IS * ',EXT. SPEC., CDC/SBC DATA SERVICES NETWORK INTER- * FACE SPECIFICATIONS', (ANCIENT DOCUMENT ^$3436.03, * 09/30/77. OTHERS ARE'; 'E'R'S FOR 'C'C'P 2, 74784700, * AUG 1975; 'C'C'P 2 SYSTEM PROGRAMMERS HANDBOOK, * 'T'O'S131, 07/22/82. * * THE 2550 IS DOWNLINE LOADED AT INITIALIZATION. SPACE 5,11 * COMMUNICATION WITH PLATO IS VIA THE KEY BUFFER * AND TWO CIRCULAR BUFFERS USED BY THE FRAMATTER. * * DURING INITIALIZATION, THE PP READS THE RAX FROM * PLATO,S EXCHANGE PACKAGE AND BIASES *DSNI* WORD * TO FIND THE POINTER TO ITS PARAMETER PACKAGE. * * FORMAT OF PARAMETER PACKAGE * * WORD 0 - PLATO KEY BUFFER POINTERS * * 12/NUMBER OF 2550S TO SUPPORT * 24/ADDRESS OF POLLING LIST, * 24/ADDRESS OF KEY BUFFER * * WORD 1 - STATION BANK POINTERS * * 12/*BANKADD* OFFSET INTO STATION BANK * 24/STATION BANKS ESM ADDRESS * 12/TOTAL DSN SITES * 12/UNUSED * * WORD 2 - OTHER POINTERS * * 24/ASCII CONNECTION TABLE EM ADDRESS * 36/UNUSED * * WORDS 3 - 5 ARE DUPLICATED FOR EACH 2550 * * WORD 3 - PP TO FRAMAT BUFFER * * 12/LENGTH OF BUFFER (LIMIT) * 24/ADDRESS OF IN/OUT POINTERS * 24/ADDRESS OF BUFFER * * WORD 4 - FRAMAT TO PP BUFFER * * 12/LENGTH OF BUFFER (LIMIT) * 24/ADDRESS OF IN/OUT POINTERS * 24/ADDRESS OF BUFFER * * WORD 5 - SITES FOR THIS 2550 * * 12/DSN FIRST SITE, * 12/NUMBER OF SITES, * 12/2550 S(D), * 12/2550 SYSTEM NUMBER, * 12/DPNC S(D) * /--- BLOCK IDENT 00 000 86/05/28 13.59 SPACE 5,11 *** EST ENTRY FOR 2550. * *T, 12/ , 12/00CH, 12/YYZZ, 12/*FE*, 12/E000 * * YY - 2550 ORDINAL * ZZ - NUMBER OF TRUNKS CONNECTED TO 2550 SPACE 5,11 ** INPUT REGISTER FORMAT * *T 18/*DSN*, 6/CP, 12/TYPE, 12/BASE, 12/ORDINAL * * TYPE = 0 - DRIVER * BASE = BASE ADDRESS FOR CM TABLES * ORDINAL = PP ORDINAL * TYPE = EST ORDINAL - RELOAD THAT 2550 * BASE = S(D) * ORDINAL = DPNC S(D) SPACE 5,11 ** SENSE SWITCH USAGE * * SSW1 = DISABLE AUTOMATIC RELOAD OF FAILED 2550S * COMMON DECKS QUAL$ EQU 1 DISABLE COMDECK AUTO-QUALIFY *CALL AIDTEXT .PTEXT IFGE OSLEV,562D NOS V2 *CALL PTEXT .PTEXT ENDIF *CALL COMPMAC *CALL COMPCHI QUAL CPS *CALL COMSCPS QUAL * QUAL MSP *CALL COMSMSP QUAL * *CALL COMSSSD .NOS501 IFGE OSLEV,501D CHRV EQU /MSP/CHRV .NOS501 ENDIF QUAL PLAT BASE D *CALL PLAP501 *CALL PLASRWX *CALL SYSCON *CALL PARAMC *CALL PCFTEXT BASE * QUAL * * /--- BLOCK DEFINES 00 000 86/05/28 14.02 2550 TITLE DEFINITIONS. MACROS SPACE 5,11 ** NWC - NETWORK CHARACTER * * DEFINE NETWORK VALUE OF A CHARACTER * THIS MACRO ADDS A PARITY BIT AND * REFLECTS THE BITS OF THE CHARACTER * *SYM NWC COD * * SYM - NAME TO EQUATE CHARACTER * COD - ASCII CODE OF CHARACTER MACRO NWC,S,A .1 MICRO 1,1, A .3 MICRO 1,, A .5 MICRO 0#".3"+1,1, 0110100110010110100101100110100110010110011 ,01001011010011001011010010110011010010110100110010110011010011001011010 ,01011001101001 .2 MICRO 0#".1"+8*".5"+1,1, 084C2A6E195D3B7F .1 MICRO 2,1, A .3 MICRO 0#".1"+1,1, 084C2A6E195D3B7F S EQU 0#".3"".2" ENDM ** OVERLAY - DEFINE AN OVERLAY * *NAME OVERLAY TITLE OVN MICRO 1,, 4X FIRST TWO CHARACTERS OF NAME OVI SET 0 OVERLAY COUNT PURGMAC OVERLAY MACRO OVERLAY,NAM,TTL OVI SET OVI+1 .O MICRO OVI,1, ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789 NAM MICRO 1,, "OVN"_".O" NAM TITLE "NAM" - TTL QUAL NAM IDENT "NAM",NAM_X TTL COMMENT DSN - TTL COMMENT COPYRIGHT CONTROL DATA CORP. 1982. OVL EQU 3R"NAM" ENDM * /--- BLOCK DEFINES 00 000 86/05/28 14.02 SPACE 5,11 * ASSEMBLY CONSTANTS DC EQU 0 DDP CHANNEL NUMBER CH EQU 0 2550 CHANNEL NUMBER DSDP EQU 2RD4 DDP EQUIPMENT NAME DSFE EQU 2RFE 2250 NAME FOR NETWORK PTRD EQU 12 FRAMAT POINTER UPDATE DELAY IBUFL EQU 102D INPUT BUFFER LENGTH FROM 2550 OBUFL EQU 98D OUTPUT BUFFER LENGTH TO 2550 MOBL EQU OBUFL MAX OUTPUT BLOCK LENGTH TO 2550 ERRNG 100D-MOBL PP-TO-2550 BLOCK SIZE TOO LARGE ERRNG OBUFL-MOBL OUTPUT BLOCK OVERFLOWS BUFFER TBUFL EQU 90D MAXIMUM FRAMAT TO PP BUFFER OVLL EQU 240 LENGTH OF OVERLAY BUFFER MXNPU EQU 2 NUMBER OF 2550S PER PP MXREL EQU 5 MAXIMUM RE-LOADS OF A 2550 DEBUG EQU 0 NON-ZERO IF DEBUGGING ENABLED * INSTRUCTIONS USED AS CONSTANTS RJMI EQU 0200 RJM UJNI EQU 0300 UJN SHNI EQU 1000 SHN LDNI EQU 1400 LDN PSNI EQU 2400 * ASCII CHARACTERS ESC NWC 1B ESC A.A NWC 61 A (LC) A.UA NWC 41 A (UC) A.C NWC 63 C (LC) A.D NWC 64 D (LC) A.UD NWC 44 D (UC) A.I NWC 69 I (LC) A.IU NWC 49 I (UC) A.L NWC 6C L (LC) A.O NWC 6F O (LC) A.P NWC 70 P (LC) A.T NWC 74 T (LC) A.UT NWC 54 T (UC) A.V NWC 76 V (LC) A.UV NWC 56 V (UC) A.7 NWC 37 7 A.COMMA NWC 2C , * ESCAPE MODE KEYS. OFFKEY EQU 1777*2 OFFKEY FROM THE TERMINAL * /--- BLOCK DIRECT CEL 00 000 82/12/02 21.37 ** DIRECT CELLS CN EQU 15 - 21 CM WORD STORAGE AB EQU CN (USED BY CLD / PRESET ONLY) KY EQU 22 KEY PT EQU 22 POINTER FOR DAYFILE MESSAGES * START OF DIRECT CELLS RESET FOR EACH 2550 CB EQU 23 BASE CONNECTION (INDEX IN TST) EQ EQU 24 2550 EQUIPMENT NUMBER SN EQU 25 SWITCH NUMBER SB EQU 26 BASE STATION NUMBER * PP TO FRAMAT ECS POINTERS FP1 EQU 27 - 30 IN/OUT POINTERS ESM ADDRESS FB1 EQU 31 - 32 ECS BUFFER ADDRESS FI1 EQU 33 IN POINTER FO1 EQU 34 OUT POINTER * FRAMAT TO PP ECS POINTERS FP2 EQU 35 - 36 IN/OUT POINTERS ESM ADDRESS FB2 EQU 37 - 40 ECS BUFFER ADDRESS FI2 EQU 41 IN POINTER FO2 EQU 42 OUT POINTER * END OF DIRECT CELLS RESET FOR EACH 2550 BT EQU 43 - 44 ECS ADDRESS OF POLLING LIST KB EQU 45 - 46 ECS ADDRESS OF KEY BUFFER IC EQU 47 6671 BUFFERED CHARACTER COUNT NI EQU IC NPU INDEX *IR EQU 50 - 54 INPUT REGISTER TB EQU 53 BASE ADDRESS OF CM TABLE PO EQU 54 PP ORDINAL IP EQU 57 INPUT BUFFER POINTER IL EQU 60 INPUT BUFFER LENGTH PL EQU 61 TERMINAL PACKET LENGTH OL EQU 62 OUTPUT BUFFER LENGTH FL1 EQU 63 LENGTH OF BUFFER 1 (LIMIT) FL2 EQU 64 LENGTH OF BUFFER 2 (LIMIT) ST EQU 65 STATION NUMBER OD EQU 66 OUTPUT DELAY COUNTER SI EQU 67 STATION INCREMENT FOR ALT S(D) * /--- BLOCK NETWORK 00 000 86/05/28 14.03 NET SPACE 5,11 ** NETWORK DEFINITIONS * TERMINAL COMMAND BLOCK DEFINITIONS TCPE EQU 0#04 2741 PARITY ERROR TCBR EQU 0#06 BREAK RECEIVED TCBA EQU 0#06 BREAK ACKNOWLEDGE TCLD EQU 0#0C LINE DROP TCHO EQU 0#12 HOLD OUTPUT TCSO EQU 0#14 SEND OUTPUT TCAO EQU 0#34 ABORT OUTPUT * MISCELLANEOUS CONSTANTS. NWTT EQU 0#3D NETWORK TERMINAL TYPE TXTT EQU 0#3F 120 CPS TEKTRONIX TERMINAL TYPE BFCH EQU 277 PARITY ERROR CHARACTER WAIT EQU 7777 CHANNEL DELAY TIME DMTX EQU 10D+1 2550 DEADMAN TIMER IN SECONDS EOM EQU 4000 END OF MESSAGE FLAG NPUS EQU 0#146 2550 PRESET DATA STARTING ADDR MXOTM EQU 100D TIME-OUT FOR MSGS TO 2550 * /--- BLOCK NETWORK 00 000 86/05/28 14.04 * ORDER WORDS. WRT EQU 3 WRT DATA TO 2550 NRI EQU 9D NOT READY FOR INPUT * COUPLER STATUS CNL EQU 4 2550 STATUS REGISTER LOADED ERRF EQU 6323 COUPLER STATUS REGISTER ERROR * 2550 STATUS. IDL EQU 1 IDLE - KEEP ALIVE INA EQU 2 INPUT AVAILABLE RYO EQU 4 READY FOR OUTPUT NRY EQU 7 NOT READY FOR OUTPUT RDP EQU 10 READY FOR DUMP * FUNCTION CODES. IND EQU 3 INPUT DATA INS EQU 4 INPUT SOFTWARE STATUS INC EQU 5 INPUT COUPLER STATUS INO EQU 6 INPUT ORDER WORD IPG EQU 7 INPUT PROGRAM FCNL EQU IPG LIMIT OF INPUT FUNCTIONS OMO EQU 10 OUTPUT MEMORY ADDRESS 0 OMT EQU 11 OUTPUT MEMORY ADDRESS 1 OTD EQU 14 OUTPUT DATA OPG EQU 15 OUTPUT PROGRAM OTO EQU 16 OUTPUT ORDER WORD SNU EQU 40 START 2550 CNU EQU 200 CLEAR 2550 CLC EQU 400 CLEAR COUPLER * 2550 CHANNEL ABORT CODES. FTOE EQU 1 FUNCTION TIMEOUT FULE EQU 2 CHANNEL EMPTY ON INPUT ATTEMPT DMTE EQU 3 2550 DEADMAN TIMEOUT OUTE EQU 4 INCOMPLETE OUTPUT TRANSFER INCE EQU 5 NO EOM ON INPUT INHE EQU 6 HUNG ON INPUT CSTE EQU 7 BAD COUPLER STATUS CMPE EQU 10 COMPARE ERROR ON LOAD NSTE EQU 11 INVALID 2550 STATUS NFFE EQU 12 LOAD FILE FORMAT ERROR OTME EQU 13 EXCEEDED TIME LIMIT FOR OUTPUT BLOCK OPLE EQU 14 LOAD BY OPERATOR REQUEST * /--- BLOCK PLATO 00 000 86/05/28 14.04 PLA SPACE 5,11 ** PLATO DEFINITIONS DSNI EQU /PLAT/DSNI ECS ADDRESS OF POINTERS OFKY EQU /PLAT/OFFKEY*2 OFF KEY SLKY EQU /PLAT/SSLKEY*2 SINGLE STATION LOGOFF KEY STBKL EQU /PLAT/PSYSLTH STATION BANK LENGTH NXKY EQU 26*2 NEXT KEY STKY EQU 32*2 STOP KEY ST1KY EQU 72*2 STOP1 KEY TTKY EQU 0#8C TERMINAL TYPE ECHO KEY SPACE 4,4 * DSN ERROR CODES - 40 ADDED IF ST HAS HEX VALUE DFPE EQU 1 DSN - FRAMAT POINTER ERROR DBOE EQU 2 DSN - BUFFER OVERFLOW BNAE EQU 3 BAD NETWORK ADDRESS USME EQU 4+40 UNKNOWN SYSTEM MESSAGE UTCE EQU 5+40 UNKNOWN TERMINAL COMMAND DERE EQU 6 ECS READ ERROR DEWE EQU 7 ECS WRITE ERROR LNFE EQU 10 LOAD FILE NOT FOUND OCME EQU 11 OVERLAYS MUST BE CM RESIDENT IUAE EQU 12 ILLEGAL USER ACCESS SOTE EQU 13 SITES OVERFLOW PP TABLES PIUE EQU 14 PORT IN USE TTBE EQU 15 T(D) TOO BIG NMLE EQU 16 NET MSG LENGTH ERROR NSBE EQU 17 NET STAT TYPE/CODE BAD ILFE EQU 20 INITIAL LOADING FAILURE LDRE EQU 21 LINE DROP PMLE EQU 22 PLATO MSG LENGTH ERROR * ECS/ESM MODE WORD / BIT .1 SET /PLAT/ESMP/12D ESMW EQU 4-.1 BYTE IN *CPUL* ESMB EQU /PLAT/ESMP-12D*.1 BIT IN THAT BYTE * /--- BLOCK MAIN 00 000 86/05/28 14.18 MAI TITLE MAI - MAIN PROCESSING LOOP. MAI SPACE 5,11 ** MAI - MAIN PROCESSING LOOP ORG PPFW MAI RJM /PRESET/PRS PRESET PROGRAM * MAIN LOOP MAI1 RJM UPD UPDATE IN/OUT POINTERS MAI2 RJM COD CHECK OUTPUT DELAYS RJM RID READ INPUT DATA NJN MAI3 IF NO DATA RJM PIB PROCESS INPUT BLOCK MAI3 LDD OD CHECK OUTPUT BEING HELD ZJN MAI4 IF NO HOLD IN PROGRESS LPN 1 ZJN MAI6 IF DELAY NOT EXPIRED RJM FOB FLUSH OUTPUT BUFFER (IF ANY) UJN MAI5 MAI4 RJM BOD BUILD OUTPUT BLOCKS MAI5 LDD OD NJN MAI6 IF OUTPUT BEING HELD RJM SNP SWITCH TO NEXT NPU NJN MAI2 IF NOT A FULL CYCLE * COMPUTE CYCLE TIME MAI6 LDC RTCL CRD CM LDC 0 START TIME WITH THIS 2550 .MAIB EQU *-1 SBD CM+1 MJN MAI8.1 IF CLOCK WRAP AROUND ZJN MAI8.1 ADC -10000 MAI8.1 ADK MXOTM PJN MAI8.2 IF TIME LIMIT NOT EXCEEDED LDN OTME OUTPUT REJECT TIMEOUT LJM MXE PROCESS ERROR * WRITE STATISTICS / PAUSE MAI8.2 BSS 0 RJM UCS RJM PSE PAUSE NJN MAI9 IF ERROR FLAG SET * UPDATE MIN PP-TO-2550 BLOCK TIME IN SUBR *BOD* LDD RA READ VALUE FROM JOB COMM. AREA SHN 6 ADN PARAMS CRD CM LDD CM MIN MSEC BETWEEN PP-2550 BLKS STM BODT FOR SUBTRACTION IN SUBR *BOD* LDD CM+1 NUM OF WORDS FREE IN FULL BLK STM BODS FOR ADDITION IN SUBR *BOD* LJM MAI1 CYCLE AGAIN MAI9 LDN 0 UJN TER1 TER SPACE 5,11 ** TER - TERMINATION PROCESS TER LDN 1 TER1 STM TERT SET TERMINATION TYPE ADD PO NJN TER3 IF NOT MAIN PP OR FATAL ERROR TER2 RJM UPD WAIT FOR OPERATOR COMMAND RJM PSE ZJN TER2 IF ERROR FLAG IS NOT SET * CALL TERMINATION OVERLAY TER3 EXECUTE TER,= LDC /TER/OVL RJM EXR * /--- BLOCK UCS 00 000 84/12/03 17.00 UCS SPACE 5,12 ** UCS - UPDATE CM STATISTICS. * * UPDATES STATS FOR ALL NPUS CONNECTED TO PP. * * USES - CM..CM+4, CN..CN+4, T1 * UCS SUBR LDN 0 STD T1 UCS1 BSS 0 LMM .SNPA NUMBER OF NPUS ZJN UCSX -- IF NO MORE NPUS LDM NUSR,T1 NUMBER OF USERS ON NPU STD CM LDM CSTS,T1 COUPLER STATUS STD CM+1 LDM SSTS,T1 CCP SOFTWARE STATUS STD CM+2 LDM NCYC,T1 CYCLE TIME FOR THIS NPU STD CM+3 LDN 0 UNUSED STD CM+4 LDM NNBI,T1 NUMBER OF BLOCKS INPUT (RCVD) STD CN LDM NNBO,T1 NUMBER OF BLOCKS OUTPUT (SENT) STD CN+1 LDM NNOR,T1 NUMBER OF OUTPUT REJECTS STD CN+2 LDM NLBS,T1 SIZE OF LAST BLOCK STD CN+3 LDM NPPB,T1 NUMBER OF PACKETS IN LAST BLOCK STD CN+4 LDD RA SHN 5 ADD T1 NPU INDEX SHN 1 ADM UMTB OFFSET TO STATS FOR THIS PP CWD CM WRITE FIRST WORD ADN 1 CWD CN WRITE SECOND WORD AOD T1 INCR TO NEXT NPU LJM UCS1 -- TOP OF LOOP * /--- BLOCK ABO 00 000 82/03/29 12.01 TITLE PLATO INTERFACE ROUTINES. ABO SPACE 5,11 ** ABO - ABORT OUTPUT TO TERMINAL * * AN ABORT ACKNOWLEDGE IS SEND TO THE FRAMATTER * AND A TERMINAL COMMAND INDICATING ABORT OUTPUT * IS SENT TO THE TERMINAL ABO SUBR LDM TST,ST ZJN ABO1 IF TERMINAL NOT ACTIVE LPC -2000 SET PERMISSION TO SEND SENT LMC 2000 STM TST,ST LDK TCAO TERMINAL CMND - ABORT OUTPUT RJM STC SEND TERMINAL COMMAND LDN 0 CLEAR OUTPUT DELAY ABO1 STM TOD,ST LDC 6000 SET ABORT OUTPUT CODE STM BUF LDD ST SBD CB ADD SB STM NETA SET STATION NUMBER LDN 1 STM NETC SET CPU WORD COUNT RJM BFO SEND COMMAND TO FRAMATTER LJM ABOX EXIT * /--- BLOCK BOD 00 000 86/05/28 14.05 BOD SPACE 5,11 ** BOD - BUILD OUTPUT DATA BLOCKS FOR NETWORK * * ENTRY - (OL) - CURRENT OUTPUT BUFFER LENGTH BODT CON 20D MIN MSEC BETWEEN PP-2550 BLKS BOD6 BSS 0 LDD OL OFFSET INTO OUTPUT BUFFER ZJN BODX -- EMPTY, EXIT SBK MOBL MINUS MAX BLOCK LENGTH ADC 4+31D-1 (DEFAULT VALUE FOR ',FULLNESS',) BODS EQU *-1 PJN BOD8 -- NOT ENOUGH ROOM, SEND IT LDK RTCL REAL TIME CLOCK CRD CM LDD CM+4 LOW-ORDER OF MSEC CLOCK SBM NTIM,NI LAST TIME A BLOCK WAS SENT PJN BOD7 -- NO CLOCK WRAP-AROUND ADC 10000B ADJUST FOR WRAP-AROUND BOD7 BSS 0 SBM BODT MINUS MIN TIME BETWEEN BLOCKS PJN BOD8 -- TIME EXPIRED, SEND BLOCK RJM PSE PAUSE FOR STORAGE MOVE UJN BOD1 -- RE-CHECK PLATO-PP BUFFER BOD8 RJM FOB FLUSH OUTPUT BUFFER BOD SUBR BOD1 LDC MOBL COMPUTE SPACE LEFT IN BUFFER SBD OL STD T4 EXECUTE BFI,= LDC 0 CHECK IF *BFI* ALREADY LOADED BODC EQU *-1 (0 - *BFI* NOT LOADED) * (1 - *BFI* IS LOADED) ZJN BOD1.5 IF NOT LOADED RJM OVL+6 EXECUTE *BFI* UJN BOD1.7 PROCESS RESPONSE BOD1.5 LDC /BFI/OVL LOAD *BFI* RJM EXR GET NEXT BLOCK FROM FRAMATTER BOD1.7 ZJP BOD6 -- NO DATA RCVD FROM CIRC BUFF LDD OL CURRENT INDEX INTO OUTPUT BUFF NJN BOD1.0 -- ALREADY SOMETHING IN THERE STM NPPB,NI ELSE, ZERO PACKET COUNT TOO BOD1.0 AOM NPPB,NI INCR NUMBER OF PACKETS IN BLOCK LDM NETA SBD SB BIAS BY BASE STATION ADD CB STD ST SET PLATO STATION NUMBER LDM NETP SBN 2 PJN BOD2 IF DATA BLOCK * PROCESS CONTROL MESSAGE LDM BUF STD T1 SBN BODL PJN BOD1.1 IF OUT OF RANGE LDM BODB,T1 STM BODA RJM ** BODA EQU *-1 BOD1.1 UJP BOD1 * /--- BLOCK BOD 00 000 86/05/28 14.05 * PROCESS DATA BLOCKS BOD2 ADN 1 STD T6 SET PPU WORD COUNT * COMPUTE OUTPUT DELAY BASED ON TERMINAL SPEED SHN 3 8 MS/CHARACTER FOR 1200 BAUD STD T1 LDM TDT,ST SHN 21-13 PJN BOD2.1 IF 1200 BAUD TERMINAL LDD T6 SHN 5 32 MS/CHARACTER FOR 300 BAUD STD T1 BOD2.1 LDD T1 RAM TOD,ST LDM TST,ST CLEAR PERMISSION TO SEND SENT ZJN BOD1.1 IF TERMINAL NOT ACTIVE LPC -2000 STM TST,ST LDD T6 LENGTH TO BE OUTPUT RJM BTH BUILD TERMINAL HEADER * MOVE DATA TO NETWORK BUFFER LDN 0 STD T1 BOD4 LDM BUF+5,T1 GET NEXT BYTE RJM INV INVERT BITS STM OBUF,OL AOD OL AOD T1 LMD T6 NJN BOD4 IF MORE DATA LJM BOD1 PROCESS NEXT BLOCK FROM FRAMAT BODB BSS 0 CONTROL FUNCTION PROCESSORS LOC 0 CON NUL IGNORE FUNCTION CON ABO ABORT OUTPUT CON LGO LOG OUT USER CON RTT RETURN TERMINAL TYPE CON SNK SWITCH TO NEW KEY TABLE BODL EQU * LOC *O * /--- BLOCK BFO 00 000 79/07/05 14.45 BFO SPACE 5,11 ** BFO - WRITE DATA TO CIRCULAR BUFFER * * ON ENTRY - FI1 = PPU IN POINTER * FO1 = CPU OUT POINTER * FL1 = LIMIT POINTER * FP1 = ECS ADDR OF IN/OUT POINTERS * FB1 = ECS ADDRESS OF BUFFER * BUF = PPU BUFFER * * ON EXIT - (A) = NON-ZERO IF BUFFER OVERFLOW * INCREMENT PPU CIRCULAR BUFFER POINTER BFO7 LDM NETC GET CM WORD COUNT RAD FI1 SBD FL1 CHECK FOR WRAP AROUND MJN BFO8 IF NO WRAPPING STD FI1 UPDATE POINTER * UPDATE *IN* POINTER IN ECS BFO8 LDN ZERL CRD CN LDD FI1 STD CN+4 LDD FP1+1 SET ECS POINTER ADDRESS STD T2 LDD FP1 STD T1 LDN 1 SET WORD COUNT STD T3 LDN CN (A) = PP ADDRESS RJM WECS BFO9 LDN 0 (A) = 0, DATA TRANSFERRED BFO SUBR * CHECK IF SUFFICIENT FREE SPACE WITHIN BUFFER LDD FL1 CHECK IF BUFFER EXISTS ZJN BFO3 IF NO BUFFER LDD FO1 SBD FI1 (OUT) - (IN) ZJN BFO1 IF BUFFER IS EMPTY PJN BFO2 IF OUT .GT. IN BFO1 ADD FL1 COMPUTE FREE SPACE BFO2 SBM NETC CHECK IF SUFFICIENT SPACE SBN 1 PROTECT AGAINST IN = OUT PJN BFO4 IF SPACE FOR NEW BUFFER * NO ROOM FOR THIS DATA IN THE BUFFER BFO3 LDN DBOE DSN - BUFFER OVERFLOW RJM MES LDN 1 UJN BFOX EXIT * SET UP FOR BLOCK TRANSFER BFO4 LDD FB1+1 SET ECS ADDRESS ADD FI1 STD T2 SHN -14 ADD FB1 STD T1 * /--- BLOCK BFO 00 000 79/02/22 11.20 * CHECK IF CAN TRANSFER BLOCK IN ONE WRITE LDM NETC GET NUMBER OF WORDS IN BLOCK STD T3 ADD FI1 SBD FL1 PJN BFO5 IF BUFFER WRAPS LDC BUF RJM WECS WRITE THE DATA BLOCK NJN BFO4.8 IF ECS ERROR LJM BFO7 UPDATE *IN* POINTER BFO4.8 LJM BFO9 EXIT * WRITE BLOCK IN TWO SECTIONS BFO5 LDD FL1 COMPUTE LENGTH OF FIRST WRITE SBD FI1 STD T3 LDC BUF RJM WECS WRITE FIRST PART NJN BFO4.8 IF ECS ERROR LDD T3 COMPUTE NEXT PP ADDR TO WRITE SHN 2 ADD T3 ADC BUF STM BFOA SET PP ADDRESS LDD FB1+1 SET ECS ADDRESS STD T2 LDD FB1 STD T1 LDM NETC SBD T3 ZJN BFO6 IF TRANSFER COMPLETE STD T3 LDC ** (A) = PP ADDRESS BFOA EQU *-1 RJM WECS WRITE SECOND BLOCK NJN BFO4.8 IF ECS ERROR BFO6 LJM BFO7 UPDATE POINTERS * /--- BLOCK LOT 00 000 82/03/25 17.23 LOT SPACE 5,11 ** LOT - LOG OFF TERMINALS * * ALL TERMINALS SIGNED ON TO PLATO ARE SIGNED OFF LOT SUBR LDM INIC NJN LOTX IF NOT INITIALIZED STM LOTB INITIALIZE USERS LOST TO 0 LDD NI SHN 4 STD T1 LDM NCB,T1 FETCH FIRST CONNECTION STD ST LDM NCB+20,T1 FETCH LAST CONNECTION STD SI LDC SLKY STD KY SET KEY TO OFF KEY LOT1 LDM TST,ST ZJN LOT2 IF STATION NOT ACTIVE AOM LOTB INCREMENT USER LOST COUNT LDN 0 (A) = FORCED STORE STM TST,ST CLEAR STATION ACTIVE RJM SPK STORE PLATO KEY LOT2 AOD ST LMD SI NJN LOT1 IF MORE TERMINALS LDM NEST,NI GET EQUIP NUMBER RJM C2D STM LOTA+1 *EQXX YY USERS LOST.* LDM LOTB USER LOST COUNTER ZJN LOT9 EXIT IF NO USERS LOST RJM C2D STM LOTA+3 DITTO FOR YY FIELD ABOVE LDK LOTA (A) = ADDR OF MESSAGE RJM DFM LOT9 UJP LOTX -- EXIT SUBROUTINE * LOTA DATA C*EQXX YY USERS LOST.* LOTB BSSZ 1 NUMBER USERS LOST * /--- BLOCK RTT 00 000 82/03/26 14.48 RTT SPACE 5,11 ** RTT - RETURN TERMINAL TYPE * * THE TERMINAL TYPE IS SENT TO PLATO AS AN ECHO * KEY * * TERMINAL ECHO KEY = 3/TT, 4/12 (ASCII TYPE) * * TT - 0 = ASCII IST * 1 = CDC 750 * 2 = TEKTRONIX 4014 * 3 = DATASPEED 40 RTT SUBR EXECUTE RTT,= LDC /RTT/OVL RJM EXR UJN RTTX EXIT * NETWORK TO PLATO TERMINAL CONVERSION TABLE * * 1/0, 3/TT, 8/NT * * TT - PLATO ASCII TERMINAL TYPE * NT - NETWORK TERMINAL TYPE RTTA BSS 0 VFD 1/0,3/0,8/A.I ASCII IST VFD 1/0,3/0,8/A.IU ASCII IST VFD 1/0,3/1,8/A.7 CDC 750 VFD 1/0,3/2,8/A.T TEKTRONIX 4014 VFD 1/0,3/2,8/A.UT VFD 1/0,3/3,8/A.D DATASPEED 40 VFD 1/0,3/3,8/A.UD VFD 1/0,3/4,8/A.A VFD 1/0,3/4,8/A.UA VFD 1/0,3/7,8/A.V VFD 1/0,3/7,8/A.UV CON 0 * /--- BLOCK SKY 00 000 82/03/24 11.04 SKY SPACE 5,11 ** SKY - SEND KEY TO KEY BUFFER * * ON ENTRY - ST = STATION NUMBER * KY = KEY SKY SUBR LDM TST,ST SHN 21-10 MJN SKY2 IF TERMINAL IN OVERFLOW STATE LDN 1 (A) = NON-FORCED STORE SKY1 RJM SPK STORE PLATO KEY ZJN SKYX IF KEY STORED LDC 400 SET TERMINAL IN OVERFLOW STATE RAM TST,ST LDN 0 FORCE TO FIRST KEY IN BUFFER UJN SKY3 * STORE KEY IN OVERFLOW BUFFER SKY2 LDN 17 SET KEY COUNT MASK SKY3 STM SKYA LDN 2 STD T1 LDD RA READ OVERFLOW KEY BUFFER SHN 6 ADD TB ADD ST ADD ST CRM CMB,T1 LDM CMB LPC 17 * LPC 0 IF FIRST KEY SKYA EQU *-1 ADN 1 STD T2 SBN 10 MJN SKY4 IF ROOM FOR MORE KEYS * COUNT NUMBER OF KEYS LOST EXECUTE KYO,= LDC /KYO/OVL RJM EXR ZJN SKY5 IF KEY BUFFER SHOULD BE UPDATED UJN SKY6 SKY4 LDD KY STM CMB+1,T2 LDM CMB SCN 17 LMD T2 SET NEW KEY COUNT STM CMB * RE-WRITE OVERFLOW KEY BUFFER SKY5 LDD RA SHN 6 ADD TB ADD ST ADD ST CWM CMB,T1 SKY6 LJM SKYX EXIT SKYB CON 0,0,0 LOST KEY COUNT * /--- BLOCK SBT 00 000 82/03/29 11.01 SBT SPACE 5,11 ** SBT - SET BIT FOR STATION * * ON ENTRY - ST = STATION NUMBER * BT = ECS ADDRESS OF BIT TABLE SBT SUBR * COMPUTE INDEX FOR THIS STATION IN BIT TABLE LDD ST GET STATION NUMBER SBD CB ADD SB STD T1 SHN -5 COMPUTE SITE NUMBER STD T4 LDD T1 LPN 37 MASK OFF REMAINDER ADN 4 ADD BIAS TO STARTING BIT STD T5 LDN 3 INITIALIZE INDEX AT LOW BYTE STD T6 SBT1 LDD T5 CHECK IF BIT IS IN THIS BYTE SBN 14 MJN SBT2 STD T5 SOD T6 UJN SBT1 * GENERATE MASK FOR APPROPRIATE BIT SBT2 LDC SHNI LOAD SHIFT INSTRUCTION ADD T5 ATTACH SHIFT COUNT STM SBTA LDN 1 SET UP BIT SBTA SHN 0 STM SBTB SAVE BIT MASK * SET BIT IN ECS TABLE - PERFORM READ-BACK CHECK TO * PROTECT AGAINST CONFLICT WITH CPU SBT3 LDD BT+1 COMPUTE ECS ADDRESS ADD T4 STD T2 SHN -14 ADD BT STD T1 LDN 1 ECS WORD COUNT STD T3 LDN CN (A) = PP ADDRESS RJM RECS READ BIT TABLE WORD NJN SBT4 IF ECS READ ERROR LDM CN,T6 LOAD BYTE LPC ** SBTB EQU *-1 NJN SBT4 IF BIT ALREADY SET LDM CN,T6 LMM SBTB SET THE BIT STM CN,T6 LDD IA MARK THIS PP AS LAST WRITER STD CN+4 LDN CN RJM WECS NJN SBT4 IF ECS ERROR LDN CN RJM RECS NJN SBT4 IF ECS ERROR LDD CN+4 LMD IA CHECK FOR WRITE CONFLICT ZJN SBT4 IF CPU DID NOT OVERWRITE LJM SBT3 WRITE AGAIN SBT4 LJM SBTX EXIT * /--- BLOCK SPK 00 000 82/03/29 12.20 SPK SPACE 5,11 ** SPK - STORE PLATO KEY IN KEY BUFFER * * ENTRY - (A) = 0 - FORCE STORE OF KEY * (KY) = KEY * (ST) = STATION INDEX * * EXIT - (A) = 0 IF KEY STORED SPK SUBR STM SPKA SET FORCE STORE FLAG * READ KEY BUFFER FOR THIS STATION LDD ST COMPUTE KEY BUFFER ADDRESS SBD CB ADD SB SHN 1 ADD KB+1 STD T2 SET ECS ADDRESS SHN -14 ADD KB STD T1 LDN 2 SET ECS WORD COUNT STD T3 LDC CMB (A) = PP ADDRESS RJM RECS READ KEY BUFFER NJN SPK5 IF ECS ERROR * CHECK IF STATION KEY BUFFER FULL LDM CMB+4 PPU INDEX IN KEY BUFFER SBM CMB+11 CPU INDEX IN KEY BUFFER ZJN SPK3 IF CPU INDEX = PPU INDEX PJN SPK1 ADC 10000 TAKE 12 BIT ABSOLUTE VALUE SPK1 LPN 3 MASK INDEX NJN SPK3 IF NO OVERFLOW LDC ** SPKA EQU *-1 NJN SPK2 IF NOT FORCED STORE LDM CMB+4 OVERWRITE LAST KEY UJN SPK4 SPK5 LDN 0 SHOW KEY STORED SPK2 LJM SPKX RETURN * ADD KEY TO STATION KEY BUFFER SPK3 AOM CMB+4 INCREMENT PPU INDEX SPK4 LPN 3 MASK OFF INDEX STD T4 LDD KY MOVE KEY TO KEY BUFFER STM CMB,T4 LDN 1 NUMBER OF WORDS TO WRITE STD T3 LDC CMB (A) = PP ADDRESS RJM WECS UPDATE KEY BUFFER RJM SBT SET BIT IN POLLING LIST UJN SPK5 * /--- BLOCK SSL 00 000 82/03/29 10.21 SSL SPACE 5,11 ** SSL - SINGLE STATION LOGOFF. * * SEND AN *SSLKEY* TO PLATO AND LOGOUT TO THE NETWORK. SSL SUBR ENTRY/EXIT LDC SLKY PLATO SINGLE STATION LOGOFF KEY STD KY LDN 0 FORCE STORE OF KEY RJM SPK UJN SSLX RETURN * /--- BLOCK UPD 00 000 86/05/28 14.07 UPD SPACE 5,11 ** UPD - UPDATE IN/OUT POINTERS * * READ FRAMAT IN/OUT POINTERS EVERY *PTRD* * MILLISECONDS. * * DECREMENT DELAY WHEN 2550 BUFFERS FULL * * PROCESS OPERATOR REQUESTS UPD SUBR LDC RTCL CRD CM LDC ** UPDA EQU *-1 LAST TIME POINTERS READ SBD CM+4 MJN UPD1 IF NO OVERFLOW ZJN UPD1 IF NO OVERFLOW ADC -10000 UPD1 ADN PTRD PJN UPDX IF DELAY NOT EXPIRED LDD CM+4 STM UPDA RESET TIMER LDN 0 STD T4 LOOP THROUGH THIS PPS 2550S UPD2 LDD T4 SHN 4 STD T5 INDEX INTO 2550 INFO * UPDATE PP TO FRAMAT POINTERS LDC 0 .UPDB EQU *-1 ADM NORD,T4 ADM NORD,T4 STD T2 OFFSET BY 2 * 2550 ORDINAL SHN -14 ADC 0 EM ADDR OF PP TO FRAM POINTERS .UPDA EQU *-1 STD T1 LDN 2 NUMBER OF EM WORDS STD T3 LDC BUF (A) = PP ADDRESS RJM RECS NJN UPD2.1 EXIT ON ECS ERROR LDM BUF+4 STM NFI1,T5 LDM BUF+5+4 STM NFO1,T5 * /--- BLOCK UPD 00 000 86/05/28 14.07 * UPDATE FRAMAT TO PP POINTERS LDC 0 .UPDD EQU *-1 ADM NORD,T4 ADM NORD,T4 STD T2 OFFSET BY 2 * 2550 ORDINAL SHN -14 ADC 0 EM ADDR OF FRAM TO PP POINTERS .UPDC EQU *-1 STD T1 LDN 2 STD T3 LDC BUF (A) = PP ADDRESS RJM RECS UPD2.1 NJN UPD2.2 EXIT ON ECS ERROR LDM BUF+4 STM NFI2,T5 LDM BUF+5+4 STM NFO2,T5 AOD T4 NEXT 2550 LMM .SNPA ZJN UPD2.5 IF NO MORE 2550S LJM UPD2 NEXT 2550 UPD2.2 LJM UPDX EXIT UPD2.5 EQU * * PROCESS 2550 BUFFER FULL CONDITION LDD OD ZJN UPD4 IF OUTPUT NOT WAITING SBN 2 NJN UPD3 IF DELAY NOT EXPIRED LDN 1 SET DELAY EXPIRED UPD3 STD OD UPD4 LDD RA READ CFO FLAG WORD SHN 6 CRD CM ADN DR READ DRIVER REQUEST WORD ADD PO CRD CN * CHECK FOR AN OPERATOR COMMAND LDD PO NJN UPD5 IF NOT PRIMARY PP LDD CM+3 SHN 21-2 MJN UPD5 IF NO COMMAND ENTERED EXECUTE OPC,= LDC /OPC/OVL UJN UPD6 * CHECK FOR MAIN DRIVER PP REQUEST UPD5 LDD CN ZJN UPD7 IF NO REQUEST PENDING EXECUTE OPR,= LDC /OPR/OVL UPD6 RJM EXR UPD7 LJM UPDX EXIT * /--- BLOCK BRH 00 000 86/05/28 14.09 TITLE NETWORK PROCESSING ROUTINES. BRH SPACE 5,12 ** BRH - BUILD ROUTING HEADER. * * BUILD HEADER FOR SYSTEM MESSAGES. * * ENTRY - (A) = 6/MSG LENGTH (DATA PORTION), * 12/SYSTEM MESSAGE CODE. * (OL) = CURRENT INDEX INTO OUTPUT BUFFER. * * EXIT - (OL) = UPDATED, POINTS TO NEXT MESSAGE. * (FOR THAT REASON, THIS MUST BE THE * (LAST THING DONE FOR THE CURRENT MSG.) * * USES - NONE. * BRH SUBR STM OBUF+2,OL STORE SYSTEM MESSAGE CODE SHN -12D STM OBUF+3,OL STORE MESSAGE LENGTH (DATA) ADN 4 ADD LENGTH OF HEADER STM OBUF+1,OL STORE TOTAL MESSAGE LTH LDM NDS,NI S(D) OF THE DPNC FOR THIS 2550 STM OBUF,OL LDM OBUF+1,OL GET TOTAL MSG LTH RAD OL ADVANCE OL TO NEXT MESSAGE UJP BRHX -- EXIT * * /--- BLOCK BTH 00 000 86/05/28 14.10 BTH SPACE 5,12 ** BTH - BUILD TERMINAL HEADER. * * ENTRY - (A) = LENGTH OF DATA PORTION OF MESSAGE, * (ST) = TARGET STATION NUMBER, * (OL) = CURRENT INDEX INTO OUTPUT BUFFER. * * EXIT - (OL) = UPDATED, POINTS TO FIRST DATA BYTE. * * USES - NONE. * * BUILD 2 PART BINARY SYNC COMM (BSC) HEADER'; * DESTINATION BLOCK (DB) AND TERMINAL BLOCK (TB). * A DB CONSISTS OF A DESTINATION SWITCH ID'; S(D), * DB LENGTH (INCL HEADER AND TB'7S) AND ANY NUMBER * OF TB'7S FOR THAT SWITCH. A TB IS SIMILAR'; A * TERMINAL ID'; T(D), TB LENGTH (DATA ONLY'.) AND * THE ACTUAL DATA TO BE SENT (BIT ORDER INVERTED). * * NOTE'; WE COULD PUT MULTIPLE TB'7S IN A DB, BUT * THE ODDS OF RECEIVING THE OUTPUT IN THAT ORDERLY * A FASHION ARE SMALL, SO WE DON'7T BOTHER TO CHECK. BTH SUBR STM OBUF+3,OL STORE 4TH WD -- T(D) LENGTH ADN 4 ADD 4 WDS (LTH OF THIS HEADER) STM OBUF+1,OL STORE 2ND WD -- S(D) LENGTH LDM SDT,ST GET S(D) FOR THIS STATION STM OBUF,OL STORE 1ST WD -- S(D) LDM TDT,ST GET T(D) FOR THIS STATION LPC 377B STM OBUF+2,OL STORE 3RD WD -- T(D) LDN 4 LTH OF THIS HEADER (AGAIN) RAD OL UPDATE OUTPUT BUFFER INDEX UJP BTHX -- EXIT * * /--- BLOCK COD 00 000 86/05/28 14.11 COD SPACE 5,11 ** COD - CHECK OUTPUT DELAYS * * EACH ACTIVE TERMINAL IS CHECKED FOR * THE OUTPUT DELAY TIME EXPIRED AND NO * INHIBIT OUTPUT PENDING. FOR EACH EXPIRED * TERMINAL A PERMISSION TO SEND TO SENT TO * THE FRAMATTER. * * FOR EACH TERMINAL WHOSE KEYS HAVE OVERFLOWED * INTO THE OVERFLOW KEY BUFFER, ONE KEY IS GIVEN * TO PLATO,S KEY BUFFER IF SPACE IS AVAILABLE. COD SUBR LDC RTCL CRD CN GET REAL TIME CLOCK LDD CN+4 SBM NCOD,NI COMPUTE TIME SINCE LAST CHECK PJN COD1 IF NO OVERFLOW ADC 10000 COD1 STD T7 SAVE DELAY ZJN CODX IF NO ELAPSED TIME LDD CN+4 RESET TIMER FOR NEXT TIME STM NCOD,NI SAVE TIME FOR NEXT CYCLE LDD CB STD ST SET STATION NUMBER LDM NMT,NI STD SI SET MAXIMUM STATION NJN COD3.1 IF SOME ACTIVE TERMINALS COD2 UJN CODX EXIT * CHECK EACH TERMINAL FOR EXPIRED DELAY COD3 AOD ST SOD SI ZJN COD2 IF NO MORE TERMINALS TO CHECK COD3.1 LDM TOD,ST GET CLOCK SBD T7 PJN COD3.2 IF SOME DATA STILL IN NETWORK LDN 0 COD3.2 STM TOD,ST UPDATE CLOCK STD T1 LDM TST,ST ZJN COD3 IF TERMINAL NOT ACTIVE SHN 21-13 MJN COD4 IF OUTPUT HOLD SET SHN 1 MJN COD4 IF PERMISSION TO SEND SENT * REQUEST MORE OUTPUT IF LESS THAN 500 MS OUTPUT * IN NETWORK LDD T1 ADC -500D PJN COD4 IF ENOUGH DATA IN NETWORK * /--- BLOCK COD 00 000 86/05/28 14.11 * SEND PERMISSION TO SEND TO FRAMATTER LDC 4000 STM BUF LDN 1 STM NETC SET CPU WORD COUNT LDD ST SBD CB ADD SB BIAS BY BASE STATION STM NETA SET STATION NUMBER RJM BFO SEND PERMISSION TO SEND LDC 2000 RAM TST,ST SET PERMISSION TO SEND SENT * CHECK IF KEY BUFFER OVERFLOWING COD4 LDM TST,ST SHN 21-10 PJN COD4.1 IF KEY BUFFER NOT OVERFLOWING LDN 2 STD T1 LDD RA READ OVERFLOW KEY BUFFER SHN 6 ADD TB ADD ST ADD ST CRM CMB+12,T1 LDM CMB+12+2 GET FIRST OVERFLOW KEY STD KY LDN 1 (A) = NON-FORCED STORE RJM SPK STORE IN PLATO KEY BUFFER ZJN COD4.2 IF KEY STORED COD4.1 LJM COD3 PROCESS NEXT TERMINAL COD4.2 LDN 2 STD T1 SOM CMB+12 LPN 17 NJN COD5 IF MORE KEYS LEFT STM CMB+12+1 SHOW NO LOST KEYS LDM TST,ST LPC -400 STM TST,ST UJN COD6 UPDATE OVERFLOW BUFFER * SHIFT KEY BUFFER UP ONE KEY COD5 LDD MA CWM CMB+12+3,T1 LDD MA CRM CMB+12+2,T1 * UPDATE OVERFLOW KEY BUFFER COD6 LDD RA SHN 6 ADD TB ADD ST ADD ST CWM CMB+12,T1 UJN COD4.1 PROCESS NEXT TERMINAL * /--- BLOCK INV 00 000 79/03/07 13.43 INV SPACE 5,11 ** INV - INVERT A CHARACTER * * THE BITS OF AN ASCII CHARACTER ARE INVERTED. * THEREFORE BIT 0 BECOMES BIT 7 OR * ABCDEFGH BECOMES HGFEDCBA. * * ENTRY - (A) = CHARACTER TO INVERT * * EXIT - (A) = INVERTED CHARACTER INV SUBR LPC 0#FF CLEAR UNWANTED BITS SHN 22-0-4 STD T3 LOW ORDER BITS SHN 0-16-0 STD T2 HIGH ORDER BITS LDM INVA,T2 SHN 4 LMM INVA,T3 UJN INVX INVA BSS 0 LOC 0 DATA 0 DATA 10 DATA 4 DATA 14 DATA 2 DATA 12 DATA 6 DATA 16 DATA 1 DATA 11 DATA 5 DATA 15 DATA 3 DATA 13 DATA 7 DATA 17 LOC *O * /--- BLOCK PIB 00 000 86/05/28 14.12 PIB SPACE 5,11 ** PIB - PROCESS INPUT BUFFER * * AN INPUT BUFFER FROM THE 2550 IS PROCESSED * * ENTRY - IBUF - BUFFER FROM 2550. * PROCESS SUPER SYSTEM MESSAGE PIB8 RJM SSM PROCESS SUPER SYSTEM MESSAGE PIB SUBR LDN 0 STD IP SET INPUT POINTER LDM IBUF ADC -240D PJN PIB8 IF SUPER SYSTEM MESSAGE LDD SN CHECK S(D) SBM IBUF ZJN PIB1 IF MATCHING S(D) ADN 1 NJN PIBX IF S(D) DOES NOT MATCH LDC 200D PIB1 STD SI SET STATION BIAS LDM IBUF+1 STD IL SAVE LENGTH OF BLOCK SBN 4 MJN PIBX IF LESS THAN MINIMUM LENGTH PIB2 LDN 2 RAD IP BUMP INPUT POINTER SBD IL PJN PIBX IF INPUT EXHAUSTED LDM IBUF+1,IP LPC 377 STD PL SAVE PACKET LENGTH LDM IBUF,IP STD ST SAVE PLATO STATION NUMBER ADC -200D MJN PIB3 IF NOT A SYSTEM MESSAGE RJM /SYS/SYS PROCESS SYSTEM MESSAGE UJN PIB2 PROCESS NEXT BLOCK PIB3 LDD SI BIAS BY S(D) INDEX ADD CB RAD ST LDM TST,ST ZJN PIB4 IF STATION NOT ACTIVE LDD PL LPN 37 MASK OF PACKET SEQUENCE STD PL NJN PIB5 IF A DATA BLOCK RJM TCD TERMINAL COMMAND BLOCK PIB3.1 UJN PIB2 PROCESS NEXT BLOCK * /--- BLOCK PIB 00 000 86/05/28 14.12 * PROCESS ILLEGAL NETWORK ADDRESS PIB4 LDM IBUF,IP STD ST RECOVER T(D) LDD PL LPN 37 NJN PIB4.1 IF DATA BLOCK LDN 1 TERMINAL COMMAND BLOCK LENGTH PIB4.1 RAD IP BUMP POINTER TO NEXT BLOCK LDC RTCL GET CURRENT TIME CRD CM LDC 0 LAST SECOND MESSAGE WAS ISSUED .PIBA EQU *-1 SBD CM+1 SUBTRACT CURRENT SECOND ZJN PIB3.1 IF STILL SAME SECOND LDD CM+1 STM .PIBA UPDATE LAST SECOND LDN BNAE BAD NET ADDR RJM MES PIB4.2 UJN PIB3.1 PROCESS NEXT BLOCK * PROCESS DATA BLOCK PIB5 LDM IBUF+2,IP GET CHARACTER STD T2 LMC BFCH NJN PIB6 IF NOT PARITY ERROR LDN 0 STD T2 SET CHARACTER TO ZERO * PROCESS INPUT FROM THIS TERMINAL PIB6 RJM PIC PROCESS INPUT CHARACTER AOD IP BUMP INPUT POINTER SOD PL ZJN PIB7 IF INPUT COMPLETE PJN PIB5 PROCESS NEXT CHARACTER PIB7 UJN PIB4.2 PROCESS NEXT BLOCK * /--- BLOCK PIC 00 000 86/05/28 14.13 PIC SPACE 5,11 ** PIC - PROCESS INPUT CHARACTER * * ENTRY - (T2) = ASCII CHARACTER * * EXIT - CHARACTER BUFFER UPDATED OR * KEY BUFFER IN ECS UPDATED PIC SUBR LDD T2 ADC -ESC CHECK FOR ESC (TOUCH INPUT) NJN PIC1 * SET TERMINAL IN ESCAPE MODE LDM TST,ST SET TERMINAL IN ESCAPE MODE LPC 7400 ADC 200 STM TST,ST UJN PICX EXIT PIC1 LDM TST,ST CHECK IF IN ESCAPE MODE SHN 21-7 MJN PIC3 IF IN ESCAPE MODE * PROCESS A NORMAL KEY LDM TDT,ST SHN 21-11 MJN PIC1.1 IF NEW KEY TABLE RJM OKT PLANT OLD KEY TABLE UJN PIC1.2 PIC1.1 RJM NKT PLANT NEW KEY TABLE PIC1.2 BSS 0 LDD T2 SHN -1 GET RID OF PARITY BIT STD T1 LDM KEYS,T1 TRANSLATE TO PLATO CODES NJN PIC1.3 IF NOT ZERO LDD T1 CHECK IF KEY IS REALLY ZERO LMN 6 6 IS ASCII KEY FOR DISPLAY CODE 0 NJN PIC3.1 EXIT IF INVALID KEY PIC1.3 BSS 0 SHN 21-0 STD KY SET KEY FOR PLATO SHN 1 POSITION PARITY BIT LMD T2 LPN 1 RAD KY INCLUDE PARITY MISMATCH RJM SKY SEND KEY TO KEY BUFFER UJN PIC3.1 EXIT PIC3 SHN 1 CHECK IF THIS COMPLETES KEY MJN PIC4 IF KEY COMPLETE LDD T2 SAVE THIS PARIAL KEY RJM INV INVERT CHARACTER LPC 177 STD T2 SHN 21-6 MJN PIC3.0 REGULAR ESCAPE SEQUENCE LJM PIC6 HANDLE 2 BYTE ESC SEQ PIC3.0 BSS 0 LDD T2 RAM TST,ST PIC3.1 LJM PICX EXIT * /--- BLOCK PIC 00 000 86/05/28 14.13 * ENTIRE KEY HERE PIC4 LDD T2 RJM INV INVERT KEY LPC 177 ADC -64D SHN 6 STD T1 LDM TST,ST LPN 77 ADD T1 SHN 1 PIC4.1 BSS 0 STD KY LMC OFFKEY CHECK FOR OFFKEY FROM TERMINAL ZJN PIC5.5 IF OFFKEY RJM SKY SEND KEY TO PLATO PIC5 LDM TST,ST CLEAR ESCAPE MODE LPC 7400 STM TST,ST UJN PIC3.1 * PROCESS OFFKEY FROM TERMINAL. PIC5.5 RJM SSL UJN PIC5 CLEAR ESCAPE MODE PIC6 LDN 0 STD T1 TABLE COUNTER PIC7 LDM PICA,T1 NEXT CONTROL CHARACTER MJN PIC5 NOT FOUND, IGNORE THIS SEQUENCE LMD T2 ZJN PIC8 IF MATCHED WITH THIS CONTROL CHAR AOD T1 INCREMENT COUNTER UJN PIC7 LOOP FOR NEXT CONTROL CHAR PIC8 LDM PICB,T1 CORRESPONDING PLATO KEY SHN 21-0 IGNORE PARITY CHECKING UJN PIC4.1 STORE PLATO KEY PICA BSS 0 TWO BYTE ESC SEQ CONTROL CHARS DATA 4 CONTROL-D DATA 27 CONTROL-W DATA 35 CONTROL-BRACKET DATA -1 END OF TABLE PICB BSS 0 MATCHING PLATO KEYS DATA 304 SUB1 DATA 300 SUPER1 DATA 360 SQUARE1 * /--- BLOCK SNP 00 000 82/04/23 16.57 SNP SPACE 5,11 ** SNP - SWITCH TO NEXT NPU * * SAVE STATE OF THIS 2550 * SET CURRENT STATE OF NEXT 2550 * * EXIT - (A) = 0 IF COMPLETED A CYCLE SNP SUBR LDC RTCL GET REAL TIME CLOCK CRD CM LDD CM+1 STM .MAIB UPDATE OUTPUT REJECT TIMER LDM .SNPA ZJN SNPX IF NO 2550S DEFINED LDN 1 STD T4 (T4) = FULL CYCLE FLAG * SAVE CURRENT 2550 STATUS LDD NI SHN 4 STD T1 SHN 2 MJN SNP1 IF DUMMY TO START CYCLE LDD FI1 STM NFI1,T1 LDD FO2 STM NFO2,T1 * SET TO NEXT 2550 SNP1 AOD NI LMC 0 NUMBER OF 2550S TO PROCESS .SNPA EQU *-1 NJN SNP2 IF NOT LAST NPU STD NI LDD T4 CHECK IF CYCLE ALREADY COMPLETE ZJN SNPX IF NO ACTIVE 2550S LDN 0 STD T4 SNP2 LDM NEST,NI ZJN SNP1 IF 2550 NOT ACTIVE LDC FECH1 SET CHANNEL INSTRUCTIONS STD T2 LDM NCH,NI RJM ICH * MOVE THE 16 DIRECT CELLS FOR THIS 2550 LDD NI SHN 4 STD T1 ADC NDEF STM SNPA LDD MA MOVE 15 CELLS CWM **,TR SNPA EQU *-1 LDD MA CRM CB,TR LDM NFO2,T1 MOVE 16TH STD FO2 LDD T4 LJM SNPX EXIT * /--- BLOCK SSM 00 000 82/03/26 14.48 SSM SPACE 5,11 ** SSM - PROCESS SUPER SYSTEM MESSAGE * * ALL ACTIVE TERMINALS ARE LOGGED OFF * A RESET COMPLETE IS SENT IF REQUEST RESET IS * RECEIVED SSM SUBR EXECUTE SSM,= LDC /SSM/OVL RJM EXR EXECUTE UMT,= UPDATE MAXIMUM TERMINAL IN USE LDC /UMT/OVL RJM EXR UJN SSMX EXIT * /--- BLOCK SYS 00 000 79/07/05 14.22 SYS SPACE 5,11 ** SYS - PROCESS SYSTEM MESSAGE * * ENTRY - (IP) - POINTER TO START OF TERMINAL BLOCK * * EXIT - (IP) - INCREMENTED BY LENGTH OF DATA BLOCK QUAL SYS SYS SUBR EXECUTE PSM,= PROCESS SYSTEM MESSAGE LDC /PSM/OVL RJM EXR NJN SYS1 IF UNKNOWN SYSTEM MESSAGE RJM ** SYSA EQU *-1 SYS0 LDD PL RAD IP BUMP INPUT POINTER UJN SYSX SYS1 EXECUTE DIB,= DUMP INPUT BLOCK TO ERROR LOG LDC /DIB/OVL RJM EXR QUAL * * /--- BLOCK ASO 00 000 82/03/26 14.48 ASO SPACE 5,11 ** ASO - APPLICATION SYSTEM SIGNON * * SIGN THIS TERMINAL INTO PLATO ASO SUBR EXECUTE ASO,= LDC /ASO/OVL RJM EXR LDM TST,ST ZJN ASOX IF CONNECTION REJECTED EXECUTE ASP,= COMPLETE PLATO LOGIN LDC /ASP/OVL RJM EXR LDM TST,ST ZJN ASOX IF CONNECTION REGECTED EXECUTE UMT,= UPDATE MAXIMUM TERMINAL IN USE LDC /UMT/OVL RJM EXR UJN ASOX * /--- BLOCK CEM 00 000 82/12/02 15.47 CEM SPACE 5,11 ** CEM - PROCESS CCP ERROR/STATISTIC MESSAGES * * SEND CCP MESSAGES OF CODE $CD (LINK/TRUNK * STATISTIC) OR OF CODE $CE (CE ERROR) TO ERROR LOG. CEM SUBR EXECUTE CPR,= LDC /CPR/OVL RJM EXR UJN CEMX EXIT * /--- BLOCK CSS 00 000 82/12/02 15.44 CSS SPACE 5,11 ** CSS - CHANGE IN SWITCH STATUS * * UPDATE ALL TERMINALS CONNECTED TO THE SWITCH CSS SUBR EXECUTE CSS,= LDC /CSS/OVL RJM EXR UJN CSSX EXIT * /--- BLOCK DSM 00 000 82/03/26 14.47 DSM SPACE 5,11 ** DSM - DISPLAY SYSTEM MESSAGE * * THE SYSTEM MESSAGE RECEIVED IS WRITTEN TO THE * ERROR LOG. DSM SUBR EXECUTE DSM,= LDC /DSM/OVL RJM EXR UJN DSMX EXIT * /--- BLOCK SBG 00 000 82/03/25 15.49 SBG SPACE 5,11 ** SBG - SIGN-ON TO BACKGROUND SYSTEM * * BUMP MESSAGE TO A E7 AND PROCESS THE SAME * WAY SBG SUBR LDN 12 BUMP PAST FA HEADER RAD IP LCN 12 ADJUST MESSAGE LENGTH RAD PL RJM ASO PROCESS SIGNON MESSAGE UJN SBGX EXIT * /--- BLOCK TCD 00 000 82/04/21 12.22 TCD SPACE 5,11 ** TCD - PROCESS TERMINAL COMMAND BLOCK * * ENTRY - (IP) - POINTER TO START OF TERMINAL BLOCK * (ST) - PLATO STATION NUMBER * * EXIT - (IP) - INCREMENTED BY LENGTH OF DATA BLOCK * PROCESS LINE DROP TCD5 RJM SSL LOGOUT USER IN PLATO LDN LDRE RJM MES LINE DROP DAYFILE MESSAGE UJN TCD7 * UNKNOWN TERMINAL COMMAND TCD6 ADN TCSO STD ST ST CONTAINS BAD CODE LDN UTCE UNKNOWN TERMINAL COMMAND RJM MES EXECUTE DIB,= DUMP INPUT BLOCK TO ERROR LOG LDC /DIB/OVL RJM EXR TCD7 AOD IP BUMP PAST DATA TCD SUBR LDM IBUF+2,IP GET TERMINAL COMMAND SBN TCPE ZJN TCD7 IF 2741 PARITY ERROR SBN TCLD-TCPE ZJN TCD5 IF LINE DROP ADN TCLD-TCBR ZJN TCD3 IF BREAK RECEIVED SBN TCHO-TCBR ZJN TCD1 IF HOLD OUTPUT SBN TCSO-TCHO NJN TCD6 IF NOT RESUME OUTPUT * PROCESS RESUME OUTPUT STM TOD,ST CLEAR OUTPUT DELAY LDM TST,ST CLEAR HOLD OUTPUT LPC 3777 STM TST,ST TCD0 UJN TCD7 BUMP POINTER * PROCESS HOLD OUTPUT TCD1 LDM TST,ST LPC 3777 LMC 4000 STM TST,ST TCD2 UJN TCD0 BUMP POINTER * ISSUE BREAK ACKNOWLEDGE TCD3 BSS 0 LDK TCBA TERMINAL CMND - BREAK ACKNOWL. RJM STC SEND TERMINAL COMMAND LDC STKY SEND STOP KEY TO PLATO STD KY RJM SKY UJN TCD2 * /--- BLOCK FOB 00 000 79/06/21 14.02 FOB SPACE 5,11 ** FOB - FLUSH OUTPUT BUFFER. * * THE CURRENT BUFFER OF DATA IS SENT TO THE * 2550. * * EXIT - DATA TRANSFERRED TO 2550. FOB SUBR LDD OL ZJN FOBX IF EMPTY BLOCK LDC RTCL CRD CM SET STARTING TIME FOR OUTPUT BLOCK LDD CM+1 STM .FOBA FOB1 RJM SOD SEND BLOCK TO 2550 ZJN FOBX IF DATA TRANSFERRED FOB2 RJM PSE PAUSE FOR STORAGE MOVE RJM UPD UPDATE OUTPUT DELAY TIME LDD OD LPN 1 ZJN FOB2 IF DELAY HAS NOT EXPIRED LDC RTCL CRD CM CHECK ELAPSED TIME LDC 0 .FOBA EQU *-1 SBD CM+1 MJN FOB3 ZJN FOB3 ADC -10000 FOB3 ADK MXOTM PJN FOB1 LDN OTME LJM MXE OUTPUT REJECTS EXCEEDED NKT SPACE 4,4 ** NKT - LOAD NEW KEY TRANSLATION TABLE. * * THE NEW KEY TRANSLATION TABLE IS READ IN FROM CM. NKT SUBR LDM KEYT NJN NKTX EXIT IF ALREADY LOADED LDN 1 STM KEYT MARK NEW KEY TABLE LOADED LDN 32 STD T1 LENGTH OF KEY TABLE IN CM WORDS LDD RA SHN 6 ADK NK CM ADDRESS OF TABLE CRM KEYS,T1 READ TABLE UJN NKTX OKT SPACE 4,4 ** OKT - LOAD OLD KEY TRANSLATION TABLE. * * THE OLD KEY TRANSLATION TABLE IS READ IN FROM CM. OKT SUBR LDM KEYT ZJN OKTX EXIT IF ALREADY LOADED LDN 0 STM KEYT MARK OLD KEY TABLE AS LOADED LDN 32 STD T1 LENGTH OF KEY TABLE IN CM WORDS LDD RA SHN 6 ADK OK ADDRESS OF OLD KEY TABLE IN CM CRM KEYS,T1 READ OLD KEY TABLE UJN OKTX * /--- BLOCK LGO 00 000 82/12/02 21.29 LGO SPACE 5,11 ** LGO - LOGOUT USER * * A SYSTEM MESSAGE IS SENT TO RE-VALIDATE THIS USER * * TABLES ARE CLEARED TO SHOW TERMINAL IS NO LONGER * ACTIVE LGO SUBR LDM TST,ST ZJN LGOX IF TERMINAL NOT ACTIVE LDN 0#0C SET RE-VALIDATE USER RJM PLM BUILD LOGOUT MESSAGE LDN 0 STM TST,ST SHOW STATION LOGGED OUT EXECUTE UMT,= UPDATE MAXIMUM TERMINAL IN USE LDC /UMT/OVL RJM EXR UJN LGOX SNK SPACE 4,4 ** SNK - SWITCH TO NEW KEY TRANSLATION TABLE. * * FRAMAT REQUESTS THAT INPUT KEYS BE TRANSLATED TO * PLATO KEYS WITH THE NEW KEY TRANSLATION TABLE FOR * THIS STATION. SNK SUBR LDM TDT,ST LPC 6777 LMC 1000 SET NEW KEY TABLE BIT STM TDT,ST UJN SNKX * /--- BLOCK PLM 00 000 82/04/26 11.33 PLM SPACE 5,11 ** PLM - PROCESS LOGIN / LOGOUT MESSAGE * * BUILDS A LOGIN / LOGOUT SUPERVISORY MESSAGE * * ENTRY - (A) - LOGIN / LOGOUT CODE PLM SUBR STM PLMA STORE LOG-IN/LOG-OUT CODE LMN 0#08 DISCONNECT CODE NJN PLM0 -- IF NOT DISCONNECT LDN 4+1 LENGTH OF TERMINAL COMMAND MSG RJM VBL MAKE SURE ENOUGH ROOM LDK TCAO TERMINAL CMND - ABORT OUTPUT. RJM STC SEND TERMINAL COMMAND PLM0 BSS 0 LDN 4+15D+6 LTH OF HDR+DATA+SLOP FOR CM RD RJM VBL MAKE SURE ENOUGH ROOM LDC ** PLMA EQU *-1 LOGIN/LOGOUT CODE STM OBUF+4,OL * COMPUTE S(D)/T(D) FOR THIS PLATO PORT LDN 0 STD T2 LDD ST SBD CB STD T1 SET T(D) SBK 200D MJN PLM1 -- IF ON PRIMARY S(D) STD T1 SET T(D) AOD T2 BIAS TO ALTERNATE S(D) PLM1 LDD SN ADD T2 STM OBUF+5,OL SET PLATO S(D) LDD T1 STM OBUF+6,OL SET PLATO T(D) LDM SDT,ST STM OBUF+7,OL TERMINAL S(D) LDM TDT,ST LPC 377B STM OBUF+8D,OL TERMINAL T(D) LDM TDT,ST SHN -11D STD T1 0 = 1200 BAUD, 1 = 300 BAUD LDM TDT,ST SHN 21B-12B PJN PLM2 -- IF STANDARD TERMINAL TYPE LDK TXTT TEKTRONIX TERMINAL TYPE UJN PLM3 PLM2 LDK NWTT NETWORK TERMINAL TYPE (IST) PLM3 SBD T1 BIAS BY TERMINAL SPEED STM OBUF+9D,OL SET TERMINAL TYPE/SPEED LDK OBUF+10D POSITION RELATIVE TO *OL* ADD OL PLUS *OL* = ABS ADDRESS STM PLMB PLANT FOR CM READ PP ADDR LDD MA CM ADDR OF MESSAGE AREA CWM PLMC,TR WRITE ASCII STRING *PLATO* LDD MA READ BACK INTO OUTPUT BUFFER CRM **,TR PLMB EQU *-1 ABS ADDR IN OUTPUT BUFFER LDC 0#ED+15S12D MESSAGE CODE AND LENGTH (DATA) RJM BRH BUILD ROUTING HEADER RJM FOB FLUSH OUTPUT BUFFER UJP PLMX -- EXIT PLMC CON A.P,A.L,A.A,A.T,A.O,0,0,0,0 * /--- BLOCK SRM 00 000 82/04/20 16.35 SRM SPACE 5,11 ** SRM - SEND ROUTING MESSAGE. * * SEND E9 AND EA MESSAGE TO THE DPNC TO ENABLE/ * DISABLE ROUTING TO THE PLATO SYSTEM. * * ENTRY - (A) = 6/ON-OFF CODE, 12/ROUTING CODE. * (OL) = CURRENT INDEX INTO OUTPUT BUFFER. * * EXIT - (OL) = RESET BY *FOB*. * * USES - NONE. * * CALLS - BRH, FOB, VBL. * SRM SUBR * SAVE INFO FROM ACCUMULATOR. STM SRMA STORE ROUTING CODE SHN -12D STM SRMB SAVE ON-OFF CODE FOR EA MSG LDN 15D TOTAL LENGTH OF BOTH MSGS RJM VBL MAKE SURE ENOUGH ROOM IN BUFFER * BUILD E9 MESSAGE LDM NSN,NI PLATO SWITCH NUMBER STM OBUF+4,OL LDC ** ROUTING CODE SRMA EQU *-1 STM OBUF+5,OL LDC 0#E9+2S12D MESSAGE CODE AND LENGTH (DATA) RJM BRH BUILD ROUTING HEADER * BUILD EA MESSAGE. LDC ** SRMB EQU *-1 ON-OFF CODE STM OBUF+4,OL LDM NSN,NI PLATO SYSTEM NUMBER STM OBUF+5,OL LDD SN SWITCH NUMBER STM OBUF+6,OL ADK 1 ALTERNATE S(D) STM OBUF+7,OL LDN 0 WHATS THIS STM OBUF+8D,OL LDC 0#EA+5S12D MESSAGE CODE AND LENGTH (DATA) RJM BRH BUILD ROUTING HEADER RJM FOB FLUSH OUTPUT BUFFER UJP SRMX -- EXIT * * /--- BLOCK STM 00 000 79/06/21 14.24 STC SPACE 5,12 ** STC - SEND TERMINAL COMMAND. * * SIMILAR TO *BOD* EXCEPT DATA (COMMAND) IS NOT * INVERTED. ALSO, DATA IS IN (A) NOT MEMORY, AND * THE T(D) LENGTH IS ALWAYS SET TO 0 TO INDICATE A * ONE-BYTE COMMAND CODE FOLLOWS. * * ENTRY - (A) = TERMINAL COMMAND CODE. * (OL) = CURRENT INDEX IN OUTPUT BUFFER. * * EXIT - (OL) = UPDATED, POINTS TO NEXT MESSAGE. * * USES - NONE. * * CALLS - BTH, VBL. * STC SUBR STM STCA STORE TERMINAL COMMAND CODE LDN 4+2 HEADER + DATA LENGTH RJM VBL MAKES SURE MESSAGE WILL FIT LDN 1 DATA LENGTH RJM BTH BUILD TERMINAL HEADER LDN 0 STM OBUF-1,OL T(D) LTH = 0 INDICATES COMMAND LDC ** STCA EQU *-1 TERMINAL COMMAND CODE STM OBUF,OL AOD OL UJP STCX -- EXIT * * /--- BLOCK VBL 00 000 79/06/21 14.12 VBL SPACE 5,11 ** VBL - VERIFY OUTPUT BUFFER LENGTH * * THE SPACE LEFT IN THIS OUTPUT BUFFER IS * CHECKED TO VERIFY THERE IS ROOM FOR THIS * MESSAGE. IF NOT THE BUFFER IS SENT TO THE * 2550. * * ENTRY - (A) = SPACE REQUIRED IN BUFFER * * EXIT - (OL) = 0 IF BUFFER FLUSHED VBL SUBR ADD OL ADC -MOBL MJN VBLX IF SPACE LEFT IN BUFFER RJM FOB FLUSH OUTPUT BUFFER UJN VBLX EXIT * /--- BLOCK RID 00 000 82/12/02 21.27 TITLE 2250 DATA TRANSFER ROUTINES. RID SPACE 5,11 ** RID - READ INPUT DATA. * * GET NEXT INPUT BLOCK FROM 2550. * * EXIT - (A) = 0 IF DATA BLOCK READ. * IBUF - DATA BLOCK. RID3 LDN INCE EOM MISSING LJM MXE ABORT RID5 LDC IBUFL SBD T4 ADC IBUF SBN 1 STD T4 .DEBUG IFNE DEBUG,0 LDC IBUF+1LR RJM DBG .DEBUG ENDIF LDC EOM RAI T4 CLEAR EOM SHN 21-13 MJN RID3 IF EOM MISSING LDN 0 RID SUBR RJM STS GET STATUS MJN RIDX IF NO STATUS SBN INA INPUT AVAILABLE NJN RIDX IF NO INPUT AOM NNBI,NI INCR NUM OF BLOCKS INPUT LDN IND INPUT DATA ADD EQ FAN CH+40 RJM IJM WAIT FOR INACTIVE ACN CH RJM FUL WAIT FOR FULL LDC IBUFL IAM IBUF,CH INPUT THE DATA STD T4 LDN INHE AJM MXE,CH IF 2550 HUNG SENDING DATA LDN INC INPUT COUPLE STATUS RJM FNC STM CSTS,NI SAVE COUPLER STATUS LPC ERRF ZJN RID2 IF TRANSFER COMPLETE LDN CSTE BAD COUPLER STATUS RID1 LJM MXE ABORT RID2 LJM RID5 * /--- BLOCK SOD 00 000 82/04/26 11.45 SOD SPACE 5,11 ** SOD - SEND OUTPUT DATA * * SEND NEXT BLOCK OF OUTPUT TO THE 2550. * * ENTRY - (OL) = LENGTH OF OUTPUT BLOCK * OBUF = OUTPUT BLOCK * * EXIT - (A) = 0 IF DATA TRANSFERED TO 2550. * (OL) = 0 IF OUTPUT TRANSFERED TO 2550. SOD3 LDN OUTE INCOMPLETE OUTPUT TRANSFER UJN RID1 ABORT * NOTE'; THE LAST BYTE TRANSFERED TO THE 2550 MUST * HAVE THE 2**11 BIT (4000B) SET, ELSE THE 2550 WILL * REJECT THE ENTIRE BLOCK WITH A CE/1F ERROR MSG. SOD4 LDC EOM INSERT EOM BIT RAM OBUF-1,OL LDN OTD SEND WRITE ORDER CODE ADD EQ FAN CH+40 * WHILE WE WAIT FOR THE CHANNEL TO GO INACTIVE LDK RTCL REAL TIME CLOCK CRD CM LDD CM+4 LOW-ORDER OF MSEC CLOCK SBM NTIM,NI LAST TIME A BLOCK WAS SENT PJN SOD5 -- NO WRAP-AROUND ADC 10000B ADD FOR CLOCK WRAP-AROUND SOD5 BSS 0 STM NCYC,NI STORE FOR STATS LDD CM+4 STM NTIM,NI UPDATE FOR CURRENT BLOCK AOM NNBO,NI INCR NUM OF BLOCKS OUTPUT RJM IJM WAIT FOR INACTIVE ACN CH LDD OL STM NLBS,NI SAVE SIZE OF BLOCK FOR STATS OAM OBUF,CH FJM *,CH DCN CH+40 NJP SOD3 -- INCOMPLETE TRANSFER STD OL STD OD CLEAR SAVED OUTPUT FLAG STM OBUF CLEAR S(D) SOD SUBR .DEBUG IFNE DEBUG,0 LDC OBUF+1LS RJM DBG .DEBUG ENDIF LDN WRT WRITE ORDER CODE STD T1 LDN OTO RJM FNC SOD1 RJM STS GET STATUS MJN SOD1 IF NO STATUS SBN RYO ZJN SOD2 IF READY FOR OUTPUT SBN NRY-RYO NJN SOD1 IF IDLE AOM NNOR,NI INCR NUM OF OUTPUT REJECTS LDN 2*100D/PTRD STD OD SET OUTPUT DELAY COUNTER UJN SODX EXIT SOD2 LJM SOD4 SEND MESSAGE * /--- BLOCK 2550 I/O 00 000 79/03/27 01.49 FNC SPACE 5,11 ** FNC - FUNCTION THE CHANNEL. TRANSFER ONE DATA WORD * * ENTRY - (A) = FUNCTION CODE. * (T1) = WORD TO OUTPUT IF OUTPUT FUNCTION. * * EXIT - (A) = WORD READ FROM CHANNEL IF INPUT. * (T1)= WORD READ FROM CHANNEL IF INPUT. FNC1 SBN SNU-FCNL PJN FNCX IF NOT OUTPUT ORDER CODE ACN CH LDD T1 OAN CH FJM *,CH FNC2 DCN CH+40 FNC SUBR STD T2 ADD EQ INCLUDE EQUIPMENT NUMBER FAN CH+40 RJM IJM CHECK FOR INACTIVEACNCH LDD T2 SBN FCNL PJN FNC1 IF OUTPUT FUNCTION ACN CH RJM FUL WAIT FOR FULL IAN CH STD T1 UJN FNC2 FUL SPACE 5,11 ** FUL - TEST IF CHANNEL FULL FUL SUBR LDC WAIT SET DELAY COUNT FUL1 FJM FULX,CH IF CHANNEL FULL SBN 1 NJN FUL1 TRY AGAIN LDN FULE NO DATA ON CHANNEL UJN MXE ABORT IJM SPACE 5,11 ** IJM - WAIT FOR CHANNEL INACTIVE IJM SUBR LDC WAIT IJM1 IJM IJMX,CH IF CHANNEL INACTIVE SBN 1 DELAY NJN IJM1 IF DELAY NOT COMPLETE LDN FTOE FUNCTION TIMEOUT UJN MXE ABORT * /--- BLOCK 2550 I/O 00 000 82/12/02 22.01 STS SPACE 5,11 ** STS - GET 2550 STATUS * * EXIT - (A) = (T1) = 2550 STATUS IF AVAILABLE * (A) = NEGATIVE IF STATUS NOT AVAILABLE STS1 LDN DMTE 2550 DEAD * PROCESS 2550 CHANNEL ERROR MXE DCN CH+40 STD T7 SET ERROR CODE EXECUTE MXE,= LDC /MXE/OVL RJM EXR * UJN * DOES NOT RETURN STS2 LDM NSTS,NI SBD CM+1 MJN STS3 IF NO OVERFLOW ZJN STS3 ADC -10000 STS3 ADN DMTX CHECK FOR TIMEOUT MJN STS1 IF TIMED OUT LCN 1 (A) = NO STATUS AVAILABLE STS SUBR LDC RTCL CRD CM READ READ TIME CLOCK LDN INC INPUT COUPLER STATUS RJM FNC STM CSTS,NI SAVE COUPLER STATUS LPN CNL ZJN STS2 IF STATUS NOT AVAILABLE LDN INS INPUT SOFTWARE STATUS RJM FNC STM SSTS,NI SAVE CPP SOFTWARE STATUS LDD CM+1 STM NSTS,NI SAVE CLOCK LDD T1 (A) = STATUS UJN STSX EXIT FECH1 CHTB 2550 CHANNEL TABLE * /--- BLOCK READECS 00 000 82/03/24 13.45 TITLE ECS TRANSFER ROUTINES. SPACE 5,11 ** RECS - ECS TO PPU TRANSFER VIA DDP. * * ENTRY (A) = PPU MEMORY ADDRESS. * (T1) = UPPER PORTION OF ECS ADDRESS. * (T2) = LOWER PORTION OF ECS ADDRESS. * (T3) = NUMBER OF CM WORDS TO READ. * * EXIT (A) = 0 IF READ COMPLETED. * = 1 IF ECS PARITY ERROR. * * THIS SUBROUTINE WILL BE OVERWRITTEN BY THE * MONITOR CALL ECS READ ROUTINE IF THE DDP * IS NOT AVAILABLE. RECS SUBR STM RECA SAVE PP ADDRESS * ZERO LENGTH TRANSFERS ARE INTERPRETED AS INFINITE * LENGTH TRANSFERS. LDD T3 TRANSFER LENGTH ZJN RECSX RETURN IF ZERO LENGTH TRANSFER * SEND READ FUNCTION TO THE DDP. DCN DC+40 FNC 5001,DC 5001 = READ ECS * OUTPUT THE 2 WORD ECS ADDRESS. ACN DC LDN 2 OAM T1,DC LDD T3 COUNT PP WORD COUNT SHN 2 ADD T3 IAM **,DC READ ECS TO PPU MEMORY RECA EQU *-1 NJN REC2 IF ERROR * WAIT FOR CHANNEL FULL AND ACTIVE REC1 IJM REC2,DC IF INACTIVE EJM REC1,DC DCN DC+40 UJN RECSX EXIT WITH A =0 * MASTER CLEAR THE DDP PORT. REC2 DCN DC+40 FNC 5010,DC 5010 = MASTER CLEAR PORT RECB FNC 5404,DC 5404 = SELECT ESM MODE * UJN *+2 IF ECS MODE LDN DERE READ ECS ERROR RJM MES LDN 1 MARK ERROR OCCURRED LJM RECSX BSS 13 PADDING RECL EQU *-RECSX LENGTH OF THIS SUBROUTINE * /--- BLOCK WRITECS 00 000 82/03/25 15.55 SPACE 5,11 ** WECS - PPU TO ECS TRANSFER VIA DDP. * * ENTRY (A) = PPU MEMORY ADDRESS. * (T1) = UPPER PORTION OF ECS ADDRESS. * (T2) = LOWER PORTION OF ECS ADDRESS. * (T3) = NUMBER OF CM WORDS TO WRITE. * * EXIT (A) = 0, IF NO ERRORS. * = 1, IF ECS PARITY ERRORS. * * THIS SUBROUTINE WILL BE OVERWRITTEN BY THE * MONITOR CALL ECS WRITE ROUTINE IF THE DDP * IS NOT AVAILABLE. WECS SUBR STM WECA SAVE PP MEMORY ADDRESS * ZERO LENGTH TRANSFERS ARE INTERPRETED AS INFINITE * LENGTH TRANSFERS. LDD T3 TRANSFER LENGTH ZJN WECSX RETURN IF ZERO LENGTH TRANSFER * SEND ECS WRITE FUNCTION TO DDP. DCN DC+40 FNC 5002,DC 5002 = WRITE ECS * SEND TWO WORD ECS ADDRESS. ACN DC+40 LDN 2 OAM T1,DC LDD T3 COMPUTE PP WORD COUNT SHN 2 ADD T3 OAM **,DC OUTPUT THE DATA WECA EQU *-1 NJN WEC2 IF ERROR DCN DC+40 * CHECK DDP STATUS UNTIL WRITE COMPLETE OR * ERROR DETECTED. WEC1 FNC 5004,DC 5004 = SELECT STATUS ACN DC+40 IAN DC INPUT STATUS WORD DCN DC+40 LPN 11 MASK WRITE/ABORT BITS ZJN WECSX IF COMPLETED SUCCESSFULLY LPN 10 NJN WEC1 IF WRITE NOT COMPLETE * RETURN WITH ERROR. WEC2 DCN DC+40 DISCONNECT THE DDP CHANNEL FNC 5010,DC 5010 = MASTER CLEAR PORT WECB FNC 5404,DC 5404 = SELECT ESM MODE * UJN *+2 IF ECS MODE LDN DEWE WRITE ECS ERROR RJM MES LDN 1 MARK ERROR OCCURRED LJM WECSX EXIT BSS 5 PADDING WECL EQU *-WECSX LENGTH OF THIS ROUTINE * ADD TERMINATOR TO DDP CHANNEL INSTRUCTIONS RMT CON 0 FECH2 BSS 0 RMT * /--- BLOCK SUBS 00 000 82/12/06 16.17 TITLE GENERAL PURPOSE SUBROUTINES. C2X SPACE 5,11 ** C2X - CONVERT BINARY TO HEXADECIMAL. * * ENTRY - (A) - VALUE TO CONVERT * * EXIT - (A) - CONVERTED VALUE C2X SUBR LPC 0#FF SHN 21-3 STD T1 STORE UPPER BITS SHN -16 SBN 10D PJN C2X1 IF GREATER THAN 9 ADN 1R0+10D-1 C2X1 ADN 1 STD T2 LDD T1 SBN 10D PJN C2X2 IF GREATER THAN 9 ADN 1R0+10D-1 C2X2 ADN 1 SHN 6 ADD T2 UJN C2XX EXIT STX SPACE 4,10 ** STX - STORE TEXT IN THE MESSAGE BUFFER. * * SET DISPLAY CHARACTER INTO PACKED STRING BUFFER. * * ENTRY (A) = DISPLAY CODED CHARACTER. * * EXIT CHARACTER PACKED INTO BUFFER * POINTERS UPDATED * LEFT CHARACTER. STX2 SHN 6 STORE LEFT CHARACTER STI PT LDC PSNI SET CONTROL INSTRUCTION STM STXA STX SUBR ENTRY/EXIT LPN 77 STXA UJN STX2 ODD CHARACTERS * PSN EVEN CHARACTERS * RIGHT CHARACTER RAI PT AOD PT STXB LDC 0 ORG *-1 LOC STXA UJN STX2 ORG *O STM STXA UJN STXX NUL SPACE 5,11 ** NUL - RETURN TO CALLER. * * HANDLES NULL FUNCTIONS NUL SUBR UJN NULX ICH SPACE 5,11 ** ICH - INSERT CHANNEL NUMBERS INTO I/O INSTRUCTIONS * * ENTRY - (A) = CHANNEL TO INSERT * (T2) = FWA OF CHANNEL TABLE ICH SUBR STD T3 SAVE CHANNEL NUMBER * CHECK IF SAME CHANNEL TO PRESET LDI T2 STD T1 LDI T1 LMD T3 SCN 37 ZJN ICHX IF SAME CHANNEL * MODIFY CHANNEL INSTRUCTIONS ICH1 LDI T2 ZJN ICHX IF END OF TABLE STD T1 LDI T1 SCN 37 LMD T3 STI T1 MODIFY INSTRUCTION AOD T2 UJN ICH1 IF MORE CHANNELS PSE SPACE 5,11 * /--- BLOCK SUBS 00 000 82/03/25 15.42 ** PSE - PAUSE FOR STORAGE RELOCATION * * EXIT - (A) = ERROR FLAG PSE1 LDN 0 PSE SUBR PAUSE LDD CM+1 NJN PSEX IF ERROR FLAG SET .NOSV2 IFGE OSLEV,562D NOS V2 LDC TFSW CHECK IF PLATO STILL RUNNING .NOSV2 ELSE NOS V1 LDC JNMW CHECK IF PLATO STILL RUNNING .NOSV2 ENDIF PSEA EQU *-1 CRD CM LDD CM NJN PSE1 IF PLATO STILL RUNNING LDN 1 (A) = PLATO NOT RUNNING UJN PSEX EXIT MES SPACE 5,11 ** MES - ISSUE FORMATTED DAYFILE MESSAGE * * ENTER - (A) = DSN ERROR CODE * BIT 5 - 0 = DECIMAL CONVERSION FOR ST * 1 = HEX CONVERSION FOR ST MES SUBR STD T7 SAVE ERROR CODE LPN 37 MASK OFF THE CONVERSION FLAG RJM C2D STM MESA+3 SET ERROR CODE * CHECK FOR INHIBIT ERROR MESSAGE - SW2 LDD RA SHN 6 CRD CN LDD CN+4 SHN 21-7 POSITION SW2 MJN MESX EXIT IF SW2 IS SET LDM NEST,NI FETCH EQ NUMBER RJM C2D STM MESA+6 SET EQ NUMBER LDD T7 FETCH ERROR CODE SHN 21-5 PJN MES2 IF DECIMAL CONVERSION OF ST LDD ST HEX VALUE RJM C2X STM MESA+12 SET HEX CODE LDC 2R-- MES1 STM MESA+11 SET UPPER TWO CHARACTERS OF ST LDC MESA RJM DFM ISSUE DAYFILE MESSAGE LJM MESX EXIT MES2 LDD ST FETCH STATION NUMBER RJM C2D STM MESA+12 SET LOWER STATION NUMBER LDD ST SHN -6 RJM C2D UJN MES1 COMPLETE DAYFILE MESSAGE MESA DATA C*DSN ERXX EQYY STZZZZ* SPACE 5,11 * COMMON DECKS. *CALL COMPC2D * /--- BLOCK DBG 00 000 82/04/28 15.29 DBG SPACE 5,11 ** DBG - WRITE DATA TO CM BUFFER * * A 20B WORD BUFFER IS WRITTEN TO A 10000B WORD * CM BUFFER STARTING AT 1000B. * * ENTRY - (A) = 6/ID, 12/ADDRESS .DEBUG IFNE DEBUG,0 DBG SUBR STM DBGB SHN -14 STD CM LDN 17 STD CM+4 LDD OL STD CM+1 LDD NI STD CM+2 LDD RA SHN 6 ADC 0 DBGA EQU *-1 ADC 1000 CWD CM ADN 1 CWM **,CM+4 DBGB EQU *-1 LDN 20 RAM DBGA UJN DBGX .DEBUG ENDIF * /--- BLOCK BUFFERS 00 000 86/05/28 14.17 BUF TITLE BUFFER DEFINITIONS. SPACE 5,11 ** BUF - MACRO TO DEFINE A BUFFER * *NAME BUF LENGTH MACRO BUF,N,L LOC .1 N BSS 0 LOC *O .1 SET .1+L ENDM NOREF .1,.2,.3,.4 .1 SET MSFW OVERLAY MASS STORAGE DRIVER * FORMAT OF BUFFER HEADER * * 12/FC, 12/ ,12/CPW, 12/PWC, 12/PA * * FC - USED WHEN NO DATA PRESENT * 1 - ABORT OUTPUT * 2 - LOGOUT USER * 3 - RETURN TERMINAL TYPE * CPW- CPU WORD COUNT INCLUDING HEADER * PWC- PPU WORD COUNT INCLUDING HEADER * PA - PLATO STATION NUMBER BUF BUF TBUFL BUFFER FOR ECS READ/WRITES NETC EQU BUF+2 CPU WORD COUNT NETP EQU BUF+3 PPU WORD COUNT NETA EQU BUF+4 PLATO STATION ADDRESS IBUF BUF IBUFL INPUT BUFFER FROM 2550 ERRPL .1-MAI OVERFLOW MASS STORAGE DRIVER ERRNG .1-BUF-2*5-3*5*/PLAT/MXDSN TOO MANY 2550S ERRNG .1-BUF-4*5*/PLAT/MXDSN TOO MANY 2550S DPCH DATA 0 DDP CHANNEL DPEQ DATA 0 DDP EQUIPMENT INIC DATA 1 ZERO IF INITIALIZED TERT DATA 0 TERMINATION TYPE KEYT DATA 0 0 = OLD KEY TABLE, 1 = NEW KEY TABLE BYTECNT BSS 1 NUMBER OF DATA BYTES MSGCNT BSS 1 NUM OF BYTES PERMITTED PER LINE UMTB CON TS CM ADDRESS OF ACTIVE USER COUNT UMTC DATA 0 TOTAL 2550S SUPPORTED * /--- BLOCK BUFFERS 00 000 86/05/28 14.16 .1 SET * START OF BUFFERS OVL BUF OVLL OVERLAY BUFFER OVLE EQU .1 CMB BUF 4*5+2 FOUR WORD CM BUFFER NSYSBNK BUF 2 EM FWA OF STATION BANKS BANKADD BUF 1 DISPLACEMENT TO *BANKADD* ASCCON BUF 2 EM FWA OF ASCII CONNECTION TABLE * TABLES DEFINING 2550,S DRIVEN BY THIS PP NORD BUF MXNPU PLATO 2550 ORDINAL NCH BUF MXNPU CHANNEL NDS BUF MXNPU DPNC S(D) NEST BUF MXNPU EST ORDINAL NSN BUF MXNPU SYSTEM NUMBER NMT BUF MXNPU LARGEST CONNECT IN USE NSTS BUF MXNPU TIME OF LAST 2550 STATUS NCOD BUF MXNPU TIME TERMINAL OUTPUT CHECKED NREL BUF MXNPU NUMBER OF TIMES 2550 RE-LOADED CSTS BUF MXNPU COUPLER STATUS SSTS BUF MXNPU CCP SOFTWARE STATUS NUSR BUF MXNPU NUMBER OF USERS ON THIS NPU NTIM BUF MXNPU MSEC CLOCK WHEN LAST PROCESSED NCYC BUF MXNPU MSECS BETWEEN PREVIOUS CYCLES NNOR BUF MXNPU NUMBER OF OUTPUT REJECTS NNBO BUF MXNPU NUMBER OF BLOCKS OUTPUT (SENT) NNBI BUF MXNPU NUMBER OF BLOCKS INPUT (RCVD) NLBS BUF MXNPU SIZE OF LAST BLOCK TO 2550 NPPB BUF MXNPU NUMBER OF PACKETS IN LAST BLOCK NDEF BUF 20*MXNPU+1 MOVED DIRECT CELLS NCB EQU NDEF+0 CONNECTION BASE NEQ EQU NDEF+1 EQUIPMENT NUMBER NSD EQU NDEF+2 S(D) NSB EQU NDEF+3 FIRST STATION NUMBER * PP TO FRAMAT POINTERS NFP1 EQU NDEF+4 IN/OUT POINTERS ADDRESS NFB1 EQU NDEF+6 BUFFER ADDRESS NFI1 EQU NDEF+10 IN POINTER NFO1 EQU NDEF+11 OUT POINTER * FRAMAT TO PP POINTERS NFP2 EQU NDEF+12 IN/OUT POINTERS ADDRESS NFB2 EQU NDEF+14 BUFFER ADDRESS NFI2 EQU NDEF+16 IN POINTER NFO2 EQU NDEF+17 IN POINTER * /--- BLOCK BUFFERS 00 000 86/05/28 14.15 PRE EQU .1 START OF INITIALIZATION CODE OBUF BUF OBUFL OUTPUT BUFFER TO 2550 * THE ASCII TO PLATO KEY TRANSLATION OVERLAY * IS LOADED BY PRESET INTO KEYS * ** NOTE ** THE KEY TABLE IS ONLY 200B PP WORDS * LONG, BUT IT IS READ FROM CM, SO THE BUFFER MUST * BE LONG ENOUGH TO HANDLE THE 2 EXTRA PP WORDS IN * THE LAST CM WORD. KEYS BUF 202 KEY TRANSLATION TABLE KEYA EQU KEYS-3 LOAD ADDRESS FOR TABLE ZERA BUF 0 FWA ZEROED BY PRESET * COMPUTE NUMBER OF TERMINALS THAT CAN BE * SUPPORTED. .2 SET 7777-.1 SPACE LEFT IN PP MXT EQU .2/4 MAXIMUM NUMBER OF TERMINALS * TERMINAL STATUS TABLE * * BIT 11 - HOLD OUTPUT * 10 - PERMISSION TO SEND SENT TO FRAMATTER * 9 - TERMINAL ACTIVE * 8 - KEY BUFFER OVERFLOWING * 7 - TERMINAL IN ESCAPE MODE * 6 - FIRST ESCAPE CHARACTER FOUND * 5 - 0 - FIRST ESCAPE CHARACTER TST BUF MXT TERMINAL STATUS TABLE SDT BUF MXT PLATO TO S(D) ADDRESS TABLE * PLATO TO T(D) ADDRESS TABLE * * BIT 11 = 0 - 1200 BAUD * 1 - 300 BAUD * 10 = 0 - STANDARD (IST) TERMINAL TYPE * 1 - TEKTRONIX TERMINAL TYPE * 9 = 0 - USE OLD KEY TRANSLATION TABLE * 1 - USE NEW KEY TRANSLATION TABLE * 8 = UNUSED * 7 - 0 = T(D) FOR THIS CONNECTION TDT BUF MXT PLATO TO T(D) ADDRESS TABLE TOD BUF MXT TERMINAL OUTPUT DELAY TABLE * /--- BLOCK BUFFERS 00 000 86/05/28 14.15 CMB SPACE 5,11 ** CENTRAL MEMORY BUFFER DEFINITION * * 0 - 1 UNUSED * WORD 2 PARAMETERS FOR TUNING PERF. * *MXDSN*/*MXNPU* MAIN DRIVER REQUESTS (ONE PER PPU) * 2 *MXDSN* WORDS NPU STATISTICS IN CM * * 100 WORDS / PP CM/ECS BUFFER * * 2 WORDS / TERMINAL TERMINAL TABLE * BYTE 0 - 8/TERMINAL TYPE * 4/OVERFLOW KEY COUNT * BYTE 1 - DROPPED KEY COUNT * BYTE 2-9 - OVERFLOW KEYS PARAMS EQU 2 12/MIN PP-2550 BLOCK TIME, 48/0 .1 SET /PLAT/MXDSN+MXNPU-1 DR EQU PARAMS+1 REQUESTS FROM MAIN DRIVER PP TS EQU DR+.1/MXNPU TERMINAL COUNTS * DON'7T FORGET *CCDR* IS USED BY THE CFO'7S. NK EQU 100 NEW KEY TRANSLATION TABLE OK EQU NK+32 OLD KEY TRANSLATION TABLE .NOSV2 IFGE OSLEV,562D NOS V2 EB EQU OK+32+1 CM/EM BUFFER ADDRESS EBHEAD EQU EB-1 EM/BUFFER HEADER ADDRESS .NOSV2 ELSE NOS V1 EB EQU OK+32 CM/EM BUFFER ADDRESS .NOSV2 ENDIF * /--- BLOCK PRESET 00 000 86/05/28 14.19 PRS TITLE INITIALIZATION ROUTINES. PRS SPACE 5,11 ** PRS - INITIALIZE PROCESSING. QUAL PRESET ORG PRE * CLEAR TABLES PRS5 EXECUTE NKY,= LOAD NEW KEY TRANSLATION TABLE LDC /NKY/OVL RJM EXR LDN 32 STD T1 LENGTH OF KEY TABLE LDD RA SHN 6 ADK NK ADDRESS OF NEW KEY TABLE CWM KEYS,T1 WRITE KEY TABLE TO CM EXECUTE KEY,= LOAD OLD KEY TRANSLATION TABLE LDC /KEY/OVL RJM EXR LDN 32 STD T1 LENGTH OF KEY TABLE LDD RA SHN 6 ADK OK ADDRESS OF OLD KEY TABLE IN CM CWM KEYS,T1 WRITE KEY TABLE TO CM * INITIALIZE PARAMETER WORD IN CM LDK ZERL ZERO PARAM WORD CRD CM LDK 20D DEFAULT MSEC TIME FOR PP-2550 STD CM BLOCKS (METERING) LDK 4+28D-1 DEFAULT FREE WORDS IN A ',FULL', STD CM+1 PP-2550 BLOCK (OUR PKT SIZE-1) LDD RA SHN 6 ADK PARAMS CWD CM LDC ZERA FWA TO ZERO STD T1 PRS6 LDN 0 CLEAR NEXT WORD STI T1 AOD T1 LMC 10000 NJN PRS6 IF MORE MEMORY TO CLEAR STM MSD CLEAR MASS STORAGE DRIVER STD OL STD OD STM INIC SHOW INITIALIZATIONS COMPLETE LDC RTCL SET UP DATA METERING CLOCK CRD CM LDD CM+4 LDD CM+1 STM .MAIB SET OUTPUT REJECT IMER * /--- BLOCK PRESET 00 000 86/05/28 14.19 PRS SUBR ERRPL *-KEYA+5 FIXED PRESET TOO LONG RJM ICP INITIALIZE CONTROL POINT LDD IR+2 ZJN PRS1 IF DRIVER CALL RJM IRL INITIALIZE 2550 RE-LOAD UJN PRS1.1 PRS1 EXECUTE IDP,= INITIALIZE ESM ACCESS LDC /IDP/OVL RJM EXR ZJN PRS1.03 DDP RESERVED MJN PRS1.01 IF 800 SERIES EXECUTE EM7,= LDC /EM7/OVL UJN PRS1.02 PRS1.01 EXECUTE EM8,= LDC /EM8/OVL PRS1.02 RJM EXR EM ACCESS FOR 800 SERIES PRS1.03 BSS 0 RJM IFC INITIALIZE FRAMAT INTERFACE EXECUTE RFE,= RESERVE 2550S LDC /RFE/OVL RJM EXR PRS1.1 RJM FLF FIND LOAD FILE * INITIALIZE 2550 LCN 0 STD NI PRS2 RJM SNP SET UP NPU ZJN PRS3 IF CYCLED THROUGH ALL NPUS RJM IFE UJN PRS2 IF MORE NPUS * INITIALIZE LAST STATUS CLOCKS PRS3 LDC RTCL CRD CM LDN 0 STD T1 PRS4 LDD CM+1 STM NSTS,T1 AOD T1 LMM .SNPA NJN PRS4 IF MORE 2550S LDD CP ADN MS1W CWM PRSA,TR * WAIT DPNC RESET.* LDD IR+2 NJN PRS4.1 IF RE-LOAD CALL LJM PRS5 CLEAR TABLES * COMPLETE RE-LOAD PROCESSING PRS4.1 LJM TER PRSA DATA C* WAIT DPNC RESET.* * /--- BLOCK IFE 00 000 82/12/02 21.25 IFE SPACE 5,11 ** IFE - INITIALIZE FRONT END. * * THIS ROUTINE PREPARES THE 2550 FOR ACCESSING * THE NETWORK. CCP 2.0 IS LOADED INTO THE 2550 * AND THE NETWORK IS STARTED. IFE SUBR LDC FECH2 SET CHANNEL INSTRUCTIONS STD T2 LDM NCH,NI RJM ICH * LOAD MICRO-CODE LDC IFEA LOAD MICRO-CODE STD CB EXECUTE LPG,= LOAD A PROGRAM LDC /LPG/OVL RJM EXR * WAIT FOR MICRO-CODE TO INITIALIZE LDN SNU START 2550 RJM FNC IFE1 LDC RTCL SET UP STATUS CLOCK CRD CM LDD CM+1 STM NSTS,NI IFE2 RJM STS GET 2550 STATUS MJN IFE2 IF NO STATUS SBN IDL ZJN IFE1 IF 2550 DEADSTARTED SBN 8D-IDL NJN IFE4 IF NOT MICRO LOAD COMPLETE * LOAD MACRO-CODE LDC IFEB LOAD MACRO-CODE STD CB EXECUTE LPG,= LOAD A PROGRAM LDC /LPG/OVL RJM EXR EXECUTE GPS,= GET PRIMARY SWITCH LDC /GPS/OVL RJM EXR RJM WTB * WAIT FOR MACRO-CODE TO INITIALIZE LDN SNU START 2550 RJM FNC LDC RTCL SET UP STATUS CLOCK CRD CM LDD CM+1 STM NSTS,NI IFE3 RJM STS GET 2550 STATUS MJN IFE3 IF NO STATUS SBN IDL ZJN IFE5 IF 2550 DEADSTARTED IFE4 LDN NSTE INVALID NPU STATUS LJM MXE ABORT IFE5 LJM IFEX EXIT IFEA CON 0,0,0 DISK ADDRESS OF MICRO-CODE IFEB CON 0,0,0 DISK ADDRESS OF MACRO-CODE * /--- BLOCK SET 00 000 79/02/22 08.41 SET SPACE 5,11 ** SET - SET 2550 STORE ADDRESS * * ENTRY - (BUF) = 2550 ADDRESS * EXIT - 2550 ADDRESS LOADED SET SUBR LDM BUF+1 SHN 10 ADM BUF+2 STD T1 LDN OMO OUTPUT MEMORY ADDRESS RJM FNC LDM BUF+3 STD T1 LDN OMT RJM FNC UJN SETX EXIT * /--- BLOCK WTB 00 000 82/12/02 16.13 WTB SPACE 5,11 ** WTB - WRITE BUFFER TO 2550 AND VERIFY IT. * * ENTRY - BUF CONTAINS THE ADDRESS AND DATA WTB SUBR WTB1 RJM SET SEND 2550 ADDRESS LDN OPG OUTPUT PROGRAM ADD EQ FAN CH RJM IJM ACN CH LDM BUF+5 SHN 1 NUMBER OF BYTES TO OUTPUT OAM BUF+6,CH FJM *,CH DCN CH+40 ZJN WTB2 IF TRANSFER COMPLETE LDN OUTE UJN WTB3 ABORT WTB2 RJM SET SET UP ADDRESS LDN IPG INPUT PROGRAM ADD EQ FAN CH RJM IJM ACN CH LDM BUF+5 SHN 1 IAM BUF2,CH DCN CH+40 ZJN WTB4 IF TRANSFER COMPLETE LDN INCE WTB3 LJM MXE ABORT WTB4 LDM BUF+5 SHN 1 STD T1 SET LENGTH WTB5 SOD T1 MJN WTB7 IF LAST WORD CHECKED LDM BUF+6,T1 LMM BUF2,T1 ZJN WTB5 IF DATA COMPARES * PROCESS COMPARE ERROR RJM STS LDC CLC CLEAR COUPLER RJM FNC SOM WTBB DECREMENT ERROR COUNTER NJN WTB6 IF MORE ERRORS LEFT LDN CMPE COMPARE ERRORS UJN WTB3 ABORT WTB6 LJM WTB1 TRY AGAIN WTB7 LJM WTBX EXIT WTBB CON 32 MAXIMUM COMPARE ERRORS ACCEPTED * COMMON DECKS *CALL COMPRNS DPCH CHTB DDP / 2550 CHANNEL TABLE * /--- BLOCK CEA 00 000 86/05/28 14.21 TITLE OVERLAYED INITIALIZATION ROUTINES. SPACE 5 OVLB BSS 0 START OF OVERLAYED PRESET CODE CEA SPACE 5,11 ** CEA - CONVERT ECS ADDRESS * * ENTRY - (A) = PP ADDRESS OF ECS ADDRESS TO CONVERT * (T4-T5)= RAX BY WHICH TO BIAS ADDRESS CEA SUBR STD T1 LDD T4+1 RAM 1,T1 SHN -14 ADD T4 RAI T1 UJN CEAX * /--- BLOCK FLF 00 000 86/05/28 14.21 FLF SPACE 5,11 ** FLF - FIND LOAD FILE * * THE CLD IS SEARCHED FOR *PPU/CCB* AND *PPU/CCP*. * * EXIT - (IFEA) = DISK ADDRESS OF CCB FILE * (IFEB) = DISK ADDRESS OF CCP FILE * GET SYSTEM EQUIPMENT ORDINAL FROM *SYSTEM* FST FLF3 LDN FNTP CRD CM .NOSV2 IFGE OSLEV,562D NOS V2 LDD CM SHN 14B ADD CM+1 ADN 1 .NOSV2 ELSE NOS V1 AOD CM .NOSV2 ENDIF CRD CM READ FST FOR SYSTEM LDD CM .NOSV1 IFLT OSLEV,562D NOS V1 LPN 77 .NOSV1 ENDIF STM IFEA STM IFEB FLF SUBR * SEARCH FOR PPU/CCB FILE LDD MA SET FILE NAME CWM FLFA,ON SBN 1 CRD AB RJM CLD SEARCH SYSTEM FOR LOAD FILE NJN FLF2 IF FOUND FLF1 LDN LNFE LOAD FILE NOT FOUND RJM MES LJM TER FLF2 CRD CN READ LIBRARY POINTER LDD CN+3 SET FIRST TRACK STM IFEA+1 LDD CN+4 SET FIRST SECTOR STM IFEA+2 * SEARCH FOR PPU/CCP FILE LDD MA SET FILE NAME CWM FLFB,ON SBN 1 CRD AB RJM CLD SEARCH SYSTEM FOR LOAD FILE ZJN FLF1 IF NOT FOUND CRD CN READ LIBRARY POINTER LDD CN+3 SET FIRST TRACK STM IFEB+1 LDD CN+4 SET FIRST SECTOR STM IFEB+2 LJM FLF3 FLFA VFD 42/0LCCB,18/0 FLFB VFD 42/0LCCP,18/0 * /--- BLOCK ICP 00 000 86/05/28 14.22 .VERS2 IFGE OSLEV,562D NOS V2 IFP$ EQU 1 EJT$ EQU 1 ASSEMBLE ROUTINE .CEA *CALL COMPGFP IFP HERE *CALL PLAPCJN .VERS2 ENDIF ICP SPACE 4,10 ** ICP - INITIALIZE CONTROL POINT * * SET QUEUE PRIORITY TO *MXPS* + 1. * SET JOB NAME TO *DSN*. * SET INITIAL FIELD LENGTH. * VERIFY ALL DSN OVERLAYS ARE CM RESIDENT ICP SUBR ENTRY / EXIT .NOSV2 IFGE OSLEV,562D NOS V2 RJM IFP INITIALIZATION FOR COMPGFP .NOSV2 ENDIF RJM CUA CHECK USER ACCESS ZJN ICP1 IF SYOT LDN IUAE ILLEGAL USER ACCESS RJM MES MONITOR ABTM LJM PPR ICP1 LDD PO NJN ICPX IF NOT INITIAL PP DRIVER * SET QUEUE PRIORITY .NOSV2 IFGE OSLEV,562D NOS V2 LDN IRSI NON-ROLLABLE SUBSYSTEM ID STD CM+4 LDN /CPS/SSIS SET SUBSYSTEM ID FUNCTION CODE STD CM+1 MONITOR SJCM .NOSV2 ELSE NOS V1 LDC MXPS+1 STD CM+1 LDN 1 SET TYPE TO QUEUE PRIORITY STD CM+2 MONITOR RPRM .NOSV2 ENDIF * SET JOB NAME .NOSV2 IFGE OSLEV,562D NOS V2 LDD IR GET NAME FROM INPUT REGISTER STD T0 LDD IR+1 SCN 77 ADN 1R STD T0+1 LDN T0 (A) = ADDRESS OF NEW NAME RJM CJN CHANGE JOB NAME IN EJT .NOSV2 ELSE NOS V1 LDD CP ADN JNMW CRD CM LDD IR STD CM LDD IR+1 SCN 77 ADN 1R0 STD CM+1 LDD CP WRITE OUT JOB NAME ADN JNMW CWD CM .NOSV2 ENDIF * /--- BLOCK ICP 00 000 86/05/28 14.22 * GET INITIAL FIELD LENGTH LDN 1 REDUCE TO 100B WORDS RJM RFL * VERIFY OVERLAYS ARE CM RESIDENT LDN 0 STD T1 ICP2 LDD T1 ADC 3R"OVN"_A STD CM+3 SHN -14 STD CM+2 MONITOR SPLM LDD CM+1 SHN -6 SBN 1 NJN ICP3 IF NOT CM RESIDENT AOD T1 LMN OVLC NJN ICP2 IF MORE OVERLAYS * CLEAR FIRST 100 WORDS OF CM LDN 1 STD T1 LDN ZERL CRD CM ICP2.1 LDD RA SHN 6 ADD T1 CWD CM AOD T1 SHN 21-6 PJN ICP2.1 IF MORE WORDS TO CLEAR * SET CFO BIT LDD RA SHN 6 CRD CM LDN 4 STD CM+3 LDD RA SHN 6 CWD CM LJM ICPX EXIT ICP3 LDN OCME OVERLAYS MUST BE CM RESIDENT RJM MES LJM TER * /--- BLOCK IFC 00 000 87/02/24 10.38 IFC SPACE 5,11 ** IFC - INITIALIZE FRAMAT COMMUNICATION IFC12 LJM TER DROP PP IFC SUBR LDD CP ADN MS1W CWM IFCA,TR * WAITING FOR PLATO.* * FIND PLATO,S CONTROL POINT IFC1 LDN NCPL READ NUMBER OF CONTROL POINTS CRD CN IFC2 PAUSE LDD CM+1 NJN IFC12 IF ERROR FLAG SET .NOSV2 IFGE OSLEV,562D NOS V2 LDD CN+1 .NOSV2 ELSE NOS V1 LDD CN+3 .NOSV2 ENDIF SHN 7 ADN STSW CRD T1 .NOSV2 IFGE OSLEV,562D NOS V2 ADC TFSW-STSW .NOSV2 ELSE NOS V1 ADC JNMW-STSW .NOSV2 ENDIF STM PSEA SET ADDRESS FOR PAUSE CRD CM .NOSV2 IFGE OSLEV,562D NOS V2 SFA EJT,CM CRD CM READ JSNE WORD FROM EJT .NOSV2 ENDIF LDD CM LMC 2RPL NJN IFC3 IF NOT PLATO LDD CM+1 SHN -6 LMN 1RA ZJN IFC5 IF PLATO .NOSV2 IFGE OSLEV,562D NOS V2 IFC3 SOD CN+1 .NOSV2 ELSE NOS V1 IFC3 SOD CN+3 .NOSV2 ENDIF .NOSV2 IFGE OSLEV,562D NOS V2 ZJP IFC1 IF NO MORE CONTROL POINTS .NOSV2 ELSE NOS V1 ZJN IFC1 IF NO MORE CONTROL POINTS .NOSV2 ENDIF IFC4 LJM IFC2 CHECK NEXT CONTROL POINT * /--- BLOCK IFC 00 000 87/02/24 10.41 IFC5 STM MSD CLEAR MASS STORAGE DRIVER LDD T1 .NOSV2 IFGE OSLEV,562D NOS V2 SHN -11B CHECK FOR *X* STATUS (5) LMN 5 NJP IFC4 IF NOT IN *X* STATUS LDD CN+1 READ RAX FROM EXCHANGE PACKAGE .NOSV2 ELSE NOS V1 SHN 21-12 CHECK IF IN *X* STATUS PJN IFC4 IF NOT IN *X* STATUS LDD CN+3 READ RAX FROM EXCHANGE PACKAGE .NOSV2 ENDIF SHN 7 ADN 4 CRD T4 LDD T4 ADD T4+1 ZJN IFC4 IF RAX = 0 .NOS252 IFGE OSLEV,678D LDK MEFL CRD CM LDD CM+2 SHN 6+4 EXTENDED ADDRESSING BIT PJN IFC5.1 IF STANDARD MODE .NOS252 ELSE .NOSV2 IFGE OSLEV,562D NOS V2 LDK CFGL (A) = WORD WITH EM MODE .NOSV2 ELSE NOS V1 LDN CPUL .NOSV2 ENDIF CRD CM LDD CM+ESMW SHN 21-ESMB PJN IFC5.1 IF ECS MODE .NOS252 ENDIF * /--- BLOCK IFC 00 000 86/05/28 14.23 * UPDATE *RAX* TO ECS FORMAT LDD T4+1 SCN 77 SHN 6 LMD T4 SHN 6 STD T4 LDD T4+1 SHN 6 STD T4+1 * READ POINTER WORD IFC5.1 LDN DSNI ADD T4+1 STD T2 SHN -14 ADD T4 STD T1 LDN 1 STD T3 SET CM WORD COUNT LDN CN (A) = PP ADDRESS RJM RECS ZJN IFC8 IFC6 LJM TER DROP ON ERROR IFC7 LJM IFC1 IFC8 LDD CN+3 CHECK IF ADDRESS PRESENT ADD CN+4 ZJN IFC7 WAIT UNTIL ADDRESS AVAILABLE LDD CN+4 READ POINTER TABLE ADD T4+1 STD T2 SHN -14 ADD CN+3 ADD T4 STD T1 LDN 3+/PLAT/MXDSN*3 STD T3 LDC //BUF RJM RECS NJN IFC6 IF ECS ERROR * ABSOLUTIZE ECS ADDRESSES LDC //BUF+1 POLLING LIST ADDRESS RJM CEA LDM //BUF+1 STD BT LDM //BUF+2 STD BT+1 LDC //BUF+3 KEY BUFFER ADDRESS RJM CEA LDM //BUF+3 STD KB LDM //BUF+4 STD KB+1 LDC //BUF+5+1 STATION BANKS FWA RJM CEA LDM //BUF+5+1 STM NSYSBNK LDM //BUF+5+2 STM NSYSBNK+1 LDM //BUF+5 SET DISPLACEMENT TO *BANKADD* STM BANKADD LDC //BUF+2*5 RJM CEA LDM //BUF+2*5 STM ASCCON ASCII CONNECTION TABLE LDM //BUF+2*5+1 STM ASCCON+1 * SET *LIMIT* VALUES LDM //BUF+3*5 STD FL1 LDM //BUF+4*5 STD FL2 * /--- BLOCK IFC 00 000 82/05/09 21.38 * DETERMINE 2550S TO BE DRIVEN BY THIS PP LDC //BUF+3*5 STD T2 LDM //BUF STD T6 (T6) = TOTAL 2550 TO SUPPORT LDN 0 STD T0 (T0) = CURRENT 2550 ORDINAL LDD IR+4 SET PP ORDINAL STD T3 IFC8.1 ZJN IFC8.2 IF FOUND THIS PP,S FIRST 2250 LDN 3*5*MXNPU RAD T2 LDN MXNPU*2 2 WDS/NPU RAM UMTB CM TERMINAL COUNT WORD LDN MXNPU RAD T0 SOD T3 UJN IFC8.1 * CLEAR MESSAGE IFC8.2 LDN ZERL CRD CM LDD CP ADN MS1W CWD CM * DETERMINE NUMBER OF PPS TO DRIVE LDN 0 STD NI STD CB LDD T6 SBD T0 STD T6 (T6) = NUMBER OF 2550 TO DRIVE SBN MXNPU MJN IFC8.3 IF NOT TOO MANY 2550S FOR PP LDN MXNPU STD T6 (T6) = NUMBER OF 2550 TO DRIVE * /--- BLOCK IFC 00 000 82/04/15 11.43 * INITIALIZE TABLES FOR THIS 2550 IFC8.3 LDN 1 PP TO FRAMAT IN/OUT POINTERS ADD T2 RJM CEA LDN 3 PP TO FRAMAT BUFFER ADDRESS ADD T2 RJM CEA LDN 5+1 FRAMAT TO PP IN/OUT POINTERS ADD T2 RJM CEA LDC 5+3 FRAMAT TO PP BUFFER ADDRESS ADD T2 RJM CEA LDD T0 STM NORD,NI LDN 0 STM NEST,NI SHOW NO EQUIPMENT ASSIGNED LDD NI SHN 4 STD T1 LDM 12,T2 SHN 5 STM NSB,T1 SET BASE STATION LDD CB STM NCB,T1 SET BASE INDEX INTO TERM TABLE LDM 12+2,T2 SET PLATO S(D) STM NSD,T1 LDM 12+3,T2 SET PLATO SYSTEM NUMBER STM NSN,NI LDM 12+4,T2 SET DPNC S(D) STM NDS,NI LDN 0 STM NMT,NI SET NUMBER OF CONNECTIONS LDD RA SHN 6 ADM UMTB ADD NI CWD CM ADN 1 2 WDS/NPU CWD CM LDM 12+1,T2 SHN 5 RAD CB SET BASE FOR NEXT 2550 LDM 1,T2 MOVE ESM ADDRESSES STM NFP1,T1 LDM 2,T2 STM NFP1+1,T1 LDM 3,T2 STM NFB1,T1 LDM 4,T2 STM NFB1+1,T1 LDM 5+1,T2 STM NFP2,T1 LDM 5+2,T2 STM NFP2+1,T1 LDM 5+3,T2 STM NFB2,T1 LDM 5+4,T2 STM NFB2+1,T1 LDN 3*5 RAD T2 AOD T0 AOD NI LMD T6 ZJN IFC8.4 IF NO MORE 2550,S LJM IFC8.3 SET UP NEXT 2550 * /--- BLOCK IFC 00 000 82/04/23 08.55 * VERIFY PP TABLES LARGE ENOUGH FOR SITES IFC8.4 LDC MXT MAXIMUM NUMBER OF TERMINALS SBD CB PJN IFC10 IF TABLES DO NOT OVERFLOW LDN SOTE SITES OVERFLOW PP TABLES RJM MES LJM TER IFC10 LDD NI STM .SNPA SET TOTAL 2550S TO PROCESS SHN 4 STD T1 LDD CB SET LAST CONNECTION STM NCB,T1 LDD IR+4 NJN IFC10.1 IF NOT PRIMARY PP RJM INI INITIALIZE FL AND OTHER PPS UJN IFC11 IFC10.1 LDC //BUF+3*5+1 RJM CEA * SET BASE ADDRESS FOR IN/OUT POINTERS IFC11 LDM //BUF+3*5+1 STM .UPDA STM .UPDC LDM //BUF+3*5+2 STM .UPDB STM .UPDD * SET DISPLACEMENT TO FRAMAT TO PP POINTERS LDM //BUF (A) = TOTAL 2550S STD T1 RAM UMTC LDD T1 SHN 1 OFFSET TO FRAMAT TO PP POINTERS RAM .UPDD SHN -14 RAM .UPDC * COMPUTE BASE ADDRESS TERMINAL TABLE LDM //BUF+5*5 SHN 5 STD T1 LDM NSB FIRST STATION TO PROCESS SBD T1 FIRST DSN STATION SHN 1 WORDS ASSIGNED TO OTHER PPS RAD TB * INITIALIZE CIRCULAR BUFFER POINTERS LDC RTCL CRD CM LDD CM+4 SBN PTRD+10 STM UPDA RJM UPD UPDATE IN/OUT POINTERS LDM NFI1 STD FI1 LDM NFO2 STD FO2 LJM IFCX EXIT IFCA DATA C* WAITING FOR PLATO.* * /--- BLOCK INI 00 000 86/05/28 14.23 INI SPACE 5,11 ** INI - INITIALIZE FL AND OTHER PPS * * DETERMINE FL NEEDED TO SUPPORT ALL 2550S * LOAD ADDITIONAL PPS IF NECESSARY INI SUBR * COUNT NUMBER OF PP REQUIRED LDN 0 STD T2 STD T3 INI1 AOD T3 LDN MXNPU RAD T2 SBM //BUF MJN INI1 IF MORE PPS INI2 LDM //BUF+5+3 TOTAL DSN SITES SHN 5+1 WORDS FOR TERMINAL TABLE STD T1 LDD T3 SHN 6 WORDS FOR CM/ECS BUFFERS .NOSV2 IFGE OSLEV,562D NOS V2 STD IR+3 SAVE INTERMEDIATE RESULT LDD T3 ADD 2 WORDS FOR EACH HEADER ADK EBHEAD RAD IR+3 BASE ADDRESS OF TERMINAL TABLE .NOSV2 ELSE NOS V1 ADC EB STD IR+3 BASE ADDRESS OF TERMINAL TABLE .NOSV2 ENDIF STD T4 ADD T1 ADN 77 SHN -6 RJM /PRESET/RFL * /--- BLOCK INI 00 000 86/05/28 14.24 * LOAD ADDITONAL PPS INI3 SOD T3 STD IR+4 SET PP ORDINAL ZJN INI5 IF NO MORE PPS INI4 LDN 1 SET PRIORITY PP REQUEST STD CM+1 LDD MA CWD IR MONITOR RPPM LDD CM+1 NJN INI3 IF PP ASSIGNED PAUSE LDD CM+1 NJN INI4 TRY AGAIN LJM TER INI5 LDD T4 STD TB LJM INIX EXIT IRL SPACE 5,11 ** IRL - INITIALIZE RE-LOAD OF A 2550 * * INITIALIZE PP TO RE-LOAD ONE 2550 IRL SUBR LDN 1 SET 2550 TO PROCESS STM .SNPA * BUILD CONTROL ENTRIES TO RE-LOAD THIS 2550 LDD IR+2 SET EST ORDINAL STM NEST .NOS22 IFGE OSLEV,594D NOS 2.2 SFA EST (A) = FWA OF EST ENTRY ADK EQDE WORD OFFSET .NOS22 ELSE NOS 2.1 OR PRIOR ADM ESTS READ EST ENTRY .NOS22 ENDIF CRD CM LDD CM+1 SET CHANNEL NUMBER LPN 77 STM NCH RCHAN LDD IR+3 SET S(D) STM NSD LDD CM+4 SET EQUIPMENT NUMBER LPC 7000 STM NEQ LDD IR+4 SET DPNC S(D) STM NDS LDN MXREL STM NREL ALLOW ONLY ONE RE-LOAD LJM IRLX EXIT * /--- BLOCK IRL 00 000 82/12/06 15.57 RFL SPACE 5,11 ** RFL - REQUEST FIELD LENGTH * * ENTRY - (A) - DESIRED FIELD LENGTH RFL SUBR .DEBUG IFNE DEBUG,0 LDC 500 .DEBUG ENDIF STD T1 SAVE FIELD LENGTH RFL1 LDD FL LMD T1 ZJN RFLX IF AT REQUESTED FIELD LENGTH LDN ZERL CRD CM LDD T1 SET REQUESTED FL STD CM+1 MONITOR RSTM PAUSE LDD CM+1 ZJN RFL1 IF ERROR FLAG NOT SET LJM TER * COMMON DECKS *CALL COMPCLD *CALL COMPCUA * /--- BLOCK BUFFERS 00 000 79/09/05 15.36 SPACE 5,11 OVERFLOW * BUFFERS USED BY INITIALIZATION * OVERLAYS PRESET CODE .1 SET OVLB BUF BUF 200*2+10 DATA BUFFER BFDS BUF 502 DISK SECTOR BUFFER BUF2 BUF 200*2+10 COMPARE BUFFER ERRPL .1-7770 PRESET OVERFLOW QUAL *