PIO * /--- FILE TYPE = E * /--- BLOCK IDENT 00 000 81/09/09 03.09 IDENT PIO,PIO TITLE -PIO- PLATO CIU INPUT/OUTPUT TITLE COMMENTS COMMENT PLATO CIU INPUT/OUTPUT * * PERIPH SST * LIST F LIST CONDITIONAL CODE ALSO * * /--- BLOCK COMMENTS 00 000 81/04/28 14.22 ************************************************************ * * * * 10 ARGUMENTS ARE PASSED TO THIS PROGRAM - * * * 1. ECS ADDRESS OF KEY REQUEST SWITCH/LIST * * 2. NUMBER OF SITES RECOGNIZED * * 3. RELATIVE ECS ADDRESS OF STATION KEY BUFFERS * * 4. RELATIVE ECS ADDRESS OF FRAME COUNTER * * 5. RELATIVE ECS ADDRESS OF FRAME LENGTH TABLE * * 6. RELATIVE ECS ADDRESS OF FRAME BUFFERS * * 7. CM ADDRESS OF STATISTICS BUFFER * * 8. UNUSED * * 9. MAXIMUM FRAME LENGTH * * 10. PHYSICAL-LOGICAL SITE MAPPING INFO * * * ************************************************************ * /--- BLOCK DEFINITION 00 000 82/10/26 13.31 TITLE DEFINITIONS * * * * * DETERMINE OPERATING SYSTEM LEVEL THIS DECK * SHOULD BE ASSEMBLED FOR. ASSEMBLE FOR THE OS * NUMBER SPECIFIED IN THE ',ML', PARAMETER OF THE * -COMPASS- OR -CSTC- CARD. DEFAULT VALUE IS 518D. * *CALL COMPMAC *CALL COMSCPS *CALL COMSSSD *CALL PLAP501 *CALL PTEXT *CALL SYSCON *CALL PLASMPC *CALL AIDTEXT * * ************************************************************ * * THE FOLLOWING PARAMETERS MUST CORRESPOND TO THE * EQUIVALENT DEFINITIONS IN PLATO * * FMASK - FRAMSHF/FRAMSIZ * KEYBSHF - NKEYSHF * NPARAMS - LOADPIO * STATLTH - PIOSTAT * SCIMLTH - NPIOSC * BADLTH - PIOSTAT * FORINIP - FORINIP * FMASK EQU 177B MASK FOR FRAME INDEX KEYBSHF EQU 1 SHIFT FOR KEY BUFFER DIMENSION NPARAMS EQU 10 NUMBER OF ARGUMENTS STATLTH EQU 4 NUMBER OF CM STATISTICS WORDS SCIMLTH EQU 2 NUMBER CM WRDS IN PIO/SCIM BUFF BADLTH EQU 10 LENGTH OF BAD STATION LIST XBADLTH EQU 9 LENGTH OF LIST PASSED FROM SCIM FORINIP EQU 2 FRAMAT INITIALIZATION FLAG * * ************************************************************ * * OFLIMIT EQU 4 NUMBER OF STATION KEY BUFFER * OVERFLOWS ALLOWED BEFORE * BLOCKING STATION PPBLTH EQU 10 SIZE OF OUTPUT BUFFER KEYLTH EQU 360 SIZE OF KEY INPUT BUFFER * NTERMS = NUMBER OF REAL STATIONS (IPTEXT) * * ************************************************************ * /--- BLOCK DEFINITION 00 000 84/11/16 10.35 * * * LOW CORE DEFINITIONS * * D.T0 EQU 20B DIRECT CELL WORK VARIABLES D.T1 EQU 21B D.T2 EQU 22B D.T3 EQU 23B D.T4 EQU 24B * IOUT EQU 25B NOUT EQU 26B STATION EQU 27B KEY EQU 30B KEYII EQU 31B KEYOI EQU 32B A170 EQU 33B (0 = 700 MACHINE, 1 = 800) * NS EQU 44B NUMBER OF SITES FOR THIS CIU CB EQU 45B CIU BIAS TO GET PLATO STATION FS EQU 46B FIRST LEGAL STATION D.RSAV EQU 66B - 67B SAVE AREA FOR R-REGISTER * ************************************************************ * * * ALL-STATIONS MESSAGE OUTPUT DEFINITIONS * * BASE EQU D.T0 LENGTH EQU D.T1 ILOOP EQU D.T2 ADDRESS EQU D.T3 NN EQU 4 NCLASSES SET 1 DUP NN,1 NCLASSES SET NCLASSES*2 * * ************************************************************ * * * * -KEYSIN- * MACRO TO ACCEPT ALL PENDING KEYS FROM CIU * PURGMAC KEYSIN KEYSIN MACRO LOCAL A,B EJM B,I=NIU A CALL KEYIN FJM A,I=NIU B BSS 0 ENDM * * * /--- BLOCK MAIN LOOP 00 000 81/04/30 15.04 TITLE MAIN LOOP * * * ORG PPFW PIO CALL INITIAL INITIALIZATIONS * * * * SELECT THE CIU OUTPUT * * * THIS IS ONLY NEEDED ONCE INITIALLY, AND * * * AFTER THE CIU HAS BEEN DE-SELECTED WITH A * * * 7XXX FUNCTION. * * * * * * IF THE CIU OUTPUT IS NOT SELECTED, THE * * * FRAME COUNTER DOES NOT GET WRITTEN BACK, * * * CAUSING THE FRAMER AND THE PPU TO GET OUT * * * OF STEP FOR A WHILE. (SYMPTOM--15 SECONDS * * * OF REPEATED OUTPUT.) * LDM CIUEQ CHECK IF CIU AVAILABLE ZJP MAIN JUMP IF NOT IJM M50,O=NIU DCN O=NIU DEACTIVATE NIU OUTPUT CHANNEL M50 FNC 0,O=NIU SELECT OUTPUT CONTROLLER WAIT INACTIVE,O=NIU,M120 * * * WAIT TILL NIU IS READY FOR NEXT FRAME * MAIN CALL PAUSE CHECK FOR PAUSE OR ERROR LDM PINIT NJP M102 CHECK INITIALIZATIONS COMPLETE LOADCM PSTATS CRD D.T0 READ PPU STATUS WORD LDD D.T0+4 LPN 2 MASK OFF INITIALIZATION BIT ZJP M102 LDN 1 MARK INITIALIZATIONS COMPLETE STM PINIT DELAY 5000 CALL ALLOUT,ONMSG PRESS NEXT TO BEGIN DELAY 5000 * * CHECK IF FRAMAT INITIALIZING * M102 SOM FICNT CHECK IF SHOULD READ ECS FLAG NJP M104 LDN 5 RE-SET COUNTER STM FICNT * M1020 LDC ECSBUFF STD D.T0 D.T0 = PPU MEMORY ADDRESS LDM ECRA+1 COMPUTE ECS ADR OF INITIAL FLAG ADC FORINIP STD D.T2 D.T2 = LOWER PART OF ECS ADDR SHN -12 ADM ECRA STD D.T1 D.T1 = UPPER PART OF ECS ADDR LDN 5 STD D.T3 D.T3 = NUMBER PPU WORDS TO READ CALL READECS READ FRAMAT INITIAL FLAG LDM ECSBUFF LPC 4000B MASK OFF INITIALIZATION BIT ZJP M104 CALL MESSAG,(=16CPIO WAIT FRAMAT) CALL PAUSE CHECK FOR STORAGE MOVE / ERROR DELAY 5000 IDLE FOR A WHILE CALL MESSAG,=0 UJP M1020 WAIT FOR INITIALIZATIONS * * /--- BLOCK MAIN LOOP 00 000 84/11/15 10.49 * M104 CALL STATS PROCESS STATISTICS LDM CIUEQ CHECK IF CIU AVAILABLE ZJP SPEC EXIT IF NOT * * ACCEPT PENDING KEYS FROM CIU AND PASS TO PLATO * LDM NFRAME+4 CHECK FRAME COUNT - RE-SELECT LPC 77B CIU INPUT EVERY 64 FRAMES NJP M107 KEYSIN INPUT KEY(S) FROM CIU IJM M105,I=NIU CHECK IF CHANNEL INACTIVE DCN I=NIU DE-ACTIVATE INPUT CHANNEL WAIT INACTIVE,I=NIU,M124 * M105 FNC 40B,I=NIU SELECT INPUT CONTROLLER WAIT INACTIVE,I=NIU,M124 ACN I=NIU ACTIVATE NIU INPUT CHANNEL WAIT ACTIVE,I=NIU,M124 * M107 LDN 10 PROCESS MAX OF 10 KEYS STM KOCNT * M108 KEYSIN ACCEPT PENDING KEYS FROM CIU LDD KEYII LOAD KEY BUFFER INPUT POINTER ZJP M110 CALL KEYOUT OUTPUT NEXT KEY TO PLATO SOM KOCNT PJP M108 * * /--- BLOCK MAIN LOOP 00 000 84/11/15 10.44 * * ATTEMPT TO SELECT CIU AND OUTPUT NO-OP * M110 IJM M112,O=NIU DCN O=NIU DEACTIVATE NIU OUTPUT CHANNEL **** * A -FNC 0,O=NIU- STATEMENT HAS BEEN REMOVED HERE, * AS IT CAUSED THE NIU TO OVER-WRITE THE DATA * IN ITS HOLD BUFFER, CAUSING PREVIOUS DATA TO BE * OVER-WRITTEN FOR STATION 0. * * IT IS THOUGHT THAT THE BIT PATTERN THAT WAS USED * FOR NOOP0 FROM 80/1/25 UNTIL THE 81/3/8 (5767B) * WAS GENERATING SOME OVER-WRITES OF THE NIU BUFFER * FOR STATION 0-3 ON CDC SYSTEMS, DUE TO REGISTERS * CHANGING AT THE SAME TIME THEY WERE BEING COPIED * IN THE NIU (SEE NOTES BY J. STIFLE, 'SEPT. 1980). * * IT IS HOPED THAT REMOVING THE CAUSE OF THE OVER- * WRITES WILL ALLOW THOSE STATIONS TO FUNCTION * AGAIN. * BOB RADER 3/8/81 **** * * M111 FNC 0,O=NIU SELECT OUTPUT CONTROLLER * IJM M112,O=NIU * DELAY 10 * IJM M112,O=NIU * DCN O=NIU DISCONNECT IF NIU NOT READY * UJP MAIN * M112 ACN O=NIU ACTIVATE NIU OUTPUT CHANNEL LDN 1 SEND FIRST WORD OF A NO-OP TO OAM NOOP0,O=NIU STATION 0 EJM M114,O=NIU JUMP IF CIU READY FOR FRAME DELAY 15 EJM M114,O=NIU IJM MAIN,O=NIU DCN O=NIU DISCONNECT IF NOT READY UJP MAIN * M114 LDN 2 SEND REMAINING WORDS OF NO-OP OAM NOOP0+1,O=NIU EJM M200,O=NIU JUMP IF NIU READY FOR FRAME DELAY 5 EJM M200,O=NIU DELAY 15 EJM M200,O=NIU UJP M120 ERROR IF NOT READY * * M120 IJM M121,O=NIU DCN O=NIU DISCONNECT IF NIU NOT READY * M121 CALL MESSAG,(=27CPIO NO RESPONSE CIU OUTPUT) AOM OUTRESP UJP MAIN * M124 IJM M125,I=NIU DCN I=NIU DISCONNECT IF NIU NOT READY * M125 CALL MESSAG,(=26CPIO NO RESPONSE CIU INPUT) AOM KYRESP UJP MAIN * * /--- BLOCK MAIN LOOP 00 000 84/11/15 10.53 * * PROCESS FLOODING STATIONS LISTS AND READ LIST * OF STATIONS IN MAINTENANCE MODE * * * M200 SOM BADCNT CHECK IF SHOULD CLEAR BAD PJP M205 STATION LIST LDC 900 STM BADCNT RE-SET COUNTER * * LDC SCIMLTH*5 STD D.T3 D.T3 = N OF PPU WRDS TO READ LDC SCIMBUF STD D.T0 D.T0 = PPU MEMORY ADDRESS LDM ECRA+1 LOAD LOWER PART OF ECS RA ADM SCIMADD+1 ADD LOWER PART OF ECS REL ADDR STD D.T2 D.T2 = LOWER ECS ADDRESS SHN -12 ADM ECRA ADD UPPER PART OF ECS RA ADM SCIMADD ADD UPPER PART OF ECS REL ADDR STD D.T1 D.T1 = UPPER ECS ADDRESS CALL READECS READ SCIM COMMUNICATION BUFFER * LDN 0 STM ITEST ZERO N ENTRIES IN TEST LIST LDN BADLTH*2 LOAD LENGTH OF TEST/COUNT LISTS STD D.T0 * M201 SOD D.T0 DECREMENT INDEX MJP M202 JUMP WHEN END OF LIST REACHED LDN 0 STM TESTLST,D.T0 ZERO NEXT ENTRY IN TEST LIST STM CNTLST,D.T0 ZERO NEXT ENTRY IN COUNT LST UJP M201 * * M202 LDN 0 STM IBAD CLEAR LENGTH OF LIST LDC BADLTH STD D.T0 INITIALIZE INDEX * M203 SOD D.T0 DECREMENT INDEX MJP M205 LDN 0 CLEAR NEXT ENTRY IN BAD LIST STM BADLIST,D.T0 UJP M203 * * /--- BLOCK MAIN LOOP 00 000 84/11/15 10.49 * * INCREMENT FRAME COUNTER AND WRITE TO ECS * M205 LDM FBIAS STM IBIAS INITIALIZE BIAS TO THIS FRAME LDM FBIAS+1 STM IBIAS+1 LDM NFRAME+4 LOAD FRAME COUNTER LPC FMASK MASK OFF INDEX IN FRAME BUFFER STM IFRAME NJP M210 CHECK IF MUST RE-SET BIAS LDN 0 STM IBIAS RE-SET BIAS TO NEXT FRAME STM IBIAS+1 STM FBIAS LDM FRAMLTH STM FBIAS+1 UJP M215 * M210 LDM FRAMLTH ADVANCE POINTER TO NEXT FRAME RAM FBIAS+1 SHN -12 RAM FBIAS * M215 LDN 4 STD D.T0 INITIALIZE BYTE INDEX * M220 AOM NFRAME,D.T0 INCREMENT NEXT BYTE SHN -12 ZJP M225 CHECK FOR OVERFLOW TO NEXT BYTE SOD D.T0 PJP M220 END TEST * M225 LDC NFRAME STD D.T0 D.T0 = PPU MEMORY ADDRESS LDM ECRA+1 COMPUTE ECS ADDR OF FRAME COUNT ADM OUTPNT+1 STD D.T2 D.T2 = LOWER PART OF ECS ADDR SHN -12 ADM ECRA ADM OUTPNT STD D.T1 D.T1 = UPPER PART OF ECS ADDR LDN 5 STD D.T3 D.T3 = NUMBER WORDS TO WRITE CALL WRITECS UPDATE FRAME COUNTER IN ECS * * /--- BLOCK MAIN LOOP 00 000 81/04/21 20.41 * * READ LENGTH OF CURRENT FRAME FROM ECS LENGTH TABLE * KEYSIN ACCEPT ANY KEYS FROM CIU LDC ECSBUFF STD D.T0 D.T0 = PPU MEMORY ADDRESS LDM IFRAME LOAD INDEX TO CURRENT FRAME ADM ECRA+1 FORM LOWER PART OF ECS ADDRESS ADM OUTTAB+1 STD D.T2 D.T2 = LOWER PART OF ECS ADDR SHN -12 ADM ECRA FORM UPPER PART OF ECS ADDRESS ADM OUTTAB STD D.T1 D.T1 = UPPER PART OF ECS ADDR LDN 5 STD D.T3 D.T3 = NUMBER OF WORDS TO READ CALL READECS READ FROM FRAME LENGTH TABLE NJP M272 EXIT IF ECS PARITY ERROR LDM ECSBUFF+4 STD NOUT SET LENGTH OF CURRENT FRAME LDC -1 INITIALIZE LAST BUFFER FLAG STM ILAST LDD NOUT NUMBER OF WORDS IN FRAME NJP M300 JUMP IF NOT AN EMPTY FRAME * * /--- BLOCK MAIN LOOP 00 000 84/11/15 10.44 * * SPECIAL TREATMENT FOR EMPTY FRAME * M272 BSS 0 LDN 0 STD D.T0 STM ILAST STD IOUT UJP M325 * /--- BLOCK MAIN LOOP 00 000 84/11/15 10.47 * * READ AND OUTPUT NEXT PORTION OF FRAME * M300 KEYSIN ACCEPT ANY KEYS FROM CIU LDC PPBLTH STD D.T3 D.T3 = NUMBER CPU WORDS TO READ STD IOUT LDD NOUT GET NUMBER OF WORDS REMAINING SBM PENDTST PENDTST = PPBLTH STD NOUT ZJP M315 PJP M320 JUMP IF NOT LAST BUFFER FULL * M315 ADC PPBLTH STD D.T3 D.T3 = NUMBER CPU WORDS TO READ STD IOUT STM ILAST SET FLAG FOR LAST BUFFER * * /--- BLOCK MAIN LOOP 00 000 81/04/21 20.42 * * READ NEXT PORTION OF CURRENT FRAME FROM ECS * M320 LDM IBIAS+1 COMPUTE ECS ADDRESS ADM ECRA+1 FORM LOWER PART OF ECS ADDRESS ADM OUTBUFF+1 STD D.T2 D.T2 = LOWER PART OF ECS ADDR SHN -12 ADM ECRA FORM UPPER PART OF ECS ADDRESS ADM OUTBUFF ADM IBIAS STD D.T1 D.T1 = UPPER PART OF ECS ADDR LDC PPBUFF STD D.T0 D.T0 = ADDRESS OF PPU BUFFER LDD D.T3 RAM IBIAS+1 INCREMENT BIAS IN FRAME BUFFER SHN -12 RAM IBIAS LDD D.T3 SHN 2 RAD D.T3 D.T3 = NUM PPU WORDS TO READ CALL READECS KEYSIN ACCEPT ANY KEYS FROM CIU LDM ILAST SHN 6 MJP M330 JUMP IF NOT LAST BUFFER SHN -6 STD D.T0 SHN 2 MULTIPLY BY 5 FOR PPU WORD CNT RAD D.T0 * * * * PUT EMPTY FRAME AT END TO SIGNAL END OF FRAME * SEND IT TO UNUSED STATION. * M325 BSS 0 LDC 2000B+1023 SET BIT AND STATION NUMBER STM PPBUFF+2,D.T0 LDN 0 STM PPBUFF+1,D.T0 LDC 4000B SET START BIT STM PPBUFF,D.T0 AOD IOUT COUNT EXTRA FRAME * * /--- BLOCK MAIN LOOP 00 000 81/04/21 20.44 * * OUTPUT NEXT PORTION OF FRAME TO CIU * M330 LDC PPBUFF INITIALIZE POINTER STD D.T0 * M350 SOD IOUT NUMBER OF WORDS LEFT IN BUFFER MJP M370 EXIT IF END OF BUFFER LDD D.T0 POINTER TO NEXT TERMINAL WORD STM M357+1 PLANT ADDRESS OF OUTPUT ADN 5 STD D.T0 ADVANCE POINTER * WAIT EMPTY,O=NIU,M360 * M355 LDN 3 SET TO OUTPUT NEXT 3 WORDS M357 OAM **,O=NIU OUTPUT NEXT TERMINAL WORD UJP M350 * * * RE-SELECT CIU OUTPUT CONTROLLER IF TIME-OUT * M360 IJM M365,O=NIU DCN O=NIU DEACTIVATE CIU OUTPUT CHANNEL * M365 FNC 0,O=NIU SELECT OUTPUT CONTROLLER WAIT INACTIVE,O=NIU,M120 ACN O=NIU ACTIVATE CIU OUTPUT CHANNEL UJP M355 * * * CHECK IF AT END OF FRAME * M370 LDM ILAST LOAD LAST BUFFER FLAG SHN 6 MJP M300 CONTINUE IF NOT LAST BUFFER UJP MAIN * /--- BLOCK SPECIAL 00 000 84/11/15 10.47 TITLE SPECIAL LOOP INPUT OR OUTPUT OFF * * * SPEC DELAY 1000 IDLE FOR A WHILE LDM CIUEQ CHECK IF CIU AVAILABLE ZJP I700 EXIT IF NOT * * ACCEPT PENDING KEYS FROM CIU AND PASS TO PLATO * AJM I150,I=NIU CHECK IF CHANNEL ACTIVE FNC 40B,I=NIU SELECT INPUT CONTROLLER WAIT INACTIVE,I=NIU,M124 ACN I=NIU ACTIVATE NIU INPUT CHANNEL WAIT ACTIVE,I=NIU,M124 * I150 LDN 20 PROCESS MAX OF 20 KEYS STM KOCNT * I160 KEYSIN ACCEPT PENDING KEYS FROM CIU LDD KEYII LOAD KEY BUFFER INPUT POINTER ZJP I700 CALL KEYOUT OUTPUT NEXT KEY TO PLATO SOM KOCNT PJP I160 UJP I700 * * /--- BLOCK SPECIAL 00 000 84/11/15 10.47 * * INCREMENT FRAME COUNTER APROX EVERY 16 MILLS * I700 SOM SFCNT CHECK IF TIME TO UPDATE FRAME PJP MAIN LDN 15 RE-SET COUNTER STM SFCNT LDN 4 STD D.T0 INITIALIZE BYTE INDEX * I720 AOM NFRAME,D.T0 INCREMENT NEXT BYTE SHN -12 ZJP I725 CHECK FOR OVERFLOW TO NEXT BYTE SOD D.T0 PJP I720 END TEST * I725 LDC NFRAME STD D.T0 D.T0 = PPU MEMORY ADDRESS LDM ECRA+1 COMPUTE ECS ADDR OF FRAME COUNT ADM OUTPNT+1 STD D.T2 D.T2 = LOWER PART OF ECS ADDR SHN -12 ADM ECRA ADM OUTPNT STD D.T1 D.T1 = UPPER PART OF ECS ADDR LDN 5 STD D.T3 D.T3 = NUMBER WORDS TO WRITE CALL WRITECS UPDATE FRAME COUNTER IN ECS UJP MAIN * * IFP$ EQU 1 FOR COMPGFP EJT$ EQU 1 ASSEMBLE ROUTINE .CEA *CALL COMPGFP IFP HERE * /--- BLOCK KEYIN 00 000 81/09/08 01.28 TITLE -KEYIN- READ NEXT KEY TO KEY BUFFER * * * * -KEYIN- * READS NEXT KEY (2 PPU WORDS) FROM CIU TO BUFFER * CALLED BY -KEYSIN- MACRO * * KEYIN SUBR AJM KY100,I=NIU CHECK IF CHANNEL ACTIVE FNC 40B,I=NIU SELECT INPUT CONTROLLER WAIT INACTIVE,I=NIU,KY860 ACN I=NIU ACTIVATE CIU INPUT CHANNEL * KY100 EJM KEYINX,I=NIU IF NO KEY READY YET IAN I=NIU INPUT STATION DATA WORD@ STD D.T0 SHN 6 POSITION STATION WORD BIT PJP KY850 EXIT IF CIU OUT OF STEP WAIT FULL,I=NIU,KY860 WAIT FOR KEY DATA WORD IAN I=NIU INPUT KEY DATA WORD STD D.T1 LDD KEYII LOAD INDEX IN KEY BUFFER STD D.T3 ADN 2 ADVANCE INDEX STD KEYII SBM MXKBIDX CHECK AGAINST MAXIMUM MJN KY110 LDD KEYII STM MXKBIDX KY110 LDD KEYII SBM KENDTST CHECK FOR BUFFER OVERFLOW PJP KY870 LDD D.T0 LOAD FIRST WORD OF KEY LPC 3777B REMOVE TOP BIT STM KEYBUFF,D.T3 LDD D.T1 LOAD SECOND WORD OF KEY STM KEYBUFF+1,D.T3 LJM KEYINX * /--- BLOCK KEYIN 00 000 81/08/06 22.29 * KY850 CALL MESSAG,(=24CPIO KEY DATA OUT OF SEQ) AOM KYSEQ UJP KY890 * KY860 CALL MESSAG,(=26CPIO NO RESPONSE CIU INPUT) AOM KYRESP UJP KY890 * KY870 AOM KYOFLOW INCREMENT OVERFLOW COUNT STD D.T0 CALL OTOA CONVERT OCTAL TO ALPHA LDD D.T1 STM KYM100 PLANT ALPHA COUNTER LDD D.T2 STM KYM100+1 CALL DFM,KYMSG1 OUTPUT DAYFILE MESSAGE LDN 0 STD KEYII DUMP ALL KEYS IN BUFFER STD KEYOI UJN KYI9 * KY890 DCN I=NIU DISCONNECT CIU CHANNEL DELAY 10 ACN I=NIU RE-ACTIVATE CIU CHANNEL KYI9 LJM KEYINX * * KYMSG1 DIS ,*PIO KEY BUFFER OVERFLOW XXXX* KYM100 EQU KYMSG1+13 * * * /--- BLOCK KEYOUT 00 000 77/08/23 03.47 TITLE -KEYOUT- OUTPUT NEXT KEY * * * * -KEYOUT- * OUTPUTS NEXT KEY FROM PPU KEY BUFFER TO STATION * KEY BUFFER IN ECS AND SETS BIT FOR THIS STATION * IN CM AND ECS POLLING LISTS * * KEYOUT SUBR * * GET NEXT KEY TO *KEY* AND *STATION* * LDD KEYII LOAD BUFFER INPUT POINTER SBD KEYOI CHECK AGAINST OUTPUT POINTER ZJP KYO900 EXIT IF NO KEYS TO DO MJP KYO900 LDD KEYOI LOAD OUTPUT POINTER STD D.T0 ADN 2 ADVANCE OUTPUT POINTER STD KEYOI LDM KEYBUFF,D.T0 LOAD STATION WORD STD STATION SBD FS FIRST LEGAL PHYSICAL STATION MJP KYO820 NOT LEGAL LDD STATION ADC -0 MAX LEGAL PHYSICAL STATION .NTERM1 EQU *-1 PJP KYO820 IF TOO BIG LDD CB BIAS TO LOGICAL STATION NUMBER RAD STATION * * CHECK IF THIS STATION FLOODING SYSTEM WITH KEYS * STD D.T1 SET STATION NUMBER LDM IBAD GET NUMBER OF FLOODING STATIONS ZJN KYO150 STD D.T2 * KYO110 SOD D.T2 DECREMENT INDEX IN BAD LIST MJN KYO150 LDM BADLIST,D.T2 SBD D.T1 CHECK IF THIS STATION FLOODING NJP KYO110 LJM KEYOUTX * KYO150 BSS 0 LDM KEYBUFF+1,D.T0 LOAD KEY WORD STD KEY * * /--- BLOCK KEYOUT 00 000 75/08/11 20.05 * * READ KEY BUFFER FOR THIS STATION * LDC ECSBUFF STD D.T0 D.T0 = PPU MEMORY ADDRESS LDD STATION COMPUTE KEY BUFFER INDEX SHN KEYBSHF ADM ECRA+1 ADD LOWER PART OF ECS RA ADM KEYBADD+1 ADD LOWER PART OF KEY BUFF ADDR STD D.T2 D.T2 = LOWER ECS ADDRESS SHN -12 ADM ECRA ADD UPPER PART OF ECS RA ADM KEYBADD ADD UPPER PART OF KEY BUFF ADDR STD D.T1 D.T1 = UPPER ECS ADDRESS LDN 10 STD D.T3 D.T3 = NUMBER PPU WORDS TO READ CALL READECS D.T0 - D.T3 ALREADY SET UP NJP KEYOUTX IF ECS PARITY ERROR * * /--- BLOCK KEYOUT 00 000 84/11/15 10.50 * * CHECK FOR FAST COLLECT BIT (TOP BIT OF STOP1 BYTE) * LDM ECSBUFF+8 GET STOP1 CODE LPC 4000B ISOLATE FASTKEY ON-BIT ZJP KYO210 JUMP IF NOT FAST COLLECT * * COUNT THE FAST COLLECT EXECUTIONS * AOM FKSTAT * * READ FAST COLLECT CONTROL BUFFER * LDC FKYBUFF D.T0 = PPU MEMORY ADDRESS STD D.T0 LDM ECRA+1 LOWER PART OF ECS RA ADM FKBFADD+1 ADD LOWER PART OF ADDRESS STD D.T2 D.T2 = LOWER ECS ADDRESS SHN -12 ADM ECRA ADD UPPER PART OF ECS RA ADM FKBFADD ADD UPPER PART OF ADDRESS STD D.T1 D.T1 = UPPER ECS ADDRESS LDN 10 LENGTH = 2 CM WORDS STD D.T3 D.T3 = NUMBER PPU WORDS TO READ CALL READECS NJP KEYOUTX IF ECS PARITY ERROR * * CHECK THAT THIS IS THE PROPER STATION * LDM FKYBUFF+5 GET STATION EXPECTED SBD STATION ACTUAL STATION NJP KYO200 JUMP IF NOT CORRECT STATION * * CHECK IF ALREADY DONE COLLECTING * LDM FKYBUFF+4 GET TOP BIT IN 5TH BYTE LPC 4000B ISOLATE IT NJP KYO200 JUMP IF DONE (BIT SET) * * READ PROPER WORD OF ECS STORAGE BUFFER * KYO155 LDC STRBUFF D.T0 = PPU MEMORY ADDRESS STD D.T0 LDM ECRA+1 LOWER PART OF ECS RA ADM FKYBUFF+1 ADD LOWER PART OF ADDRESS STD D.T2 D.T2 = LOWER ECS ADDRESS SHN -12 ADM ECRA ADD UPPER PART OF ECS RA ADM FKYBUFF ADD UPPER PART OF ADDRESS STD D.T1 D.T1 = UPPER ECS ADDRESS LDN 5 LENGTH = 1 CM WORD STD D.T3 D.T3 = NUMBER PPU WORDS TO READ CALL READECS KYO1 NJP KEYOUTX IF ECS PARITY ERROR * * /--- BLOCK KEYOUT 00 000 81/09/07 00.36 * * STORE THE KEY IN THE BUFFER * LDM FKYBUFF+4 BYTE ORDINAL STD D.T4 USE AS INDEX LDD KEY GET THE KEY STM STRBUFF,D.T4 CALL WRITECS WRITE BACK THE WORD OF STORAGE NJN KYO1 IF ECS PARITY ERROR * * INCREMENT THE BYTE INDEX AND ECS STORAGE ADDRESS * AOM FKYBUFF+4 BYTE INDEX SBN 5 CHECK FOR WRAP AROUND NJN KYO160 SKIP ECS STORAGE ADDRESS STM FKYBUFF+4 ZERO BYTE INDEX AOM FKYBUFF+1 LOWER ECS STORAGE ADDRESS SHN -12 ADM FKYBUFF UPPER HALF STM FKYBUFF * * COUNT NUMBER OF KEYS COLLECTED * KYO160 AOM FKYBUFF+3 LOWER KEY COUNT SHN -12 ADM FKYBUFF+2 UPPER HALF STM FKYBUFF+2 * * /--- BLOCK KEYOUT 00 000 81/09/08 00.02 * * IF LAST KEY, SET DONE BIT * LDM ECSBUFF+8 FIRST CHECK FOR STOP1 LPC 3777B GET RID OF FASTKEY CONTROL BIT SBD KEY CHECK AGAINST KEY ZJN KYO180 IF STOP1 * LDM FKYBUFF+6 CHECK SPECIAL KEY SBD KEY ZJN KYO180 IF SPECIAL KEY * LDM FKYBUFF+7 UPPER KEYS TO COLLECT SBM FKYBUFF+2 UPPER KEYS COLLECTED NJN KYO190 IF NOT LAST KEY LDM FKYBUFF+8 LOWER KEYS TO COLLECT SBM FKYBUFF+3 LOWER KEYS COLLECTED NJN KYO190 IF NOT LAST KEY * * SET DONE BIT IN CONTROL BUFFER * KYO180 LDM FKYBUFF+4 5TH BYTE ADC 4000B TURN ON BIT STM FKYBUFF+4 * * WRITE FAST COLLECT CONTROL BUFFER BACK TO ECS * KYO190 LDC FKYBUFF D.T0 = PPU MEMORY ADDRESS STD D.T0 LDM ECRA+1 LOWER PART OF ECS RA ADM FKBFADD+1 ADD LOWER PART OF ADDRESS STD D.T2 D.T2 = LOWER ECS ADDRESS SHN -12 ADM ECRA ADD UPPER PART OF ECS RA ADM FKBFADD ADD UPPERPART OF ADDRESS STD D.T1 D.T1 = UPPER ECS ADDRESS LDN 5 LENGTH = 1 CM WORD STD D.T3 D.T3 = NUMBER PPU WORDS TO READ CALL WRITECS WRITE IT NJP KEYOUTX IF ECS PARITY ERROR * * IF LAST KEY, PROCESS IT IN REGULAR WAY * LDM FKYBUFF+4 5TH BYTE LPC 4000B MASK OFF DONE BIT ZJP KEYOUTX * * /--- BLOCK KEYOUT 00 000 84/11/15 10.50 * * RECOMPUTE ADDRESSES FOR KEYBUFFER READECS * KYO200 LDC ECSBUFF STD D.T0 D.T0 = PPU MEMORY ADDRESS LDD STATION COMPUTE KEY BUFFER INDEX SHN KEYBSHF ADM ECRA+1 ADD LOWER PART OF ECS RA ADM KEYBADD+1 ADD LOWER PART OF KEY BUFF ADDR STD D.T2 D.T2 = LOWER ECS ADDRESS SHN -12 ADM ECRA ADD UPPER PART OF ECS RA ADM KEYBADD ADD UPPER PART OF KEY BUFF ADDR STD D.T1 D.T1 = UPPER ECS ADDRESS LDN 10 STD D.T3 D.T3 = NUMBER PPU WORDS TO READ * * CHECK IF ROOM FOR NEW KEY IN STATIONS KEY BUFFER * KYO210 LDM ECSBUFF+4 PPU INDEX IN KEY BUFFER SBM ECSBUFF+9 CPU INDEX IN KEY BUFFER ZJN KYO225 IF CPU INDEX = PPU INDEX PJN KYO220 ADC 10000B TAKE 12 BIT ABSOLUTE VALUE * KYO220 LPN 3 MASK INDEX FOR MOD 4 NJN KYO225 IF NO OVERFLOW LDM ECSBUFF+8 LOAD -STOP1- KEY VALUE LPC 3777B MASK OFF FASTKEY CONTROL BIT SBD KEY NJP KYO800 IGNORE KEY IF NOT -STOP1- LDM ECSBUFF+4 UJN KYO227 OVERWRITE LAST KEY * * ADD NEW KEY TO STATION KEY BUFFER * KYO225 AOM ECSBUFF+4 INCREMENT PPU KEY BUFFER INDEX KYO227 LPN 3 MASK OFF INDEX (MOD 4) STD D.T4 LDD KEY PLANT KEY CODE IN KEY BUFFER STM ECSBUFF,D.T4 LDN 5 D.T3 = NUMBER WORDS TO WRITE STD D.T3 CALL WRITECS D.T0 - D.T3 ARGUMENTS * * COMPUTE INDEX FOR THIS STATION IN ECS BIT TABLE * LDD STATION GET STATION NUMBER LPN 37B MOD 32 ADN 4 ADD BIAS TO STARTING BIT STD D.T1 LDN 3 INITIALIZE INDEX AT LOW BYTE STD D.T4 * * /--- BLOCK KEYOUT 00 000 81/04/28 17.08 * KYO300 LDD D.T1 LOAD BIT INDEX SBN 12 CHECK IF BIT IS IN THIS BYTE MJN KYO310 STD D.T1 ADJUST BIT INDEX SOD D.T4 ADJUST BYTE INDEX UJP KYO300 * KYO310 LDM KYO320 LOAD SHIFT INSTRUCTION SCN 77B ADD D.T1 ATTACH SHIFT COUNT STM KYO320 LDN 1 SET UP BIT * KYO320 SHN 0 POSITION BIT WITHIN BYTE STM KYO362+1 STORE BIT MASK * * /--- BLOCK KEYOUT 00 000 85/06/13 13.17 * * SET BIT IN ECS POLLING LIST FOR THIS STATION * KYO360 LDC ECSBUFF SET FOR ECS READ STD D.T0 D.T0 = PPU MEMORY ADDRESS LDD STATION ECS ADDRESS = STATION SHN -5 /32 ADM ECRA+1 + ECS RA ADM ECSSWX+1 + RELATIVE ADDRESS STD D.T2 D.T2 = LOWER ECS ADDRESS SHN -12 ADJUST CARRY ADM ECRA COMPUTE UPPER PART OF ADDRESS ADM ECSSWX STD D.T1 D.T1 = UPPER ECS ADDRESS LDN 5 STD D.T3 D.T3 = NUM PPU WORDS TO READ CALL READECS READ WORD FROM REQUEST LIST NJP KEYOUTX IF ECS PARITY ERROR *** CDC-ONLY TRAP FOR BAD INPUT LIST WORDS CDCIF IFNE CDC,0 LDC 2037B RIGHT VALUE LMM ECSBUFF CHECK EXPONENT ZJN TRAP1 IF OK .NOS2 IFLT OSLEV,578D MONITOR MXFM SAY CHEESE .NOS2 ELSE .NOS241 IFLT OSLEV,630D MONITOR HNGM SAY CHEESE .NOS241 ELSE LDC * STD CM+1 SAVE CALL ADDRESS LDK PPET STD CM+2 *PP ABORT* ERROR FLAG MONITOR CHGM SAY CHEESE, CONDITIONALLY .NOS241 ENDIF .NOS2 ENDIF TRAP1 BSS 0 CDCIF ENDIF *** END TRAP. * LDM ECSBUFF,D.T4 GET PROPER WORD KYO362 LPC 0 MASK OFF PROPER BIT NJP KYO2 IF BIT ALREADY ON LDM ECSBUFF,D.T4 LMM KYO362+1 SET BIT FOR THIS STATION STM ECSBUFF,D.T4 LDN 1 SET LOWEST BIT FOR RE-READ STM ECSBUFF+4 *** CDC-ONLY TRAP FOR BAD INPUT LIST WORDS CDCIF IFNE CDC,0 LDC 2037B RIGHT VALUE LMM ECSBUFF CHECK EXPONENT ZJN TRAP2 IF OK .NOS2 IFLT OSLEV,578D MONITOR MXFM SAY CHEESE .NOS2 ELSE .NOS241 IFLT OSLEV,630D MONITOR HNGM SAY CHEESE .NOS241 ELSE LDC * STD CM+1 SAVE CALL ADDRESS LDK PPET STD CM+2 *PP ABORT* ERROR FLAG MONITOR CHGM SAY CHEESE, CONDITIONALLY .NOS241 ENDIF .NOS2 ENDIF TRAP2 BSS 0 CDCIF ENDIF *** END TRAP. CALL WRITECS WRITE WORD BACK TO ECS NJN KYO2 CALL READECS READ REQUEST LIST WORD AGAIN LDM ECSBUFF+4 SBN 1 CHECK FOR POSSIBLE CPU CONFLICT NJP KYO360 KYO2 LJM KEYOUTX * * /--- BLOCK KEYOUT 00 000 84/11/15 10.51 * * ADD THIS STATION TO LIST OF STATIONS FLOODING * SYSTEM WITH KEYS AND OUTPUT B-DISPLAY MESSAGE * * * * CHECK THE LIST PASSED FROM SCIM TO SEE * IF THIS STATION IS ONE THAT SHOULD * NOT BE TURNED OFF * KYO800 LDM SCIMBUF+XBADLTH LOAD LENGTH OF LIST ZJN KYO803 IF LIST FROM SCIM EMPTY STD D.T0 SBN XBADLTH+1 CHECK FOR BAD LENGTH VALUE PJN KYO803 IF BAD LENGTH * KYO802 SOD D.T0 DECREMENT COUNTER MJN KYO803 IF STATION NOT ON LIST LDD STATION LOAD CURRENT STATION NUMBER SBM SCIMBUF,D.T0 SUBTRACT VAL FOUND IN TABLE NJP KYO802 IF NO MATCH CHECK NEXT ENTRY AOM KYIGNT COUNT KEYS IGNORED IN TEST MODE UJP KYO805 AVOID TURNING STATION OFF * * * INSERT STATION INTO TEST LIST OR INCREMENT * COUNT FOR A STATION ALREADY LISTED * * KYO803 LDM ITEST LOAD NUMBER OF STATIONS IN LIST STD D.T0 KYO8031 SOD D.T0 DECREMENT COUNTER MJN KYO8032 NOT FOUND, TRY TO ADD TO LIST LDD STATION SBM TESTLST,D.T0 CHECK NEXT ENTRY IN THE LIST NJP KYO8031 IF NO MATCH TRY NEXT ENTRY UJN KYO8033 FOUND, GO PROCESS COUNT * KYO8032 LDM ITEST LOAD COUNT OF ENTRIES IN LIST STD D.T0 SBN BADLTH*2 CHECK IF ROOM IN TEST LIST PJP KYO805 GIVE UP IF NO ROOM * LDD STATION STM TESTLST,D.T0 ADD STATION TO LIST * STM KYIGNT+1 DEBUG ONLY...LAST STATION ADDED LDN 1 STM CNTLST,D.T0 SET COUNT TO 1 FOR STATION AOM ITEST INCREMENT COUNT OF ENTRIES * STM KYIGNT+2 DEBUG ONLY...ENTRIES IN LIST UJN KYO805 * KYO8033 AOM CNTLST,D.T0 INCREMENT COUNT FOR STATION SBN OFLIMIT CHECK IF NEEDS TO BE BLOCKED MJN KYO805 DONT BLOCK STATION INPUT * * * /--- BLOCK KEYOUT 00 000 79/01/04 21.48 * * * * ADD STATION TO BAD LIST IF LIST NOT FULL * KYO804 LDM IBAD LENGTH OF BAD STATION LIST STD D.T0 SBN BADLTH PJN KYO805 IF LIST FULL AOM IBAD INCREMENT LENGTH OF LIST LDD STATION STM BADLIST,D.T0 * * * * * INCREMENT COUNT AND OUTPUT MESSAGE * * KYO805 AOM KYIGN INCREMENT IGNORED COUNTER SOM KOMCNT CHECK IF SHOULD OUTPUT MESSAGE PJN KYO3 LDC 300 RE-SET COUNTER STM KOMCNT LDD STATION STD D.T0 CONVERT STATION NUMBER TO ALPHA CALL OTOA LDD D.T1 LOAD FIRST TWO ALPHA CHARACTERS STM KOMSG1+13 LDD D.T2 LOAD SECOND TWO CHARACTERS STM KOMSG1+14 CALL MESSAG,KOMSG1 OUTPUT B-DISPLAY MESSAGE KYO3 LJM KEYOUTX * * * OUTPUT B-DISPLAY MESSAGE FOR ILLEGAL STATION * KYO820 CALL MESSAG,KOMSG2 AOM KYSTATN UJN KYO3 * * RE-SET BUFFER POINTERS IF EMPTY * KYO900 LDN 0 RE-SET BUFFER POINTERS STD KEYII STD KEYOI UJN KYO3 * * KOMCNT DATA 0 * KOMSG1 DIS ,*PIO KEY IGNORED STATION XXXXB* KOMSG2 DIS ,*PIO STATION TOO BIG* * * * /--- BLOCK PAUSE 00 000 89/06/01 11.28 TITLE -PAUSE- CHECK FOR STORAGE MOVE OR ERROR PAUSE SPACE 5,11 ** PAUSE - PAUSE FOR STORAGE RELOCATION * * CHECK CPU ACTIVITY AND PAUSE / DROP AS NECESSARY * * IF NO CPU ACTIVITY BUT *DIS* ACTIVE, * CONTINUE PROCESSING * IF NO CPU ACTIVITY BUT *ESM* ACTIVE, * WAIT FOR *ESM* TO DROP. PAUSE SUBR LDD CP ADN STSW CRD CM LDD CM+1 CHECK ERROR FLAG ZJN PSE1 IF NO ERROR LJM PSE8 PSE1 LDD CM CHECK CPU ACTIVITY SHN -11B NJN PSE3 IF ACTIVITY * CHECK FOR DIS / ESM ACTIVE LDN PPUL CRD CM LDD CM+2 SAVE NUMBER OF PPS ON SYSTEM SBN 11D PJN PSE1.1 IF MORE THAN 10 PPS LDN 10D SET 10 PPS UJN PSE1.2 PSE1.1 LDN 20D PSE1.2 STD T1 LDN PPCP GET ADDRESS OF PP COMMUNICATION CRD CM LDD CM+4 STD T2 PSE2 CRD CM READ NEXT INPUT REGISTER LDD CM LMC 2RDI NJN PSE5 IF NOT *DIS* LDD CP SHN -7 LMC 1RS*100B LMD CM+1 SCN 40B NJN PSE5 IF NOT *DIS* AT THIS CP * CHECK FOR STORAGE MOVE PSE3 LDN CMCL CRD CM LDD CP .NOS27 IFGE OSLEV,716D NOS 2.7.1 SHN -7 .NOS27 ENDIF LMD CM NJN PSE4 IF NOT THIS CP RJM PSM PAUSE FOR STORAGE MOVE PSE4 LJM PAUSEX PSE5 LDD CM+1 SCN 77B SHN 14B LMD CM LMC 3RMES CHECK FOR *ESM* NJN PSE6 IF NOT *ESM* RJM PSM PAUSE FOR STORAGE MOVE LJM PAUSE+1 RE-ENTER LOOP PSE6 SOD T1 * /--- BLOCK PAUSE 00 000 81/04/28 14.26 NJN PSE7 IF MORE PPS TO CHECK LJM PSE9 NO ACTIVITY AT THE CP PSE7 LDN 10B BUMP TO NEXT INPUT REGISTER RAD T2 LJM PSE2 LOOP * PROCESS ERROR FLAG PSE8 LDD CM+1 SBN FSET CHECK FOR *MRQ* DROP ZJN PSE10 SBN OKET-FSET ZJN PSE10 PSE9 CALL ALLOUT,OFFMSG OUTPUT -PLATO OFF- PSE10 LJM DROP PSM SPACE 5,11 ** PSM - PAUSE FOR STORAGE MOVE * * ISSUE MONITOR FUNCTION TO PAUSE * UPDATE PP ADDRESSES TO REFLECT NEW RA PSM SUBR PAUSE ST LDM PSTATX UPDATE CM ADDRESSES SHN 6 ADD RA SHN 6 ADM PSTATX+1 PLANT CM,PSTATS LJM PSMX * /--- BLOCK READECS 00 000 84/11/16 10.53 TITLE -READECS- ECS TO PPU TRANSFER VIA DDP * * * * -READECS- * ON ENTRY - D.T0 = PPU MEMORY ADDRESS * D.T1 = UPPER PORTION OF ECS ADDRESS * D.T2 = LOWER PORTION OF ECS ADDRESS * D.T3 = NUMBER OF PPU WORDS TO READ * * ON RETURN - A = 0 = READ COMPLETED * 1 = ECS PARITY ERROR * * READECS SUBR LDD A170 NJP RCS50 IF 180 CLASS MAINFRAME IJM RCS10,C=DDP DCN C=DDP,40B * RCS10 FNC 5001B,C=DDP 5001B = READ ECS WAIT INACTIVE,C=DDP,RCSE1 ACN C=DDP,40B FJM RCSE2,C=DDP LDN 2 OAM D.T1,C=DDP OUTPUT 2 WORD ECS ADDRESS LDD D.T0 STM RCS15+1 PLANT PPU MEMORY ADDRESS WAIT FULL,C=DDP,RCSE3 * LDM D.T3 NUMBER OF WORDS TO READ RCS15 IAM **,C=DDP READ ECS TO PPU MEMORY NJP RCSE4 EXIT IF ERROR * RCS20 IJM RCSE5,C=DDP WAIT CHANNEL ACTIVE + FULL EJM RCS20,C=DDP RCS30 DCN C=DDP,40B DISCONNECT CHANNEL LDN 0 MARK NO ERROR OCCURRED LJM READECSX * RCSE1 LDN 0 SET ERROR CODE UJN RCSERR RCSE2 LDN 1 UJN RCSERR RCSE3 LDN 2 UJN RCSERR RCSE4 LDN 3 UJN RCSERR RCSE5 LDN 4 RCSERR ADC 2RR1 SET CHARACTER STRING FOR ERROR STM DDPMSG+14 LDM RCS30 GET CHANNEL FOR ERROR MESSAGE LPN 37B STD D.T0 CALL OTOA LDD D.T2 STM DDPMSG+11 CALL DFM,DDPMSG ISSUE ERROR MESSAGE TO DAYFILES * CALL DDPMCP MASTER CLEAR DDP PORT LDN 1 A = 1 = ERROR OCCURRED LJM READECSX * * * /--- BLOCK READUEM 00 000 85/04/18 16.43 * * READ UEM DIRECTLY ON 800-SERIES MACHINES * RCS50 SRD D.RSAV SAVE CURRENT (R) * CONVERT COUNT FROM PPU WORDS TO CPU WORDS LDD T0 STM T0SAV LDD T2 STM T2SAV LDD D.T3 (A) = NUMBER OF PPU WORDS STM D.T3S RJM DV5 CONVERT TO CPU WORDS STD D.T3 (D.T3) = NUMBER OF CPU WORDS * PLANT PP ADDRESS THE CM WORDS ARE TO BE READ INTO LDD D.T0 (A) = PP MEMORY ADDRESS TO USE STM RCS60 STORE PP ADDRESS * FORM PART OF EM ADDRESS IN (R) LDD D.T1 (A) = UPPER PART OF EM ADDRESS SHN -6 (A) = BITS 23 - 18 OF EM ADDR STD T1 LDD D.T1 SHN 6 (A) = BITS 17 - 12 OF EM ADDR STD T2 LRD T1 (R) = BITS 23 - 12 OF EM ADDR * FORM THE REST OF THE EM ADDRESS IN (A) LDD D.T2 (A) = LOWER PART OF EM ADDRESS LMC R.USE SET BIT TO USE (R) IN ADDR CALC * READ EM CRM **,D.T3 RCS60 EQU *-1 (PP MEMORY ADDRESS) * DONE. LRD D.RSAV RESTORE OLD (R) LDM T0SAV STD T0 LDM T2SAV STD T2 LDM D.T3S STD D.T3 LDN 0 MARK NO ERROR OCCURRED * RETURN LJM READECSX *CALL COMPDV5 * /--- BLOCK WRITECS 00 000 84/11/16 11.01 TITLE -WRITECS- PPU TO ECS TRANSFER VIA DDP * * * * -WRITECS- * ON ENTRY - D.T0 = PPU MEMORY ADDRESS * D.T1 = UPPER PORTION OF ECS ADDRESS * D.T2 = LOWER PORTION OF ECS ADDRESS * D.T3 = NUMBER OF PPU WORDS TO WRITE * * ON RETURN - A = 0 = WRITE COMPLETED * 1 = ECS ABORT * * WRITECS SUBR LDD A170 NJP WCS60 IF 180 CLASS MAINFRAME IJM WCS10,C=DDP DCN C=DDP,40B * WCS10 FNC 5002B,C=DDP 5002B = WRITE ECS WAIT INACTIVE,C=DDP,WCSE1 ACN C=DDP,40B LDN 2 OAM D.T1,C=DDP OUTPUT 2 WORD ECS ADDRESS LDD D.T0 STM WCS15+1 PLANT PPU MEMORY ADDRESS * LDM D.T3 NUMBER OF WORDS TO WRITE WCS15 OAM **,C=DDP WRITE PPU MEMORY TO ECS NJP WCSE2 EXIT IF ERROR DCN C=DDP,40B * WCS30 FNC 5004B,C=DDP 5004B = SELECT STATUS WAIT INACTIVE,C=DDP,WCSE3 ACN C=DDP,40B RE-ACTIVATE DDP CHANNEL WAIT FULL,C=DDP,WCSE4 IAN C=DDP,40B INPUT STATUS WORD DCN C=DDP,40B LPN 11B MASK WRITE/ABORT BITS NJN WCS50 IF ERROR OR INCOMPLETE IJM WCS41,C=DDP WCS40 DCN C=DDP,40B WCS41 LJM WRITECSX * WCS50 LPN 10B ZJN WCSE5 IF ECS ABORT LJM WCS30 WRITE NOT COMPLETE WCSE1 LDN 0 SET ERROR CODE UJN WCSERR WCSE2 LDN 1 UJN WCSERR WCSE3 LDN 2 UJN WCSERR WCSE4 LDN 3 UJN WCSERR WCSE5 LDN 4 WCSERR ADC 2RW1 SET CHARACTER STRING FOR ERROR STM DDPMSG+14 LDM WCS40 GET CHANNEL FOR ERROR MESSAGE LPN 37B STD D.T0 CALL OTOA LDD D.T2 STM DDPMSG+11 CALL DFM,DDPMSG ISSUE ERROR MESSAGE TO DAYFILES * CALL DDPMCP MASTER CLEAR DDP PORT LDN 1 MARK ERROR OCCURRED LJM WRITECSX * DDPMSG DIS ,*PIO DDP CHAN ERR C=XX E=XX* * * /--- BLOCK WRITUEM 00 000 85/04/18 16.43 * * WRITE UEM DIRECTLY ON 800-SERIES MACHINES * WCS60 SRD D.RSAV SAVE CURRENT (R) * CONVERT COUNT FROM PPU WORDS TO CPU WORDS LDD T0 STM T0SAV LDD T2 STM T2SAV LDD D.T3 (A) = NUMBER OF PPU WORDS STM D.T3S RJM DV5 CONVERT TO CPU WORDS STD D.T3 (D.T3) = NUMBER OF CPU WORDS * PLANT PP ADDRESS THE CM WORDS ARE TO BE * WRITTEN FROM LDD D.T0 (A) = PP MEMORY ADDRESS TO USE STM WCS20 PLANT PP MEMORY ADDRESS * FORM PART OF EM ADDRESS IN (R) LDD D.T1 (A) = UPPER PART OF EM ADDRESS SHN -6 (A) = BITS 23 - 18 OF EM ADDR STD T1 LDD D.T1 SHN 6 (A) = BITS 17 - 12 OF EM ADDR STD T2 LRD T1 (R) = BITS 23 - 12 OF EM ADDR * FORM THE REST OF THE EM ADDRESS IN (A) LDD D.T2 (A) = LOWER PART OF EM ADDRESS LMC R.USE SET BIT TO USE (R) IN ADDR CALC * WRITE EM CWM **,D.T3 WCS20 EQU *-1 LOCATION TO PLANT PP ADDR INTO * DONE. LRD D.RSAV RESTORE OLD (R) LDM T0SAV STD T0 LDM T2SAV STD T2 LDM D.T3S STD D.T3 LDN 0 MARK NO ERROR OCCURRED * RETURN LJM WRITECSX T0SAV BSSZ 1 T2SAV BSSZ 1 D.T3S BSSZ 1 TITLE -DDPMCP- MASTER CLEAR DDP PORT * * * * -DDPMCP- MASTER CLEAR DDP PORT * DDPMCP SUBR IJM DMC20,C=DDP DCN C=DDP,40B INSURE CHANNEL INACTIVE * DMC20 FNC 5010B,C=DDP 5010B = MASTER CLEAR PORT WAIT EMPTY,C=DDP,DMC22 DMC22 WAIT INACTIVE,C=DDP,DMC30 * DMC30 IJM DMC40,C=DDP CHECK IF CHANNEL INACTIVE DCN C=DDP,40B DISCONNECT DDP CHANNEL DMC40 PSN * UJN *+3 IF ECS MODE FNC 5404B,C=DDP SELECT ESM MODE LJM DDPMCPX * /--- BLOCK WRITUEM 00 000 84/11/16 11.05 * * * /--- BLOCK STATS 00 000 78/12/20 02.01 TITLE -STATS- OUTPUT STATISTICS * * * * -STATS- * OUTPUTS PIO STATISTICS TO ECS BUFFER * * STATS SUBR SOM STATCNT CHECK TIME FOR STATISTICS PJN STATSX LDC 500 STM STATCNT RESET COUNTER LDC STATLTH*5 NUMBER OF PPU WORDS TO WRITE STD D.T3 D.T3 = NUMBER PPU WRDS TO WRITE LDC STATBUF STD D.T0 D.T0 = PPU MEMORY ADDRESS LDM ECRA+1 LOAD LOWER PART OF ECS RA ADM ECSTX+1 ADD LOWER PART OF ECS REL ADDR STD D.T2 D.T2 = LOWER ECS ADDRESS SHN -12 ADM ECRA ADD UPPER PART OF ECS RA ADM ECSTX ADD UPPER PART OF ECS REL ADDR STD D.T1 D.T1 = UPPER ECS ADDRESS CALL WRITECS WRITE STATS TO ECS UJN STATSX * * * /--- BLOCK OUTNET 00 000 81/04/21 20.49 TITLE -OUTNET- OUTPUT TERMINAL WORD * * * * -OUTNET- * OUTPUTS A SINGLE TERMINAL WORD FROM THE TOP THREE * BYTES OF *CMBUFF* * * ON EXIT - A = 0 = DATA SENT SUCCESSFULLY * -1 = DATA COULD NOT BE SENT * * OUTNET SUBR IJM OUTN10,O=NIU DCN O=NIU DEACTIVATE CIU OUTPUT CHANNEL * OUTN10 FNC 0,O=NIU SELECT OUTPUT CONTROLLER WAIT INACTIVE,O=NIU,OUTN90 ACN O=NIU ACTIVATE CIU OUTPUT CHANNEL LDN 3 TERMINAL WORD = 3 PPU WORDS OAM CMBUFF,O=NIU OUTPUT TERMINAL WORD WAIT EMPTY,O=NIU,OUTN90 DCN O=NIU DEACTIVATE CIU CHANNEL LDN 0 OUTN20 LJM OUTNETX * * OUTN90 IJM OUTN91,O=NIU DCN O=NIU DEACTIVATE CIU CHANNEL * OUTN91 LCN 1 UJN OUTN20 * * * /--- BLOCK MESSAG 00 000 78/02/06 11.06 TITLE -MESSAG- OUTPUT B-DISPLAY MESSAGE * * * * -MESSAG- * OUTPUTS B-DISPLAY MESSAGE * * ON ENTRY - A = ADDRESS OF MESSAGE * * MESSAG SUBR STM MSG10+1 PLANT PPU ADDRESS OF MESSAGE LDN 5 STD T1 SET LENGTH OF MESSAGE LDD CP LOAD CONTROL POINT AREA ADDRESS ADN MS1W ADD BIAS TO MESSAGE AREA * MSG10 CWM **,T1 WRITE MESSAGE TO CP AREA UJN MESSAGX * * * /--- BLOCK OTOA 00 000 75/05/21 23.50 TITLE -OTOA- CONVERT OCTAL TO ALPHA * * * * -OTOA- * CONVERT 4 DIGIT OCTAL NUMBER TO DISPLAY CODE * * ON ENTRY - D.T0 = OCTAL NUMBER TO CONVERT * * ON RETURN - D.T1 = FIRST TWO ALPHA CHARACTERS * D.T2 = SECOND TWO CHARACTERS * * OTOA SUBR LDD D.T0 LOAD OCTAL TO CONVERT SHN -9 POSITION UPPER OCTAL DIGIT ADN 33B CONVERT TO ALPHA SHN 6 STD D.T1 LDD D.T0 LOAD OCTAL TO CONVERT SHN -6 POSITION SECOND OCTAL DIGIT LPN 7 ADN 33B CONVERT TO ALPHA RAM D.T1 LDD D.T0 LOAD OCTAL TO CONVERT SHN -3 POSITION THIRD OCTAL DIGIT LPN 7 ADN 33B CONVERT TO ALPHA SHN 6 STD D.T2 LDD D.T0 LOAD OCTAL TO CONVERT LPN 7 MASK OFF FOURTH DIGIT ADN 33B RAM D.T2 UJN OTOAX * * * /--- BLOCK CEQUIP 00 000 81/04/30 15.09 TITLE -CEQUIP- CLEAR EQUIPMENT * * * * -CEQUIP- * CLEARS EQUIPMENT SELECTIONS - DE-SELECTS CIU * INPUT AND OUTPUT AND MASTER CLEARS DDP PORT * * CEQUIP SUBR LDM DDP CHECK IF DDP ASSIGNED ZJN CEQ200 IJM CEQ110,C=DDP DCN C=DDP,40B DE-ACTIVATE DDP CHANNEL * CEQ110 FNC 5010B,C=DDP MASTER CLEAR DDP IJM CEQ200,C=DDP DELAY 30 IJM CEQ200,C=DDP DCN C=DDP,40B DE-ACTIVATE DDP CHANNEL * CEQ200 LDM CIUEQ CHECK IF CIU AVAILABLE ZJN CEQUIPX IJM CEQ210,I=NIU DCN I=NIU DE-ACTIVATE CIU INPUT CHANNEL * CEQ210 FNC 0B,I=NIU DE-SELECT CIU INPUT IJM CEQ300,I=NIU DELAY 30 IJM CEQ300,I=NIU DCN I=NIU DE-ACTIVATE CIU INPUT CHANNEL * CEQ300 IJM CEQ310,O=NIU DCN O=NIU DE-ACTIVATE CIU OUTPUT CHANNEL * CEQ310 FNC 7000B,O=NIU DE-SELECT CIU OUTPUT IJM CEQ400,O=NIU DELAY 30 IJM CEQ400,O=NIU DCN O=NIU DE-ACTIVATE CIU OUTPUT CHANNEL CEQ400 LJM CEQUIPX * * /--- BLOCK ALLOUT 00 000 81/04/30 15.09 TITLE -ALLOUT- SEND MESSAGE TO ALL TERMINALS * * * * -ALLOUT- * SEND A MESSAGE TO ALL TERMINALS * * ON ENTRY - A = ADDRESS OF MESSAGE * * ALLOUT SUBR STD BASE ADDRESS OF MESSAGE STD ADDRESS LDM CIUEQ CHECK CIU AVAILABLE FLAG ZJN ALLOUTX * * FIND THE LENGTH OF THE MESSAGE * LDN 0 INITIALIZE STD LENGTH STD ILOOP ALLL LDI ADDRESS GET THE NEXT 12 BIT PARCEL ZJP ALLA ZERO WORD MARKS END. AOD LENGTH AOD ADDRESS UJP ALLL * * BEGIN OUTER LOOP OVER THE MESSAGE LENGTH * ALLA LDD ILOOP SBD LENGTH ILOOP-LENGTH SBN NCLASSES MINUS 2**NN PJN ALLOUTX IF ILOOP GT MESSAGE LTH, DONE * * BEGIN INNER LOOP OVER STATIONS * LDC 1008 NUMBER OF REAL STATIONS STD STATION HIGHEST STATION NUM IS ONE LESS * ALLB SOD STATION INNER LOOP ZJP ALLC END TEST SCN NN CLEAR NN BITS LMC -0 COMPLEMENT ADD STATION CLASS=MOD(STATN,2**NN) SHN 1 2*CLASS LMC -0 -2*CLASS ADD ILOOP ILOOP-2*CLASS STD ADDRESS RELATIVE ADDRESS, THIS CLASS MJN ALLB IF ADDRESS LT 0, LOOP * SBD LENGTH PJN ALLB IF ADDRESS GE LENGTH, LOOP * /--- BLOCK ALLOUT 00 000 81/04/21 20.51 * LDD BASE START OF MESSAGE RAD ADDRESS CORRECT ADDRESS BY BASE LDI ADDRESS STM CMBUFF FIRST PART AOD ADDRESS LDI ADDRESS STM CMBUFF+1 SECOND PART LDD STATION STM CMBUFF+2 STATION NUMBER CALL MSGOUT PJP ALLB IF NO ERROR, LOOP UJP ALLD ERROR--COULD NOT GET IT OUT * * END OF LOOP--PUT OUT END OF FRAME * ALLC LDN 2 RAD ILOOP ILOOP=ILOOP+2 (PPU WD COUNTER) LDC 4000B SET START DATA BIT STM CMBUFF LDN 0 STM CMBUFF+1 LDC 2000B END OF FRAME BIT STM CMBUFF+2 SEND TO STATION 0 CALL MSGOUT PJP ALLA IF NO ERROR, NEXT OUTER LOOP * * THE CIU DOES NOT REPLY--PUT OUT MESSAGE AND RETURN * ALLD CALL DFM,NIUDN *(PIO) NO REPLY FROM CIU* LJM ALLOUTX * NIUDN DIS ,*(PIO) NO REPLY FROM CIU* * * /--- BLOCK MSGOUT 00 000 81/04/21 20.52 EJECT * * * * -MSGOUT- * SUBROUTINE USED BY -ALLOUT- TO SEND TO A TERMINAL * * ON EXIT - A = POSITIVE IF MESSAGE SENT * NEGATIVE IF CIU WOULD NOT ACCEPT * * MSGOUT SUBR LDC 4000 INITIALIZE WAIT COUNTER STM II * MO100 CALL OUTNET PJN MSGOUTX IF MESSAGE SENT SOM II PJP MO100 CONTINUE TRYING UJN MSGOUTX * * * /--- BLOCK OFFMSG 00 000 75/07/07 22.25 TITLE OFFMSG *PLATO OFF* MESSAGE * * OFFMSG DATA 4160B,0070B CLEAR ABORT / BLOCK CHECK OFF DATA 4500B,1000B LOAD SSL LAMP OFF, SHUTTER SHUT DATA 4140B,0064B LOAD CHAR MODE (MODE REWRITE) DATA 4200B,0420B LOAD X=136 (COLUMN 18) DATA 4201B,1600B LOAD Y=448 (LINE 4) DATA 5777B,1640B (UNCOVER)(UNCOVER)(20) DATA 5555B,1332B (SPACE)(SPACE)(SPACE) DATA 5555B,1332B (SPACE)(SPACE)(SPACE) DATA 5555B,1332B (SPACE)(SPACE)(SPACE) DATA 5555B,1332B (SPACE)(SPACE)(SPACE) DATA 5555B,1332B (SPACE)(SPACE)(SPACE) DATA 5555B,1332B (SPACE)(SPACE)(SPACE) DATA 5555B,1332B (SPACE)(SPACE)(SPACE) DATA 5555B,1332B (SPACE)(SPACE)(SPACE) DATA 5555B,1332B (SPACE)(SPACE)(SPACE) DATA 5555B,1332B (SPACE)(SPACE)(SPACE) DATA 4160B,0070B CLEAR ABORT / BLOCK CHECK OFF DATA 4140B,0064B LOAD CHAR MODE (MODE REWRITE) DATA 4200B,0420B LOAD X=136 (COLUMN 18) DATA 4201B,1540B LOAD Y=432 (LINE 5) DATA 5777B,1640B (UNCOVER)(UNCOVER)(20) DATA 5555B,1332B (SPACE)(SPACE)(SPACE) DATA 5555B,1332B (SPACE)(SPACE)(SPACE) DATA 5555B,1332B (SPACE)(SPACE)(SPACE) DATA 5552B,0030B (SPACE)PL DATA 5012B,1036B ATO DATA 5555B,1236B (SPACE)(SPACE)O DATA 5060B,1532B FF(SPACE) DATA 5555B,1332B (SPACE)(SPACE)(SPACE) DATA 5555B,1332B (SPACE)(SPACE)(SPACE) DATA 5555B,1332B (SPACE)(SPACE)(SPACE) DATA 4160B,0070B CLEAR ABORT / BLOCK CHECK OFF DATA 4140B,0064B LOAD CHAR MODE (MODE REWRITE) DATA 4200B,0420B LOAD X=136 (COLUMN 18) DATA 4201B,1500B LOAD Y=416 (LINE 6) DATA 5777B,1640B (UNCOVER)(UNCOVER)(20) DATA 5555B,1332B (SPACE)(SPACE)(SPACE) DATA 5555B,1332B (SPACE)(SPACE)(SPACE) DATA 5555B,1332B (SPACE)(SPACE)(SPACE) DATA 5555B,1332B (SPACE)(SPACE)(SPACE) DATA 5555B,1332B (SPACE)(SPACE)(SPACE) DATA 5555B,1332B (SPACE)(SPACE)(SPACE) DATA 5555B,1332B (SPACE)(SPACE)(SPACE) DATA 5555B,1332B (SPACE)(SPACE)(SPACE) DATA 5555B,1332B (SPACE)(SPACE)(SPACE) DATA 5555B,1332B (SPACE)(SPACE)(SPACE) DATA 4160B,0070B CLEAR ABORT / BLOCK CHECK OFF DATA 4140B,0024B LOAD LINE MODE DATA 5570B,1640B LINER(376,464) DATA 5210B,1640B LINER(136,464) DATA 5210B,1500B LINER(136,416) DATA 5570B,1500B LINER(376,416) DATA 0 END OF MESSAGE * * * /--- BLOCK ONMSG 00 000 76/12/06 02.03 * ONMSG DATA 4160B,0070B CLEAR ABORT / BLOCK CHECK OFF DATA 4500B,1000B LOAD SSL LAMP OFF, SHUTTER SHUT DATA 4140B,0076B LOAD CHAR MODE (WRITE, FULL SCREEN ERASE) DATA 4200B LOAD X ONMSX DATA 400B X!0=128 DATA 4201B LOAD Y ONMSY DATA 400B Y!0=128 DATA 5772B,0240B (UNCOVER)(21)'P DATA 5772B,0044B (UNCOVER)(20)R DATA 5052B,0646B ESS DATA 5555B,1376B (SPACE)(SPACE)(UNCOVER) DATA 5211B,1412B (21)NE DATA 5302B,1176B XT(UNCOVER) DATA 5205B,1332B (20)(SPACE)(SPACE) DATA 5241B,1732B TO(SPACE) DATA 5020B,1216B BEG DATA 5111B,1576B IN(UNCOVER) DATA 5207B,1640B (20)(UNCOVER)(20) DATA 0 END OF MESSAGE * * /--- BLOCK DROP 00 000 81/04/30 15.11 TITLE -DROP- DROP PPU * * * * -DROP- * RELEASE ALL EQUIPMENT/CHANNELS ASSIGNED AND * DROP PPU PROGRAM * * DROP CALL CEQUIP DE-SELECT DDP/CIU LDM DDP CHECK IF DDP ASSIGNED ZJN DROP200 * * DROP DDP PORT CHANNEL * LDM /C=DDP/C=DDP DCHAN * * DROP CIU EQUIPMENT/CHANNELS * DROP200 LDM CIUEQ CHECK IF CIU ASSIGNED ZJN DROP400 LDM /I=NIU/I=NIU DCHAN LDM /O=NIU/O=NIU DCHAN LDN ZERL CRD CM PRE-CLEAR ARGUMENTS LDM CIUEQ SET CIU EQ (EST ORDINAL) STD CM+1 MONITOR DEQM DROP CIU EQUIPMENT * DROP400 CALL DFM,DMSG1 OUTPUT DAYFILE MESSAGE MONITOR DPPM DROP PPU UJP PPR * * DMSG1 DIS ,*(PIO) PPU DROPPED* * * * /--- BLOCK STORAGE 00 000 81/09/02 14.08 TITLE STORAGE DEFINITIONS * * *CALL PLAPDNM *CALL PLAPPLN * * C=DDP TABLE CHANNEL DDP CHANNEL O=NIU TABLE CHANNEL CIU OUTPUT CHANNEL I=NIU TABLE CHANNEL CIU INPUT CHANNEL * * ECRA BSS 2 ECS REFERENCE ADDRESS * PARAMS BSSZ 5*NPARAMS ECSSWX EQU PARAMS+1 ECS ADDR OF REQUEST SWITCH/LIST FKBFADD EQU ECSSWX+2 REL ADDR OF FASTKEY REQUEST BUF PSITES EQU PARAMS+9 NUMBER OF SITES SCIMADD EQU PSITES+2 REL ADDR OF PIO/SCIM BUFFER KEYBADD EQU SCIMADD+2 REL ADDR OF KEY BUFFERS OUTPNT EQU KEYBADD+5 REL ADDR OF FRAME COUNTER OUTTAB EQU OUTPNT+5 REL ADDR OF FRAME LENGTH TABLE OUTBUFF EQU OUTTAB+5 REL ADDR OF FRAME BUFFERS ECSTX EQU OUTBUFF+3 REL ADDR OF ECS STATS BUFFER JFILL EQU ECSTX+7 UNUSED FRAMLTH EQU JFILL+6 MAXIMUM LENGTH OF FRAME ***** DONT REMOVE ARGUMENTS WITHOUT CHANGING NEXT CODE CIUNUM EQU PARAMS+5*9 10 THE ARG. CIU NUMBER PLATSIT EQU CIUNUM+1 FIRST PLATO SITE NUMSIT EQU PLATSIT+1 NUMBER OF SITES PHYSIT EQU NUMSIT+1 FIRST SITE OF CIU TO BE USED * * PSTATS TABLE CM PPU STATUS WORD STATSW TABLE CM CONTROL POINT STATUS WORD * PSTATX BSSZ 2 REL ADDR OF PPU STATUS WORD * ILAST BSS 1 IBIAS BSS 2 II BSS 1 JJ BSS 1 KOCNT BSS 1 PINIT DATA 0 FICNT DATA 0 * NFRAME BSSZ 5 FRAME COUNTER IFRAME DATA 0 INDEX TO CURRENT FRAME FBIAS DATA 0 BIAS TO CURRENT FRAME DATA 0 ECSBUFF BSS 10 BUFFER FOR ECS READ/WRITE FKYBUFF BSS 10 BUFFER FOR ECS READ/WRITE STRBUFF BSS 5 BUFFER FOR ECS READ/WRITE CMBUFF BSS 5 BUFFER FOR CM READ/WRITE * NOOP0 VFD 12/4000B SPECIAL NO-OP FOR STATION 0 VFD 12/0 VFD 12/0 * * /--- BLOCK STORAGE 00 000 81/09/08 01.00 * CIUEQ DATA 0 CIU EST ORDINAL DDP DATA 0 DDP EST ORDINAL * CIC DATA 0 CIU INPUT CHANNEL NUMBER COC DATA 0 CIU OUTPUT CHANNEL NUMBER * * * NON-OVERLAYED INITIALIZATIONS * INITIAL SUBR RJM /PRS/INITIAL * ZERO BUFFERS OVERLAYED BY INITIALIZATION CODE LDC ZERLTH STD D.T0 INIT1 LDN 0 STM PPBUFF,D.T0 SOD D.T0 PJN INIT1 * SET OVERLAYED CONSTANTS LDK PPBLTH STM PENDTST LDK KEYLTH-2 STM KENDTST UJN INITIALX * * * FOLLOWING BUFFERS ARE OVERLAYED BY PRESET ROUTINE. * NON-OVERLAYED INITIALIZATIONS ABOVE ZERO THESE * BUFFERS BEFORE THEY ARE USED. * * PPBUFF EQU * TERMINAL OUTPUT BUFFER KEYBUFF EQU PPBUFF+5*PPBLTH+5 KEY INPUT BUFFER * PENDTST EQU KEYBUFF+KEYLTH KENDTST EQU PENDTST+1 * SFCNT EQU KENDTST+1 STATCNT EQU SFCNT+1 * STATBUF EQU STATCNT+1 * FIRST 2 CM WORDS = STATISTICS * NEXT 2 = BAD STATION LIST IBAD EQU STATBUF STATIONS FLOODING KEYS KYRESP EQU IBAD+1 NO INPUT RESPONSE OUTRESP EQU KYRESP+1 NO OUTPUT RESPONSE KYOFLOW EQU OUTRESP+1 PPU BUFFER OVERFLOW KYIGN EQU KYOFLOW+1 KEYS IGNORED KYSEQ EQU KYIGN+1 KEY DATA WORDS OUT OF SEQUENCE KYSTATN EQU KYSEQ+1 KEY STATION ILLEGAL KYIGNT EQU KYSTATN+1 KEYS IGNORED IN TEST MODE FKSTAT EQU KYIGNT+1 FASTKEY STATS MXKBIDX EQU FKSTAT+1 MAXIMUM KEYBUFFER INDEX BADLIST EQU STATBUF+10 BAD STATION LIST * SCIMBUF EQU STATBUF+5*STATLTH PIO/SCIM COMM BUFFER TESTLST EQU SCIMBUF+SCIMLTH*5 LIST OF STATIONS WITH * 1--4 KEY BUFFER OVERFLOWS CNTLST EQU TESTLST+BADLTH*2 COUNT OF OVERFLOWS FOR * STATIONS ON TEST LIST * BADCNT EQU CNTLST+BADLTH*2 ITEST EQU BADCNT+1 COUNT OF STATIONS ON TEST LIST * ZERLTH EQU ITEST-PPBUFF LENGTH TO BE ZEROED * * CHECK FOR BUFFERS OVERFLOWING PPU * ERRPL ITEST+1-7770B BUFFERS OVERFLOW PPU * * /--- BLOCK INITIAL 00 000 87/02/24 12.54 TITLE -INITIAL- INITIALIZATIONS QUAL PRS ORG PPBUFF * * * * -INITIAL- * ONE TIME ONLY INITIALIZATIONS * * INITIAL SUBR .NOSV2 IFGE OSLEV,562D NOS V2 LDK MABL READ MACHINE ATTRIBUTES CRD CM LDD CM+1 CPU ATTRIBUTES SHN -13B GET 800 SERIES BIT LMN 1 .NOSV2 ELSE LDC CPUL CRD CM LDD CM+3 SHN -10B LPN 1 .NOSV2 ENDIF STD A170 * * INITIALIZE VARIABLES * LDN 0 STD KEYII STD KEYOI * * GET ADDR OF CONTROL POINT STATUS WORD (STSW) * INIT130 LDD CP CONTROL POINT ADDRESS WORD ADN STSW FORM ADDRESS OF STATUS WORD CRD D.T0 READ CONTROL POINT STATUS LDD D.T0+C.CPEF NJP DROP DROP PPU IF ERROR * * WAIT PLATO IN RECALL BEFORE READING ECS ADDRESS * LDD D.T0+C.CPSTAT .NOSV2 IFLT OSLEV,562D NOS V1 LPC 3000B CHECK PLATO IN RECALL (I OR X) NJN INIT135 .NOSV2 ELSE NOS V2 SHN -11B CHECK FOR *I* STATUS (6) SBN 5 PJN INIT135 IF IN AUTO-RECALL .NOSV2 ENDIF DELAY 1000 IDLE FOR 1 MILLISECOND UJP INIT130 * /--- BLOCK INITIAL 00 000 87/02/24 13.00 * * READ ECS REFERENCE ADDRESS FROM EXCHANGE PACKAGE * INIT135 LDD CP ADDRESS OF CONTROL POINT AREA ADN 4 BIAS TO RAX CRD D.T0 .NOS252 IFGE OSLEV,678D LDK MEFL CRD CM LDD CM+2 SHN 6+4 EXTENDED ADDRESSING BIT MJN INIT137 IF EXTENDED ADDRESSING MODE .NOS252 ELSE RJM GEC GET ECS MODE NJN INIT137 IF ESM MODE .NOS252 ENDIF LDD D.T0 SET UPPER PART OF ECS RA LPC 777B STM ECRA LDD D.T0+1 SET LOWER PART OF ECS RA STM ECRA+1 .NOS252 IFGE OSLEV,678D UJN INIT138 .NOS252 ELSE LDC 0303B UJN *+3 STM DMC40 NO-OP SELECT ESM MODE UJN INIT140 .NOS252 ENDIF INIT137 LDD D.T0 LPN 77B CLEAR FLAG BITS SHN 12 LMD D.T1 SHN 12 STM ECRA SAVE UPPER PART OF ECS RA SHN -6 POSITION LOWER PART OF ESM RA SCN 77B STM ECRA+1 SAVE LOWER PART OF ECS RA .NOS252 IFGE OSLEV,678D * SET ECS/ESM MODE INIT138 RJM GEC GET ECS MODE NJN INIT140 IF ESM MODE LDC 0303B UJN *+3 STM DMC40 NO-OP SELECT ESM MODE .NOS252 ENDIF * * PLANT REFERENCES TO CONTROL POINT STATUS WORD * INIT140 LDM II PLANT REFERENCES TO STATUS WORD PLANT CM,STATSW * * /--- BLOCK INITIAL 00 000 81/04/28 14.28 * * GET ADDR OF PPU STATUS WORD AND READ PARAMETERS * WHICH FOLLOW TO PPU MEMORY * LDD IR+3 SET UPPER PART OF REL ARGUMENT LPN 37B STM PSTATX LDD IR+4 STM PSTATX+1 SET LOWER PART OF REL ARGUMENT LDD IR+3 LPN 37B FORM ADDRESS OF ARGUMENT SHN 12 ADD IR+4 RJM ABS CONVERT TO ABSOLUTE ZJP DROP PLANT CM,PSTATS PLANT REFERENCES TO STATUS WORD LDM PSTATX LOAD UPPER PART OF REL ADDRESS SHN 6 ADD RA ADD CM REFERENCE ADDRESS SHN 6 ADM PSTATX+1 ATTACH LOWER 12 BITS PLANT CM,IPSTAT PLANT FOR INITIALIZATIONS LDC NPARAMS STD D.T0 SET NUMBER OF WORDS TO READ LOADCM IPSTAT ADN 1 CRM PARAMS,D.T0 READ PARAMETER VECTOR * * /--- BLOCK INITIAL 00 000 87/02/11 12.10 * * RESERVE DISTRIBUTIVE DATA PATH CHANNEL * INI200 BSS 0 LDD A170 NJP INI201 IF 800 MACHINE LDC 2RD2 DDP EQUIPMENT NAME RJM EQN MJP NODDP EXIT IF NO DDP AVAILABLE STM DDP .NOS252 IFGE OSLEV,678D MONITOR RCHM .NOS252 ELSE LDN 0 CLEAR ADDITIONAL CHANNELS WORD STD CM+2 LDD CM+1 LOAD DDP PORT CHANNEL NUMBERS RCHAN .NOS252 ENDIF LDD CM+1 LOAD CHANNEL ACTUALLY ASSIGNED PLANT CHANNEL,C=DDP CALL DDPMCP MASTER CLEAR DDP CALL DFM,IMSG1 OUTPUT DAYFILE MESSAGE * * SEARCH EQUIPMENT TABLE FOR SPECIFIED CIU * INI201 LDC 2RCI CI = CIU EQUIPMENT NAME STD T3 T3 = EQUIPMENT TYPE NAME LDN ESTP CRD CM READ POINTER TO EST .NOS22 IFGE OSLEV,594D NOS 2.2 LDD CM+2 STD T2 (T2) = LAST EST ORDINAL + 1 LDN 0 STD T4 (T4) = CURRENT EST ORDINAL INIT230 SFA EST,T4 (A) = FWA OF CURRENT EST ENTRY ADK EQDE OFFSET TO WORD WITH DEVICE TYPE .NOS22 ELSE NOS 2.1 LDD CM LOAD FWA OF EST STD T1 T1 = FWA EST STD T4 T4 = INDEX IN EST LDD CM+1 LOAD LWA+1 OF EST STD T2 T2 = LWA+1 EST * * /--- BLOCK INITIAL 00 000 87/02/10 10.56 * INIT230 LDD T4 LOAD POINTER TO NEXT EST ENTRY .NOS22 ENDIF CRD CM LDD CM+3 LOAD EQUIPMENT TYPE CODE SBD T3 .NOS251 IFGE OSLEV,664D NJP INIT235 IF DEVICE TYPE DOES NOT MATCH LDD CM LPN 3 ZJP INIT240 IF DEVICE IS AVAILABLE .NOS251 ELSE ZJP INIT240 IF DEVICE TYPE MATCHES .NOS251 ENDIF * INIT235 AOD T4 ADVANCE TABLE POINTER SBD T2 CHECK FOR END OF TABLE NJP INIT230 UJP INIT350 * INIT240 LDD CM+4 LOAD UNIT NUMBER WORD LPC 77B MASK OFF UNIT NUMBER SBM CIUNUM NJP INIT235 CHECK IF SPECIFIED CIU .NOSV2 IFGE OSLEV,562D NOS V2 .NOS22 IFGE OSLEV,594D NOS 2.2 SFA EST,T4 (A) = FWA OF EST ENTRY ADK EQAE OFFSET TO WORD WITH EJT ORDINAL CRD D.T0 .NOS22 ELSE NOS 2.1 LDD T4 (A) = EST ENTRY ADDRESS ADD HN OFFSET TO EAT CRD D.T0 .NOS22 ENDIF LDD D.T0+4 (A) = EJT ORDINAL .NOSV2 ELSE NOS V1 LDD CM LPC 37B MASK OFF CONTROL PT ASSIGNMENT .NOSV2 ENDIF NJP DROP JUMP IF CIU ALREADY RESERVED * * OBTAIN CIU CHANNEL/EQUIPMENT NUMBERS * LDD CM+1 LPC 77B MASK OFF CIU INPUT CHANNEL STM CIC SET CIU INPUT CHANNEL NUMBER .NOS252 IFGE OSLEV,678D LDD CM+2 .NOS252 ELSE LDD CM+1 SHN -6 POSITION OUTPUT CHANNEL NUMBER .NOS252 ENDIF LPC 77B STM COC SET CIU OUTPUT CHANNEL NUMBER LDD T4 COMPUTE EQUIPMENT ORDINAL .NOS21 IFLT OSLEV,594D NOS 2.1 OR PRIOR SBD T1 .NOS21 ENDIF STM CIUEQ SET CIU EQUIPMENT * * /--- BLOCK INITIAL 00 000 81/04/30 15.12 * * RESERVE CIU EQUIPMENT * LDN ZERL PRE-CLEAR ARGUMENTS CRD CM .NOS242 IFGE OSLEV,642D ERRNZ REQS CODE DEPENDS ON REQS = 0 .NOS242 ENDIF LDM CIUEQ LOAD CIU EQUIPMENT ORDINAL STD CM+1 MONITOR REQM RESERVE CIU EQUIPMENT * * RESERVE CIU INPUT/OUTPUT CHANNELS * LDM CIC LOAD CIU INPUT CHANNEL NUMBER RCHAN LDD CM+1 LOAD CHANNEL ACTUALLY ASSIGNED PLANT CHANNEL,I=NIU LDM COC LOAD CIU OUTPUT CHANNEL NUMBER RCHAN LDD CM+1 LOAD CHANNEL ACTUALLY ASSIGNED PLANT CHANNEL,O=NIU CALL DFM,IMSG2 OUTPUT DAYFILE MESSAGE * * UPDATE *PIO* CM STATUS WORD * INIT350 LOADCM IPSTAT GET ADDRESS OF STATUS WORD CRD D.T0 READ PPU STATUS WORD LDN 1 SET COMPLETION BIT OF STATUS WD STD D.T0+4 LDN 0 PRE-SET = NO EQUIPMENT RESERVED STD D.T0 LDM CIUEQ CHECK IF CIU AVAILABLE ZJP INIT354 JUMP IF NOT LDN 3 MARK CIU RESERVED STD D.T0 * * SET BIT 0 OF PIO PARAMETER WORD TO INDICATE * ALL INITIALIZATIONS DONE. * INIT354 LOADCM IPSTAT GET ADDRESS OF STATUS WORD CWD D.T0 RE-WRITE STATUS WORD * * /--- BLOCK INITIAL 00 000 81/04/21 20.57 * * SET UP *PRESS -NEXT- TO BEGIN* MESSAGE * INIT360 IAN 14B INPUT REAL TIME CLOCK SHN -6 LPC 77B MASK TO RANGE OF 64 SHN 2 SHIFT TO RANGE OF 128 RAM ONMSX IAN 14B INPUT REAL TIME CLOCK LPC 77B MASK TO RANGE OF 64 SHN 3 SHIFT TO RANGE OF 256 RAM ONMSY CALL CEQUIP DE-SELECT CIU/DDP * LDM NUMSIT SHN 5 STD NS SET UP NUMBER OF STATIONS LDM PHYSIT SHN 5 STD FS FIRST LEGAL PHYSICAL STATION LDD NS ADD FS LMC -0 STM .NTERM1 SET MAX PHYSICAL STATION NUMBER LDM PLATSIT CALCULATE STATION BIAS SBM PHYSIT SHN 5 STD CB SET UP CIU BIAS * * /--- BLOCK INITIAL 00 000 78/10/22 11.57 * * READ INITIAL VALUE OF FRAME COUNTER * LDC NFRAME STD D.T0 D.T0 = PPU MEMORY ADDRESS LDM ECRA+1 COMPUTE ECS ADDR OF FRAME COUNT ADM OUTPNT+1 STD D.T2 D.T2 = LOWER PART OF ECS ADDR SHN -12 ADM ECRA ADM OUTPNT STD D.T1 D.T1 = UPPER PART OF ECS ADDR LDN 5 STD D.T3 D.T3 = NUMBER WORDS TO WRITE CALL READECS READ FRAME COUNTER FROM ECS LJM INITIALX NODDP LOADCM IPSTAT SET COMPLETE BIT CRD D.T0 LDN 1 STD D.T0+4 LDN 0 SET NO EQUIPMENT RESERVED STD D.T0 LOADCM IPSTAT CWD D.T0 CALL DFM,NODDPA ISSUE DAYFILE MESSAGE LJM DROP NODDPA DIS ,*(PIO) NO DDP/LSP AVAILABLE* GEC SPACE 5,11 ** GEC - GET ECS MODE * * SEARCH FOR MASTOR,S CONTROL POINT AND READ * ECS CONTROL WORD * * EXIT - (A) - 0 IF ECS MODE * 1 IF ECM MODE GEC SUBR .NOSV2 IFGE OSLEV,562D (NOS VERSION 2) RJM IFP INITIALIZATION FOR SFA MACRO .NOSV2 ENDIF LDK NCPL ADDR OF LOW-CORE WORD WITH NCP CRD CM .NOSV2 IFGE OSLEV,562D NOS V2 LDD CM+1 .NOSV2 ELSE NOS V1 LDD CM+3 (A) = NUMBER OF CONTROL POINTS .NOSV2 ENDIF STD T1 GEC1 LDD T1 SHN 7 STM MASCPA FWA OF MASTOR-S CP AREA ADK JCIW GET SUBSYSTEM ID/QUEUE PRIORITY CRD T2 .NOSV2 IFLT OSLEV,562D NOS V1 SBK JCIW-JNMW CRD CM .NOSV2 ELSE NOS V2 LDD T1 (A) = CONTROL POINT NUMBER SHN 7 (A) = CP AREA ADDRESS ADK TFSW GET EJT ORDINAL CRD CM SFA EJT,CM COMPUTE ABS ADDR OF EJT ENTRY ADK JSNE ADD WORD OFFSET FOR JSN CRD CM (CM - CM+1) = JOB SEQUENCE NAME .NOSV2 ENDIF LDD CM+1 SCN 77B SHN 6 LMD CM LMC 3RSMA ZJN GEC1.1 IF MASTOR LJM GEC2 IF NOT MASTOR GEC1.1 BSS 0 .NOSV2 IFLT OSLEV,562D NOS V1 LDD T2+1 CHECK QUEUE PRIORITY ADC -MXPS-1 MJP GEC2 IF NOT MASTOR .NOSV2 ELSE NOS V2 .NOS23 IFGE OSLEV,617D LDD T2+2 SBK PLSI NJP GEC2 IF NOT MASTOR SUBSYSTEM ID .NOS23 ELSE * /--- BLOCK INITIAL 00 000 89/06/01 15.54 LDD T2+2 CHECK SUBSYSTEM ID SBK PLSI INITIAL PLATO ID ZJN GEC1.2 IF PLATO CONTROL POINT LDD T2+2 SBK 7754B NJP GEC2 IF NOT PLATO SUBSYSTEM ID .NOS23 ENDIF .NOSV2 ENDIF GEC1.2 BSS 0 LDN CMCL CHECK IF CP MOVING CRD CM LDD T1 .NOS27 IFLT OSLEV,716D NOS2.7.1 SHN 7 .NOS27 ENDIF LMD CM ZJP GEC1 IF MOVING * * MASTOR(N) LOCATED; READ EXTENDED MEMORY POINTERS. * .NOSV2 IFGE OSLEV,562D (NOS VERSION 2) LDD A170 ZJN GEC1.3 -- IF CME NOT PRESENT LDN 1 CME PRESENT, 800 SERIES GEC1.3 BSS 0 ENTER WITH (A) = 0 OR 1 ADK FLSW OFFSET TO FIELD LENGTH WORDS ADM MASCPA PLUS MASTOR CP AREA ADDR CRD CM READ APPROPRIATE WORD SRD D.RSAV SAVE *R* FROM CALLING CP LRD CM+1 LOAD *R* WITH (RA-NFL)/100B LDD CM+3 MASTOR(N) RA .NOSV2 ELSE (NOS VERSION 1) LDM MASCPA MASTOR CP AREA ADDR .NOS552 IFGE OSLEV,552D (NOS VERSION 1.4/552) ADK FLSW .NOS552 ELSE (PRE-NOS VERSION 1.4/552) ADK STSW .NOS552 ENDIF CRD CM READ RA/FL INFORMATION LDD A170 NJN GEC1.3 -- IF AN 800 SERIES MAINFRAME LDD CM+3 12-BIT RA ON A NON-800 UJN GEC1.4 -- ALL THAT'7S NEEDED GEC1.3 BSS 0 800-SERIES MAINFRAME SRD D.RSAV SAVE CALLING CP'7S *R* LRD CM+2 SET *R* TO MASTOR(N)'7S RA LDD RA 4000B ON AN 800 SERIES .NOSV2 ENDIF GEC1.4 BSS 0 ENTER WITH (A) = RA/100B SHN 6 ADN MS.CHKS CRM CHKS,TR READ EXTENDED MEMORY POINTERS LRD D.RSAV RESTORE CALLING CP'7S *R* LDM ECSP (A) = 3/MFORD, 9/WHO CARES SHN -9D (A) = MFORD (MAINFRAME ORDINAL) STM MFN RJM VEP VERIFY EXTENDED MEMORY POINTERS LDM ECSP (A) = VARIOUS BIT FLAGS LPN 1 (A) = ECS / ESM MODE LJM GECX GEC2 SOD T1 NJP GEC1 IF MORE CONTROL POINTS TO SCAN * MASTOR NOT FOUND CALL DFM,IMSG3 *MASTOR NOT ACTIVE* LJM DROP * * IMSG1 DIS ,*(PIO) DDP RESERVED* IMSG2 DIS ,*(PIO) CIU RESERVED* IMSG3 DIS ,*(PIO) MASTOR NOT ACTIVE* * IPSTAT TABLE CM QUAL$ EQU * SO NO /COMPVEP/ SYMBOLS * *CALL PLAPVEP ** CELLS NEEDED TO READ AND VERIFY THE EXTENDED * MEMORY PARAMETERS. THE FIRST 15 WORDS (CHKS - PNW) * MUST BE CONTIGUOUS. CHKS BSS 5 CHECKSUM FOR POINTERS ECSP BSS 1 VARIOUS BIT FLAGS MRAX BSS 2 MASTOR RAX MFLX BSS 2 MASTOR FLX PNW BSS 5 PROGRAM NAME AND NO. OF ARGS MASNAM DATA 6LMASTOR MFN BSS 1 MASTOR MAINFRAME NUMBER MASCPA BSS 1 FWA OF MASTOR-S CP AREA * *CALL PLAPABS *CALL PLAPEQN * * CHECK LENGTH OF PPU PROGRAM * QUAL * * * CHECK IF LITERALS OVERLAP BUFFERS * ERRNG *-ITEST+1 LITERALS OVERLAP BUFFERS USE LITERALS FORCE OUT LITERALS BEFORE TEST ERRPL *-7770B FORCE ERROR IF PPU OVERFLOW END