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 *