plato:source:plaopl:dsn
Table of Contents
DSN
Table Of Contents
- [00008] DSN - DRIVER FOR DATA SERVICES NETWORK.
- [00014] DRIVER FOR DATA SERVICES NETWORK.
- [00137] NWC - NETWORK CHARACTER
- [00161] OVERLAY - DEFINE AN OVERLAY
- [00400] MAI - MAIN PROCESSING LOOP
- [00463] TER - TERMINATION PROCESS
- [00481] UCS - UPDATE CM STATISTICS.
- [00529] PLATO INTERFACE ROUTINES.
- [00531] ABO - ABORT OUTPUT TO TERMINAL
- [00560] BOD - BUILD OUTPUT DATA BLOCKS FOR NETWORK
- [00680] BFO - WRITE DATA TO CIRCULAR BUFFER
- [00791] LOT - LOG OFF TERMINALS
- [00833] RTT - RETURN TERMINAL TYPE
- [00875] SKY - SEND KEY TO KEY BUFFER
- [00942] SBT - SET BIT FOR STATION
- [01017] SPK - STORE PLATO KEY IN KEY BUFFER
- [01079] SSL - SINGLE STATION LOGOFF.
- [01092] UPD - UPDATE IN/OUT POINTERS
- [01208] NETWORK PROCESSING ROUTINES.
- [01210] BRH - BUILD ROUTING HEADER.
- [01239] BTH - BUILD TERMINAL HEADER.
- [01276] COD - CHECK OUTPUT DELAYS
- [01396] INV - INVERT A CHARACTER
- [01439] PIB - PROCESS INPUT BUFFER
- [01535] PIC - PROCESS INPUT CHARACTER
- [01656] SNP - SWITCH TO NEXT NPU
- [01722] SSM - PROCESS SUPER SYSTEM MESSAGE
- [01739] SYS - PROCESS SYSTEM MESSAGE
- [01765] ASO - APPLICATION SYSTEM SIGNON
- [01787] CEM - PROCESS CCP ERROR/STATISTIC MESSAGES
- [01800] CSS - CHANGE IN SWITCH STATUS
- [01812] DSM - DISPLAY SYSTEM MESSAGE
- [01825] SBG - SIGN-ON TO BACKGROUND SYSTEM
- [01840] TCD - PROCESS TERMINAL COMMAND BLOCK
- [01906] FOB - FLUSH OUTPUT BUFFER.
- [01941] NKT - LOAD NEW KEY TRANSLATION TABLE.
- [01958] OKT - LOAD OLD KEY TRANSLATION TABLE.
- [01978] LGO - LOGOUT USER
- [01998] SNK - SWITCH TO NEW KEY TRANSLATION TABLE.
- [02012] PLM - PROCESS LOGIN / LOGOUT MESSAGE
- [02086] SRM - SEND ROUTING MESSAGE.
- [02142] STC - SEND TERMINAL COMMAND.
- [02174] VBL - VERIFY OUTPUT BUFFER LENGTH
- [02193] 2250 DATA TRANSFER ROUTINES.
- [02195] RID - READ INPUT DATA.
- [02249] SOD - SEND OUTPUT DATA
- [02322] FNC - FUNCTION THE CHANNEL. TRANSFER ONE DATA WORD
- [02353] FUL - TEST IF CHANNEL FULL
- [02364] IJM - WAIT FOR CHANNEL INACTIVE
- [02377] STS - GET 2550 STATUS
- [02421] ECS TRANSFER ROUTINES.
- [02423] RECS - ECS TO PPU TRANSFER VIA DDP.
- [02487] WECS - PPU TO ECS TRANSFER VIA DDP.
- [02563] GENERAL PURPOSE SUBROUTINES.
- [02565] C2X - CONVERT BINARY TO HEXADECIMAL.
- [02591] STX - STORE TEXT IN THE MESSAGE BUFFER.
- [02626] NUL - RETURN TO CALLER.
- [02633] ICH - INSERT CHANNEL NUMBERS INTO I/O INSTRUCTIONS
- [02664] PSE - PAUSE FOR STORAGE RELOCATION
- [02687] MES - ISSUE FORMATTED DAYFILE MESSAGE
- [02737] DBG - WRITE DATA TO CM BUFFER
- [02772] BUF - MACRO TO DEFINE A BUFFER
- [02960] PRS - INITIALIZE PROCESSING.
- [03082] IFE - INITIALIZE FRONT END.
- [03151] SET - SET 2550 STORE ADDRESS
- [03171] WTB - WRITE BUFFER TO 2550 AND VERIFY IT.
- [03238] OVERLAYED INITIALIZATION ROUTINES.
- [03242] CEA - CONVERT ECS ADDRESS
- [03258] FLF - FIND LOAD FILE
- [03332] ICP - INITIALIZE CONTROL POINT
- [03453] IFC - INITIALIZE FRAMAT COMMUNICATION
- [03810] INI - INITIALIZE FL AND OTHER PPS
- [03871] IRL - INITIALIZE RE-LOAD OF A 2550
- [03907] RFL - REQUEST FIELD LENGTH
Source Code
- DSN.txt
- 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 *
plato/source/plaopl/dsn.txt ยท Last modified: 2023/08/05 18:54 by Site Administrator