IDENT 1TS,STM
PERIPH
BASE MIXED
SST
*COMMENT 1TS - INTERNAL STIMULATION DRIVER.
COMMENT COPYRIGHT CONTROL DATA SYSTEMS INC. 1992.
TITLE 1TS - INTERNAL STIMULATION DRIVER.
SPACE 4,10
*** 1TS - INTERNAL STIMULATION DRIVER.
* G. R. MANSFIELD. 72/08/10.
* R. A. JAPS. 77/12/05.
SPACE 4,10
*** *1TS* IS A STIMULATION DRIVER WHICH IS CALLED BY *STIMULA*
* TO STIMULATE LOW SPEED INTERACTIVE TERMINALS FOR *IAF*.
SPACE 4,10
*** INPUT REGISTER FORMAT.
*
*T IR 18/ *1TS* ,24/ 0 ,18/ADDR
*
* ADDR ADDRESS OF CONTROL TABLE ENTRY FOR STIMULATION.
* ADDR IS ZERO FOR STIMULATION INITIALIZATION.
*
* REFER TO *STIMULA* FOR TABLE FORMATS.
SPACE 4,10
*** DAYFILE MESSAGES.
*
* * IAF ABORT.*
* STIMULATION WAS ABORTED BECAUSE *IAF* WAS NOT
* COMMUNICATING WITH THE STIMULATOR.
*
* * OUT OF SYNCH.*
* THE STIMULATION WAS ABORTED BECAUSE *1TS* WAS OUT OF
* SYNCH WITH *IAF*.
*
* * LOST STIMOUT DATA.*
* *1TS* WAS NOT ABLE TO RECOVER ALL OUTPUT BECAUSE THE
* CM BUFFERS WERE FULL.
*
* *XXXXXX.XXX SEC. 1TS CYCLE TIME.*
* INFORMATIVE MESSAGE STATING THE MAXIMUM CYCLE TIME
* FOR *1TS*.
*
* * INVALID OPTIONAL THINK TIME.*
* STIMULATION WAS ABORTED BECAUSE OF AN INVALID OPTIONAL
* THINK TIME SPECIFICATION IN THE SCRIPTS. CORRECT
* SCRIPTS AND RETRY.
*
* * ERROR IN SPECIAL ACCOUNT NUMBER.*
* STIMULATION WAS ABORTED BECAUSE AN ERROR IN THE
* SCRIPTS WAS ENCOUNTERED WHILE PROCESSING THE SPECIAL
* ACCOUNT NUMBER FLAGS.
*
* * STIMULATION INITIATED.*
* INFORMATIVE MESSAGE STATING THAT THE STIMULATION HAS
* STARTED.
*
* * IAF NOT ACTIVE.*
* STIMULATION WAS ABORTED BECAUSE *IAF* WAS NOT AT
* CONTROL POINT 1. BRING UP *IAF* AND RETRY.
*
* * MEMORY REQUEST ERROR.*
* AN INTERNAL ERROR INDICATING THAT *STIMULA* HAS NOT
* REQUESTED ENOUGH FL FOR THE STIMULATION.
*
* * INPUT REQUESTED PAST END OF SCRIPT - NNNN.*
* AN INPUT REQUEST WAS RECEIVED EVEN THOUGH END OF
* SCRIPT HAD BEEN REACHED ON TERMINAL *NNNN*. THIS
* IS A FATAL ERROR.
SPACE 4,10
*** INSTALLATION NOTES.
*
* THE STIMULATION DRIVER INTERFACES WITH *STIMULA*.
* *1TS* IS A STIMULATION DRIVER THAT COMMUNICATES
* WITH *1TN* VIA CHANNEL (INTERNAL STIMUALTION).
*
* **************
* * *
* * 1TS *
* * *
* **************
* I
* CHANNEL I
* I
* **************
* * *
* * 1TN *
* * *
* **************
SPACE 4
** COMMON DECKS.
*CALL COMSACC
*CALL COMSPIM
*CALL COMPMAC
*CALL COMPCHI
*CALL COMSREM
*CALL COMSSCD
*CALL COMSSSD
LIST X
*CALL COMSSTM
LIST -X
TITLE DIRECT CELLS AND ASSEMBLY CONSTANTS.
DIRECT SPACE 4,10
**** DIRECT LOCATION ASSIGNMENTS.
DP EQU 20 - 24 DATA POINTER
TT EQU DP+2 THINK TIME
RT EQU DP+3 DATA RATE
CK EQU DP+4 CLOCK
OC EQU 25 OUTPUT CHARACTER
IC EQU 26 INPUT CHARACTER
AT EQU 30 ACTIVE TERMINAL COUNT
LS EQU 31 LAST SECOND COUNT
MT EQU 32 1TS MAX CYCLE TIME
LM EQU 33 LAST MILLISECOND COUNT
MC EQU 34 MILLISECOND COUNT
NT EQU 35 NUMBER OF TERMINALS
TC EQU 36 TERMINAL COUNT
LC EQU 37 NUMBER OF TERMINALS TO LOGIN
OT EQU 40 OUTPUT TERMINAL NUMBER
IT EQU 41 INPUT TERMINAL NUMBER
TW EQU 42 - 47 WORD TWO OF *TTER* ENTRY
LI EQU TW+0 LINE SPEED
IS EQU TW+1 INPUT SPEED
LD EQU TW+2 LOGOUT DELAY
TI EQU TW+3 INITIAL THINK TIME
TO EQU TW+4 OPTIONAL THINK TIME
SC EQU 47 SECOND COUNT
IN EQU 60 - 64 IN POINTER
****
SPACE 4,10
** ASSEMBLY CONSTANTS.
CH EQU 15 STIMULATOR CHANNEL
TITLE MACRO DEFINITIONS.
RETURN SPACE 4
** RETURN - RETURN TO MANAGER TO ADVANCE TERMINAL PROCESSING.
*
* RETURN EXIT,ADDR
*
* ENTRY *EXIT* = MANAGER EXIT NUMBER.
* *ADDR* = MANAGER RETURN ADDRESS.
* IF *ADDR* IS NULL, RETURN TO NEXT PROGRAM ADDRESS.
PURGMAC RETURN
RETURN MACRO N,A
LDC A *+4
LJM N STT
ENDM
TTADD SPACE 4
** TTADD - GENERATE TERMINAL TABLE ADDRESS.
*
* TTADD TER,W
*
* ENTRY *TER* = DIRECT LOCATION CONTAINING TERMINAL NUMBER.
* W = 0, ADDRESS OF FIRST WORD OF ENTRY.
* = 1, ADDRESS OF SECOND WORD OF ENTRY.
* = 2, ADDRESS OF THIRD WORD OF ENTRY.
* = 3, ADDRESS OF FOURTH WORD OF ENTRY.
* = 4, ADDRESS OF FIFTH WORD OF ENTRY.
*
* EXIT (A) = DESIRED ADDRESS.
TTADD MACRO T,W
LOCAL L
LDD RA
SHN 6
ADD T
QUAL
L ADC **
QUAL *
IFC EQ,$W$0$
TTE0 RMT
CON L
TTE0 RMT
ENDIF
IFC EQ,$W$1$
TTE1 RMT
CON L
TTE1 RMT
ENDIF
IFC EQ,$W$2$
TTE2 RMT
CON L
TTE2 RMT
ENDIF
IFC EQ,$W$3$
TTE3 RMT
CON L
TTE3 RMT
ENDIF
IFC EQ,$W$4$
TTE4 RMT
CON L
TTE4 RMT
ENDIF
ENDM
TITLE MAIN PROGRAM.
STM SPACE 4
** STM - MAIN PROGRAM.
ORG PPFW
STM RJM PRS PRESET PROGRAM
ACN CH
* UPDATE CLOCKS.
STM1 LDC RTCL READ REAL TIME CLOCK
CRD CM
LDD CM+4 SET ELAPSED MILLISECOND COUNT
SBM STMD
PJN STM2 IF CLOCK NOT RECYCLED
ADC 10000B IF CLOCK RECYCLED
STM2 STD MC SET MILLISECOND COUNT SINCE LAST CYCLE
SBD MT CHECK CYCLE TIME
MJN STM4 IF MAXIMUM NOT EXCEEDED
RAD MT SET NEW MAXIMUM
STM4 LDD MC
RAD LM ADD LAST MILLISECOND
SBK 1000D
PJN STM5 IF SECOND ELAPSED
LDN 0
UJN STM6 TOGGLE SECOND STATUS
STM5 STD LM SAVE LAST MILLISECOND
AOD LS UPDATE LAST SECOND
LDN 1
STM6 STD SC SET SECOND COUNT STATUS
LDD CM+4 CURRENT TIME
STM STMD
LDD NT SET TERMINAL COUNT
STD TC
LDD MA STORE CLOCK
CWD AT
LDN 2 SET ON LINE CONTROL
STM LCIC
* CHECK FOR END OF STIMULATION.
STM7 PAUSE
LDD CM+1
STM STMF SAVE ERROR STATUS
RJM SAA SET ABSOLUTE ADDRESSES
LDC **
STMF EQU *-1 (ERROR STATUS)
NJN STM11 IF ERROR FLAG SET
LDN 0
* LDN 1 (INTERNAL ERROR ENCOUNTERED)
STMA EQU *-1
NJN STM11 IF INTERNAL ERROR ENCOUNTERED
IJM STM10,CH IF DRIVER ABORTED
FJM STM8,CH IF DRIVER READY
LDN 77 DELAY
SBN 1
NJN *-1 IF DELAY NOT EXPIRED
UJN STM7 RETRY
STM8 IAN CH+40 INPUT SYNC CODE
LPC 7777 TRUNCATE TO 12 BITS
LMC 7777 CHECK FOR SYNC CODE
NJN STM9 IF NOT SYNC CODE
RJM SSL ENTER STIMULATOR SERVICE LOOP
LDD AT CHECK ACTIVE TERMINAL COUNT
ZJN STM11 IF NONE ACTIVE
LJM STM1 LOOP
* PROCESS OUT OF SYNC CONDITION.
STM9 LDC MSGB SET MESSAGE ADDRESS
UJN STM12 TERMINATE STIMULATION RUN
* PROCESS *IAF* ABORT.
STM10 LDC MSGA * IAF ABORTED.*
UJN STM12 TERMINATE STIMULATION RUN
* PROCESS END OF STIMULATION.
STM11 RJM TDR TERMINATE DRIVER
LDC 0
* LDC MSGE * INVALID OPTIONAL THINK TIME.*
* LDC MSGB * OUT OF SYNCH.*
* LDC MSGF * ERROR IN SPECIAL ACCOUNT NUMBER.*
* LDC MSGG * INPUT REQUESTED PAST END OF SCRIPT...*
STMB EQU *-1
ZJN STM13 IF NO ERROR MESSAGE
* TERMINATE STIMULATION RUN.
*
* ENTRY (A) = MESSAGE ADDRESS.
STM12 RJM DFM
STM13 LDN ZERL CONVERT MAXIMUM CYCLE TIME
CRD CM
LDD MT
ZJN STM14 IF NO TIME ACCUMULATED
STD CM+4
LDD MA
CWD CM
MONITOR RDCM REQUEST DATA CONVERSION
LDD MA SET UP MESSAGE
CRM MSGD,ON *XXXXXX.XXX SEC. 1TS CYCLE TIME.*
LDC MSGD
RJM DFM
STM14 RJM ESD END STIMOUT DATA
LDD IR+3 SET CONTROL TABLE ENTRY COMPLETE
SHN 6
ADD RA
SHN 6
ADD IR+4
CRD CM
LDC 4000
STD CM
LDC 0
STMC EQU *-1 (TOTAL TIMES IN REGULATION)
STD CM+1
LDD IR+3
SHN 6
ADD RA
SHN 6
ADD IR+4
CWD CM
UJN DPP DROP PPU
STMD CON 0 PREVIOUS TIME
DPP SPACE 4
** DPP - DROP PPU.
DPP MONITOR DPPM DROP PPU
LJM PPR EXIT TO PP RESIDENT
SPACE 4,10
** STIMULATION COMPLETION MESSAGES.
MSGA DATA C* IAF ABORT.*
MSGB DATA C* OUT OF SYNCH.*
MSGC DATA C* LOST STIMOUT DATA.*
MSGD DATA C*XXXXXX.XXX SEC. 1TS CYCLE TIME.*
MSGE DATA C* INVALID OPTIONAL THINK TIME.*
MSGF DATA C* ERROR IN SPECIAL ACCOUNT NUMBER.*
MSGG DATA H* INPUT REQUESTED PAST END OF SCRIPT -*
MSGH DATA C*NNNN.*
SPACE 4,10
** COMMON DECKS.
*CALL COMPC2D
TITLE TERMINATION ROUTINES.
TDR SPACE 4,15
** TDR - TERMINATE DRIVER.
*
* ENTRY STIMULATION ENDED.
* (NT) = NUMBER OF TERMINALS.
*
* EXIT ALL TERMINALS SET OFF LINE.
* TO *STM10*, IF OUT OF SYNCH OR *1TN* NOT RESPONDING.
*
* USES T1 - T4.
*
* MACROS PAUSE, TTADD.
TDR SUBR ENTRY/EXIT
LDN 20
STD T4
LDN 0
STD T3
TDR1 IJM STM10,CH IF DRIVER ABORTED
PAUSE
EJM TDR1,CH WAIT FOR DRIVER
IAN CH+40 INPUT SYNC CODE
LPC 7777 TRUNCATE TO 12 BITS
LMC 7777
ZJN TDR2 IF IN SYNCH
LJM STM10 IF DRIVER ABORTED
TDR2 STD T1
STD T2 CLEAR ACTIVE COUNT
TDR3 TTADD T1,0 READ TERMINAL TABLE ENTRY
CRD DP
LDD DP CHECK STATUS
SHN 21-13
MJN TDR5 IF OFF LINE
LDD T2
NJN TDR6 IF ONE ALREADY PROCESSED
AOD T3
SBN 20
NJN TDR4 DELAY LOG OFF
STD T3
LDC 4000 SET OFF LINE
STD DP
TTADD T1,0
CWD DP
TDR4 LDD TH SET TERMINAL LOGGED OFF
STD T2
UJN TDR6 OUTPUT CHARACTER
TDR5 LDN 0 SET OFF LINE
TDR6 OAN CH+40
FJM *,CH
IAN CH+40 ACCEPT DRIVER INPUT
AOD T1 ADVANCE TERMINAL NUMBER
LMD NT
NJP TDR3 IF MORE TERMINALS
LDD T2
ZJN TDR8 IF NO TERMINALS LOGGED OFF
TDR7 LJM TDR1 LOOP
TDR8 SOD T4
NJN TDR7 IF FINAL PASS INCOMPLETE
DCN CH+40
LJM TDRX RETURN
ESD SPACE 4,15
** ESD - END STIMOUT DATA.
*
* ENTRY STIMULATION COMPLETE.
* (NT) = NUMBER OF TERMINALS.
*
* EXIT DATA WORD IN *TTER* FLUSHED TO FET BUFFER.
*
* USES T1, T7, CM - CM+4.
*
* CALLS SDW.
*
* MACROS TTADD.
ESD SUBR ENTRY/EXIT
LDN 1 (NO OUTPUT RECOVERY)
* LDN 0 (OUTPUT RECOVERY)
ESDA EQU *-1
NJN ESDX IF NO OUTPUT RECOVERY
STD T1 ZERO DUMMY CHARACTER
STD T7 TERMINAL NUMBER
ESD1 TTADD T7,3 READ TERMINAL TABLE ENTRY
CRD CM
LDD CM
ZJN ESD2 IF NO ENTRY IN DATA WORD
RJM SDW STORE DATA WORD
ESD2 AOD T7 ADVANCE TERMINAL NUMBER
LMD NT
NJN ESD1 IF MORE TERMINALS
UJN ESDX RETURN
TITLE STIMULATOR SERVICE.
OFL SPACE 4,10
* RETURNS FOR TERMINAL IDLE AND OFF LINE.
OFL STM TOCA,OT SET ENTRY ADDRESS
OFL1 LDN 0 SET OFF LINE STATUS
STD OC
UJN STT1 STORE TERMINAL TABLE ENTRY
OFL2 LDN 0 SET OFF LINE STATUS
STD OC
UJN NOP RETURN FOR NO OPERATION
ONL SPACE 4,10
* RETURNS FOR TERMINAL IDLE AND ON LINE.
ONL STM TOCA,OT SET ENTRY ADDRESS
ONL1 LDD TH SET ON LINE STATUS
STD OC
UJN STT1 STORE TERMINAL TABLE ENTRY
ONL2 LDD TH SET ON LINE STATUS
ONL3 STD OC
UJN NOP RETURN FOR NO OPERATION
STT SPACE 4,10
* RETURNS FOR STORE TERMINAL TABLE ENTRY.
STT STM TOCA,OT SET ENTRY ADDRESS
STT1 TTADD OT,0 STORE TERMINAL TABLE ENTRY
CWD DP
* UJN NOP RETURN FOR NO OPERATION
NOP SPACE 4,10
* RETURN FOR NO OPERATION.
NOP AOD OT ADVANCE OUTPUT TERMINAL
LMD NT
NJN SSL4 IF LIMIT NOT REACHED
STD OT
* UJN SSL4 PROCESS NEXT TERMINAL
SSL SPACE 4,10
** SSL - STIMULATOR SERVICE LOOP.
*
* ENTRY (NT) = NUMBER OF TERMINALS BEING STIMULATED.
* (TC) = TERMINAL COUNT.
*
* EXIT ALL TERMINALS SERVICED.
*
* USES IC, IT, TC, T1.
*
* CALLS RTC.
*
* NOTES UPLINE DATA PROCESSORS RETURN TO THE SERVICE
* LOOP AT *SSL4*.
*
* *SSL* IS RESPONSIBLE FOR SENDING AND RECEIVING
* DATA FROM THE STIMULATOR CHANNEL.
SSL4 IAN CH+40 INPUT CHARACTER
STD IC
SOD TC DECREMENT TERMINAL COUNT
NJN SSL1 IF NOT END OF TERMINALS
* UJN SSLX
SSL SUBR ENTRY/EXIT
SSL1 LDD OC OUTPUT CHARACTER
OAN CH+40
FJM *,CH
LDD IC CHECK PREVIOUS INPUT CHARACTER
SHN 6
PJN SSL2 IF NO INPUT DATA
RJM RTC READ TERMINAL CHARACTER
SSL2 AOD IT ADVANCE INPUT TERMINAL
LMD NT
NJN SSL3 IF LIMIT NOT REACHED
STD IT
SSL3 LDM TOCA,OT
STD T1
LJM 0,T1 ENTER OUTPUT ROUTINE
TITLE UPLINE DATA PROCESSING ROUTINES.
LGI SPACE 4,20
** LGI - PROCESS LOGIN.
*
* ENTRY (LC) = LOGIN COUNT.
* (SC) = SECOND COUNT.
* (OT) = OUTPUT TERMINAL.
* (LCIC) = ON LINE CONTROL.
*
* EXIT TERMINAL SET ON LINE.
*
* USES LC, OC, CM - CM+4, DP - DP+4.
*
* MACROS RETURN, TTADD.
*
* NOTES *LGI* IS RESPONSIBLE FOR THE RATE AT WHICH
* TERMINALS ARE BROUGHT ON LINE.
LGI LDD LC CHECK LOGIN COUNT
NJN LGI1 IF LOGIN ALLOWED
LJM OFL2 SET OFF LINE STATUS
LGI1 TTADD OT,0 READ TERMINAL TABLE ENTRY
CRD DP
SOD LC DECREMENT LOGIN COUNT
RETURN OFL
LGIA LDD SC CHECK SECOND COUNT
NJN LGI2 IF SECOND ELAPSED
LJM OFL2 SET OFF LINE STATUS
LGI2 TTADD OT,0 READ TERMINAL TABLE ENTRY
CRD DP
SOD CK DECREMENT CLOCK
ZJN LGI3 IF START TIME REACHED
MJN LGI3 IF START TIME REACHED
LJM OFL1 SET OFF LINE STATUS
LGI3 AOD LC ADJUST LOGIN COUNT
LDD DP CLEAR OFF LINE
LPN 77 KEEP UPPER 6 BITS OF SCRIPT ADDRESS
STD DP
RETURN OFL
LGIB LDM LCIC CHECK ON LINE CONTROL
NJN LGI4 IF OKAY TO BRING ON LINE
LJM OFL2 SET OFF LINE STATUS
LGI4 SOM LCIC DECREMENT ON LINE CONTROL
TTADD OT,0
CRD DP
RETURN ONL
LGI5 LDC 5000 SEND LEGAL CHARACTER
LJM ONL3 SET ON LINE STATUS
LCIC CON 0 ON LINE CONTROL
LGID CON 0 NUMBER OF ACTIVE TERMINALS
REJ SPACE 4,10
** REJ - REJECT CHARACTER.
*
* EXIT (OC) = 1400.
*
* USES OC, DP - DP+4.
*
* MACROS RETURN, TTADD.
REJ BSS 0 ENTRY
TTADD OT,0 READ TERMINAL TABLE ENTRY
CRD DP
LDD CK CHECK CLOCK
SBD MC
MJN REJ1 IF CHARACTER DELAY ELAPSED
STD CK
LDC 1400 SET OUTPUT CHARACTER REJECT
STD OC
LJM STT1 UPDATE TERMINAL STATUS
REJ1 ADD RT RESET CLOCK
PJN REJ2
LDD RT
REJ2 STD CK
RETURN ONL,ONL2
TTD SPACE 4,15
** TTD - THINK TIME DELAY.
*
* ENTRY (OT) = OUTPUT TERMINAL NUMBER.
*
* EXIT THINK TIME DELAY EXPIRED.
* INPUT SPEED SET FOR UPLINE DATA.
* TO *WTC*.
*
* USES DP - DP+4, TW - TW+4.
*
* MACROS RETURN, TTADD.
*
* NOTES *TTD* IS RESPONSIBLE FOR GENERATING AND
* PROCESSING A THINK TIME DELAY BEFORE SENDING
* UPLINE DATA.
TTD BSS 0 ENTRY
TTADD OT,0 READ TERMINAL TABLE ENTRY
CRD DP
LDD TT SET THINK TIME
LPC 177
STD CK
IAN. 14 SELECT RANDOM INCREMENT
TTDA LPN **
RAD CK
ZJN TTD2 IF NO DELAY
AOD CK
RETURN ONL
LDD SC CHECK SECOND COUNT
NJN TTD1 IF SECOND ELAPSED
LJM ONL2 RETURN ON LINE STATUS
TTD1 TTADD OT,0 READ TERMINAL TABLE ENTRY
CRD DP
SOD CK DECREMENT CLOCK
ZJN TTD2 IF THINK TIME ELAPSED
LJM ONL1 RETURN ON LINE STATUS
TTD2 TTADD OT,1 READ TERMINAL TABLE ENTRY
CRD TW
LDD IS SET INPUT SPEED
STD CK
STD RT
RETURN ONL,WTC
WTC SPACE 4,25
** WTC - WRITE CHARACTER.
*
* ENTRY INPUT SPEED SET IN *TTER*.
* (OT) = OUTPUT TERMINAL.
* (MC) = MILLESECOND TIME CLOCK.
*
* EXIT (OC) = OUTPUT CHARACTER.
* TO *STT1* IF CHARACTER TO OUTPUT.
* TO *OTT1* TO PROCESS OPTIONAL THINK TIME.
* TO *ONL1* IF OPTIONAL THINK TIME PROCESSED.
*
* USES T0 - T6, DP - DP+4, TW - TW+4.
*
* CALLS GNT, OTT, SAN, SDC.
*
* MACROS TTADD.
*
* NOTES *WTC* IS RESPONSIBLE FOR THE FOLLOWING -
* 1. PROCESSING INPUT SPEED FOR UPLINE DATA.
* 2. GETTING THE NEXT CHARACTER OF UPLINE DATA
* FROM THE SESSION SCRIPT IN CM.
* 3. PROCESS ANY SPECIAL CHARACTERS RELATED TO
* TASKS, OPTIONAL THINK TIME, OR DYNAMIC
* USER NUMBERS.
WTC BSS 0 ENTRY
TTADD OT,0 READ TERMINAL TABLE ENTRY
CRD DP
* CHECK IF INPUT THINK TIME EXPIRED.
LDD CK CHECK CLOCK
SBD MC
MJN WTC1 IF CHARACTER DELAY ELAPSED
STD CK
LJM ONL1 RETURN ON LINE STATUS
WTC1 ADD RT SET NEW RATE
PJN WTC2
LDD RT
WTC2 STD CK
* SAVE CURRENT SCRIPT ADDRESS FOR POSSIBLE LINE
* REGULATION PROCESSING.
LDD DP
SHN 21-11
PJN WTC3 IF NOT BEGINNING OF LINE
TTADD OT,4 SAVE CURRENT ADDRESS OF SCRIPT
CRD T1
LDD DP
STD T1
LDD DP+1
STD T1+1
LDN 0
STD T1+2
TTADD OT,4
CWD T1
* GET NEXT CHARACTER FROM SCRIPT SESSION.
WTC3 LDD DP SET BYTE NUMBER
SHN 14
LPN 7
STD T5
LDD DP
LPN 77
SHN 6
ADD RA
SHN 6
ADD DP+1
CRD T0
LDD HN ADVANCE BYTE
RAD DP
SHN -6
LPN 7
LMN 5
NJN WTC4 IF NOT END OF WORD
AOD DP+1 ADVANCE WORD
SHN -14
ADD DP
LPC 1077 RESET BYTE
STD DP
WTC4 TTADD OT,0
CWD DP
TTADD OT,1
CRD TW
* CHECK CHARACTERS FOR SPECIAL PROCESSING.
LDI T5 CHECK FOR SPECIAL CHARACTER
SHN -11
ZJN WTC7 IF NOT SPECIAL CHARACTER
LDN 0 CLEAR INDEX
STD T6
WTC5 LDM TSCH,T6 CHECK FOR SPECIAL CHARACTER
ZJN WTC7 IF END OF TABLE
LMI T5
ZJN WTC6 IF SPECIAL CHARACTER
LDN 2 ADVANCE TABLE INDEX
RAD T6
UJN WTC5 LOOP
WTC6 LDM TSCH+1,T6 GET PROCESSOR ADDRESS
STD T6
LJM 0,T6 PROCESS SPECIAL CHARACTER
WTC7 LDD TO
ZJN WTC8 IF NOT IN OPTIONAL THINK TIME MODE
LJM OTT1 PROCESS OPTIONAL THINK TIME
WTC8 LDI T5 SET CHARACTER
LMD TH STORE OUTPUT CHARACTER
STD OC
LDD DP CLEAR FIRST OUTPUT FLAG
LPC 6777
STD DP
LDD TO CHECK OPTIONAL THINK TIME ENTRY
ZJN WTC9 IF NOT OPTIONAL THINK TIME ENTRY
LDC ONL1&STT1
WTC9 LMC STT1
STM WTCA
LDD OT SET TERMINAL NUMBER
STD T7
LDD OC STORE DATA CHARACTER
LPC 377
RJM SDC
LJM *
* LJM STT1 (NO OPTIONAL THINK TIME)
* LJM ONL1 (OPTIONAL THINK TIME PRESENT)
WTCA EQU *-1
TSCH SPACE 4,10
** TSCH - TABLE OF SPECIAL CHARACTERS.
*
*T 12/ CHAR
*T, 12/ ADDR
*
* CHAR SPECIAL CHARACTER (ASCII)
* ADDR ADDRESS OF PROCESSOR
TSCH BSS 0
CON .ELCR,EOL END OF LINE
CON .ELXO,EOL END NOF LINE
CON .ESC,EOL ESCAPE
CON .ETX,EOL END OF TEXT
CON .AUTO,WTC7 SOURCE LINE INPUT
CON .BTSK,SNT BEGIN TASK
CON .ETSK,PET END TASK
CON .SACN,SAN DYNAMIC LOGIN
CON .OPTT,OTT OPTIONAL THINK TIME
CON .ESCR,EOS END OF SCRIPT
CON .ESXO,EOS END OF SCRIPT
CON 0,0 END OF TABLE
EOL SPACE 4,20
** EOL - PROCESS END OF LINE.
*
* ENTRY (OT) = OUTPUT TERMINAL NUMBER.
* (TO) = OPTIONAL THINK TIME.
* (DP - DP+4) = TERMINAL STATUS.
*
* EXIT TERMINAL STATUS UPDATED IN *TTER*.
* (OC) = OUTPUT CHARACTER.
* TO *STT1* IF NO ERROR.
* TO *ONL1* IF ERROR ENCOUNTERED.
*
* USES CK, DP, RT, TO, TT, CM - CM+4.
*
* CALLS ETM, SDC.
*
* MACROS TTADD.
EOL BSS 0 ENTRY
LDD TO
NJN EOL1 IF OPTIONAL THINK TIME
LJM EOL5 IF NORMAL PROCESSING
EOL1 LMC 6000 CHECK FLAG FOR \\
ZJN EOL3 IF RESET TO INITIAL THINK TIME
LDD TO CHECK OPTIONAL THINK TIME
LPC 1777
STD T6
ADC -200
PJN EOL4 IF ENTRY TOO LARGE
EOL2 LDD TT CURRENT RC,TT VALUES IN TERMINAL TABLE
LPC 7600 KEEP RC VALUE
ADD T6 INSERT NEW TT VALUE
STD TT
STD RT
STD CK
LDN 0
STD TO CLEAR OPTIONAL THINK TIME
TTADD OT,1
CWD TW
LJM ONL1 RETURN ON LINE
EOL3 LDD TI SET INITIAL THINK TIME
STD T6
UJN EOL2 INSERT THINK TIME
EOL4 LDC MSGE SET INTERNAL ERROR STATUS
STM STMB
LDC LDNI+1
STM STMA
LJM ONL1 RETURN ON LINE
* PROCESS END OF LINE (CARRIAGE RETURN, ECS, ETX).
EOL5 BSS 0 ENTRY
LDC ONL2 SET ON LINE
STM TOCA,OT
LDD LI RESET LINE SPEED FOR OUTPUT
STD RT
LDI T5 STORE OUTPUT CHARACTER
LPC 377
LMC 5000
STD OC
TTADD OT,2
CRD CM
LDD CM+4
ZJN EOL6 IF NOT SOURCE LINE INPUT
LDC TTD SET THINK TIME DELAY PROCESSOR
STM TOCA,OT
LDD DP SET FIRST OUTPUT CHARACTER ENCOUNTERED
LPC 6777
LMC 1000
STD DP
EOL6 LDD CM+2 CLEAR USER NUMBER FLAG
LPN 77
STD CM+2
LDN 0
STD CK
STD CM+4 CLEAR SOURCE LINE INPUT FLAG
TTADD OT,2
CWD CM
LDD OT SET TERMINAL NUMBER
STD T7
LDD OC STORE DATA CHARACTER
LPC 377
RJM SDC
RJM ETM ENTER TIME
LJM STT1 RETURN TERMINAL STATUS
EOS SPACE 4,20
** EOS - PROCESS END OF SCRIPT.
*
* ENTRY (DP - DP+4) = TERMINAL STATUS.
* (RBUF - RBUF+4) = *RA+0* WORD.
*
* EXIT TERMINAL STATUS AND SCRIPT ADDRESS UPDATED.
* TO *EOL5* IF LAST SESSION.
* TO *EOL* IF NEW SESSION TO BE STIMULATED.
*
* USES T6, T7, CM - CM+4, DP - DP+4.
EOS BSS 0 ENTRY
LDD DP+2
LPC 7600
NJN EOS1 REPEAT COUNT PRESENT
LDD DP SET END OF SESSION
LPN 77
LMC 6000
STD DP
LJM EOL5 PROCESS END OF LINE
EOS1 LDM RBUF CHECK LOOP FLAG
SHN 21-13
PJN EOS2 IF NEXT RECORD TO BE USED
LJM EOS5 IF REPEAT ON SESSION RECORD
* LOOP ON FILE - SET ADDRESS OF NEXT SESSION RECORD.
EOS2 LDN 0
STD T7
LDD DP
SHN -6
ZJN EOS3 IF THE 1ST BYTE OF A NEW WORD
AOD T7
EOS3 AOD T7
LDD DP
LPN 77
SHN 14
ADD DP+1
ADD T7
STD DP+1
SHN -14
STD DP
SBM RBUF
SHN 14
ADD DP+1
SBM RBUF+1
ZJN EOS4 IF LAST SESSION - LOOP TO FIRST SESSION
LJM EOS9 IF SESSION TO CONTINUE TO NEXT SCRIPT
EOS4 LDM RBUF+3 SET FWA OF FIRST SCRIPT
STD DP+1
LDM RBUF+2
LJM EOS8 DECREMENT REPEAT COUNT
* LOOP ON SESSION - SET ADDRESS OF CURRENT SESSION RECORD.
EOS5 LDD DP
SHN -6
ZJN EOS6 IF THE FIRST BYTE OF A NEW WORD
LDN 1
EOS6 STD T6 ADDRESS OF NEXT SESSION RECORD
LDD DP
LPN 77
STD DP
SHN 6
ADD RA
SHN 6
ADD DP+1
ADD T6 FORM POINTER TO START OF CURRENT RECORD
CRD CM
LDD DP+1 BACK UP POINTER TO START OF RECORD
SBD CM+4
ADD T6
STD DP+1
PJN EOS7 IF POSITIVE
ADC 10000B IF NEGATIVE, ADD THE CARRY
STD DP+1
SOD DP DECREMENT DUE TO THE CARRY
EOS7 LDD DP
SBD CM+3
EOS8 STD DP
* DECREMENT REPEAT COUNT.
EOS9 LDD DP+2 CHECK FOR UNLIMITED REPEAT COUNT
LPC 7600 MASK REPEAT COUNT
LMC 7600
ZJN EOS10 IF RC=31 (MAXIMUM, DO NOT DECREMENT)
LDC -200 DECREMENT REPEAT COUNT BY 1
RAD DP+2
EOS10 LJM EOL PROCESS END OF LINE
PET SPACE 4,20
** PET - PROCESS END OF TASK.
*
* ENTRY (OT) = OUTPUT TERMINAL NUMBER.
*
* EXIT SCRIPT ADDRESS RESET IN *TTER*.
* TASK COMPLETION COUNTER ADVANCED.
*
* USES CM - CM+4, DP - DP+4, T0 - T0+4.
*
* MACROS TTADD.
*
* NOTES IF NO TASK ENTRY ADDRESS IS PRESENT IN *TTER*, THEN
* THE SPECIAL CHARACTER, *.ETSK*, WILL BE PROCESSED AS
* A CHARACTER OF DATA.
*
* *END OF TASK* PROCESSING WILL RESET THE DYNAMIC
* LOGIN FIELD IN *TTER*.
PET BSS 0 ENTRY
TTADD OT,2 READ THIRD WORD OF *TTER* ENTRY
CRD CM
LDD CM+2 READ SECOND WORD OF *TASK* ENTRY
LPN 77
STD CM+2
ADD CM+3
NJN PET1 IF TASK ENTRY ADDRESS PRESENT
LJM WTC7 NO SPECIAL PROCESSING REQUIRED
PET1 LDD CM+2
SHN 6
ADD RA
SHN 6
ADD CM+3
ADN 1
CRD T0
AOD T3 INCREMENT TASK COMPLETED COUNTER
LDD CM+2 WRITE SECOND WORD OF *TASK* ENTRY
SHN 6
ADD RA
SHN 6
ADD CM+3
ADN 1
CWD T0
TTADD OT,0 READ TERMINAL STATUS
CRD DP
LDD DP SET OLD SCRIPT ADDRESS
LMD CM
LPC 7000
LMD CM
STD DP
LDD CM+1
STD DP+1
TTADD OT,0 SET SCRIPT ADDRESS
CWD DP REPLACE *TTER* WITH OLD SCRIPT ADDR
LDD CM+2 CLEAR TASK ENTRY ADDRESS
SCN 77
STD CM+2
LDN 0
STD CM+3
TTADD OT,2
CWD CM
LJM WTC3 PROCESS NEXT CHARACTER
SNT SPACE 4,20
** SNT - SET NEXT TASK.
*
* ENTRY (OT) = OUTPUT TERMINAL NUMBER.
*
* EXIT NEXT BEST TASK SET IN *TTER*.
* TO *WTC3*.
*
* USES T6, T7, CM - CM+4, DP - DP+4.
*
* MACROS TTADD.
SNT BSS 0 ENTRY
TTADD OT,0 READ TERMINAL STATUS
CRD CM
TTADD OT,2 READ TASK ADDRESS
CRD DP
LDD CM SAVE CURRENT SCRIPT ADDRESS
LPC 777
STD DP
LDD CM+1
STD DP+1
LDD RA GET NEXT BEST TASK
SHN 6
ADN RANT
CRD CM
LDD CM+3
SHN 14
ADD CM+4
NJN GNT1 IF TASK SET
LDD RA ADVANCE NO TASK COUNTER
SHN 6
ADN RASC
CRD CM
AOD CM+4
LDD RA GET DEFAULT TASK ADDRESS
SHN 6
ADN RASC
CWD CM
ADN RATK SET DEFAULT TASK
CRD CM
STM GNTA SET DEFAULT TASK FLAG
LDD CM+3
SHN 14
ADD CM+4 LOAD ADDRESS OF TASK TABLE
NJN GNT1 IF TASK TABLE EXISTS
LJM WTC7 CONTINUE CHARACTER PROCESSING
GNT1 LDD CM+4 SAVE FWA OF TASK
STD T7
LDD CM+3 GET FWA OF TASK TEXT
LPN 77
STD T6
SHN 6
ADD RA
SHN 6
ADD CM+4
CRD CM
ADN 1
CRD T0 READ SECOND WORD OF TASK ENTRY
LDD DP+2
LPC 7700
ADD T6
STD DP+2
LDD T7
STD DP+3
TTADD OT,2 SAVE OLD SCRIPT ADDRESS
CWD DP
TTADD OT,0 READ TERMINAL STATUS
CRD DP
LDD DP SET TASK ADDRESS
LPC 7000
ADD CM+3
STD DP
LDD CM+4
STD DP+1
TTADD OT,0
CWD DP
LDC **
GNTA EQU *-1 (DEFAULT TASK FLAG)
NJN GNT2 IF DEFAULT TASK SELECTED
LDN ZERL CLEAR TASK ADDRESS
CRD CM
LDD RA
SHN 6
ADN RANT
CWD CM
GNT2 AOD T4 INCREMENT *TASK CALLED*
LDD T6 UPDATE SECOND WORD OF *TASK* ENTRY
SHN 6
ADD RA
SHN 6
ADD T7
ADN 1
CWD T0
LDN 0 CLEAR DEFAULT TASK FLAG
STM GNTA
LJM WTC3 PROCESS NEXT CHARACTER
OTT SPACE 4,10
** OTT - OPTIONAL THINK TIME.
*
* ENTRY ((T5)) = OUTPUT CHARACTER.
* (TO) = OPTIONAL THINK TIME.
*
* EXIT (TO) = OPTIONAL THINK TIME.
* TO *WTC3*.
*
* USES TO, T6.
*
* MACROS TTADD.
*
* NOTE OPTIONAL THINK TIME IS SET INTO *TTER* WHEN
* END OF LINE IS PROCESSED.
OTT BSS 0 ENTRY
LDD TO
ZJN OTT4 IF NOT RESET REQUEST
LDC 6000 SET FLAG TO RESET INITIAL THINK TIME
STD TO
UJN OTT5 UPDATE *TTER*
OTT1 BSS 0 ENTRY
LDN 0
STD T6
OTT2 LDM TANV,T6 GET ASCII NUMBER FROM TABLE
ZJN OTT5 IF END OF TABLE - IGNORE CHARACTER
LMI T5
ZJN OTT3 IF MATCH
AOD T6
UJN OTT2 UPDATE *TTER*
OTT3 LDD TO SET OPTIONAL THINK TIME
LPC 777
SHN 3
LMD T6
OTT4 LMC 4000B SET FLAG (IN CASE OF LEADING 0 CHARS)
STD TO
UJN OTT5
OTT5 TTADD OT,1
CWD TW REPLACE *TTER-1* ENTRY
LJM WTC3 PROCESS NEXT CHARACTER
TANV SPACE 4,10
** TANV - TABLE OF ASCII NUMERIC VALUES.
TANV BSS 0
LOC 0
CON .ZER 0
CON .ONE 1
CON .TWO 2
CON .THR 3
CON .FOR 4
CON .FIV 5
CON .SIX 6
CON .SEV 7
CON 0 END OF TABLE
LOC *O
SAN SPACE 4,10
** SAN - SET ACCOUNT NUMBER.
*
* ENTRY ((T5)) = OUTPUT CHARACTER.
* (OT) = OUTPUT TERMINAL.
*
* EXIT ((T5)) = NEXT OUTPUT CHARACTER.
* ACCOUNT FLAG IN *TTER* UPDATED.
* TO *WTC3*.
*
* USES T5, T6, CM - CM+4.
*
* MACROS TTADD.
SAN BSS 0 ENTRY
LDM SDWA SET TERMINAL NUMBER
ADD OT
STD T6
TTADD OT,2 READ TERMINAL TABLE ENTRY
CRD CM
LDD CM+2 GET ACCOUNT NUMBER POINTER
SHN 14
LPN 7
NJN SAN1 IF FIRST CHARACTER PROCESSED
LDD T6 SET FIRST CHARACTER OF TERMINAL NUMBER
SHN 14
UJN SAN3 REPLACE SPECIAL CHARACTER
SAN1 SBN 1
NJN SAN2 IF SECOND CHARACTER PROCESSED
LDD T6 SET SECOND CHARACTER OF TERMINAL NUMBER
SHN 17
UJN SAN3 REPLACE SPECIAL CHARACTER
SAN2 SBN 1
NJN SAN4 IF THIRD CHARACTER PROCESSED - FLAG ERROR
LDD T6 SET THIRD CHARACTER OF TERMINAL NUMBER
SAN3 LPC 7 ISOLATE LOWER 3-BITS
STD T6
LDM TANV,T6 CONVERT NUMBER TO ASCII CHARACTER
STI T5 SAVE OUTPUT CHARACTER
LDD CM+2
ADC 100 INCREMENT ACCOUNT NUMBER POINTER BY 1
STD CM+2
TTADD OT,2 WRITE TERMINAL TABLE ENTRY
CWD CM
LJM WTC7 PROCESS NEXT CHARACTER
SAN4 LDC MSGF SET INTERNAL ERROR STATUS
STM STM12
LDC LDNI+1
STM STMA
LJM WTC3 PROCESS NEXT CHARACTER
TITLE DOWNLINE DATA PROCESSING ROUTINES.
RTC SPACE 4,25
** RTC - READ TERMINAL CHARACTER.
*
* ENTRY (IC) = INPUT CHARACTER.
*
* EXIT TO *HNU* IF (IC) = 6000.
* TO *INI* IF (IC) = 6400.
*
* USES T7, DP - DP+4.
*
* CALLS ETM, SDC.
RTC SUBR ENTRY/EXIT
LDD IC
LPC 6777
LMC 1000
LMC 7000
ZJN RTCX IF PHONE LINE ENABLE
LMC .IISE&7000
NJN RTC1 IF NOT HANG UP
LJM HNU HANG UP
RTC1 LMC .IISI&.IISE
NJN RTC2 IF NOT BEGIN INPUT
LJM INI INITIATE INPUT
RTC2 LDM TOCA,IT CHECK ROUTINE
LMC LGI5
ZJN RTCX RETURN IF LOGIN IN PROCESS
LDC REJ SET REJECT
RTC3 STM TOCA,IT
RTC4 LDD IT SET TERMINAL NUMBER
STD T7
TTADD IT,0
CRD DP
LDD DP
SHN 21-11
MJN RTC5 IF NOT POSSIBLY THE SECOND CHARACTER
LDD IC CHARACTER
LPC 4376
LMC 4024
ZJN RTC6 IF ECHO *LF* - DO NOT PUT OUT TIME
LMC 4032&4024
ZJN RTC6 IF *CR* SENT
LMC 4000&4032
ZJN RTC5 IF NULL CHARACTER SENT FOR CARRIAGE DELAY
LMC 4376&4000
ZJN RTC5 IF DELETE CHARACTER SENT IN TAPE MODE
LDC 1000
RAD DP
TTADD IT,0
CWD DP SET FIRST CHARACTER FLAG
RJM ETM ENTER TIME
RTC5 LDD IC STORE DATA CHARACTER
LPC 377
RJM SDC
RTC6 LJM RTCX RETURN
HNU SPACE 4,25
** HNU - HANG UP.
*
* ENTRY (IT) = INPUT TERMINAL.
* (NT) = NUMBER OF TERMINALS.
* (AT) = ACTIVE TERMINAL COUNT.
*
* EXIT IF REPEAT COUNT NOT PRESENT, TERMINAL SET OFF LINE
* (AT) = ACTIVE TERMINAL COUNT.
* (LC) = LOGIN CONTROL.
*
* USES AT, DP - DP+4, TW - TW+4.
*
* MACROS TTADD.
*
* NOTES IF A REPEAT COUNT IS PRESENT, *HNU* WILL
* INITIALIZE THE *TTER* ENTRY FOR THE NEXT SESSION
* TO BE PROCESSED. THIS INCLUDES SETTING THE THINK
* TIME, AND LOGIN DELAY. *PSO* HAS ALREADY SET
* THE SESSION ADDRESS IN *TTER*.
* IF NO REPEAT COUNT IS PRESENT, THE TERMINAL IS
* SET OFF LINE.
HNU BSS 0 ENTRY
TTADD IT,0 READ TERMINAL TABLE ENTRY
CRD DP
LDD DP SET OFF LINE
LPC 3777
LMC 4000
STD DP
TTADD IT,1
CRD TW
LDD TT REPLACE INITIAL THINK TIME
LPC 7600
ADD TI
STD TT
TTADD IT,0
CWD DP
LDD DP CHECK SESSION STATUS
SHN 21-12
MJN HNU1 IF END OF SESSIONS
LDD LD
STD CK SET *LOGOUT DELAY* AS *LOGIN DELAY*
TTADD IT,0
CWD DP REPLACE TERMINAL TABLE ENTRY
TTADD IT,2 CLEAR LINE FEED
CRD CM
LDD CM
LPC 3777
STD CM
TTADD IT,2
CWD CM
LDC LGI SET LOGIN
STM TOCA,IT
LJM RTCX RETURN
HNU1 SOD AT DECREMENT ACTIVE TERMINAL COUNT
LDC OFL2 SET OFF LINE
LJM RTC3 RETURN
INI SPACE 4,25
** INI - INITIATE INPUT.
*
* ENTRY UPLINE DATA TO BE INITIATED.
* (IT) = INPUT TERMINAL.
*
* EXIT OUTPUT PROCESSOR SET IN *TOCA*.
* INPUT TYPING SPEED SET IF LOGIN IN PROCESS.
*
* USES DP - DP+4.
*
* CALLS HNU.
*
* MACROS TTADD.
INI BSS 0 ENTRY
TTADD IT,0
CRD DP
LDD DP
SHN -12
LMN 3
ZJP INI2 IF END OF SCRIPT HAS BEEN REACHED
LDM TOCA,IT
LMC LGI5
NJN INI1 IF LOGIN NOT IN PROCESS
TTADD IT,1
CRD TW
LDD IS SET INPUT TYPING SPEED FOR DATA RATE
STD RT
STD CK
TTADD IT,0
CWD DP
LDC WTC SET WRITE CHARACTER
STM TOCA,IT
LJM RTCX
INI1 LDC TTD SET THINK TIME
STM TOCA,IT
LJM RTCX RETURN
INI2 LDC MSGG SET INTERNAL ERROR STATUS
STM STMB
LDC LDNI+1
STM STMA
LDD IT SET TERMINAL NUMBER IN MESSAGE
SHN -6
RJM C2D CONVERT DIGITS
STM MSGH
LDD IT
RJM C2D CONVERT DIGITS
STM MSGH+1
LJM HNU HANG UP PHONE
TITLE COMMON SUBROUTINES.
ETM SPACE 4,10
** ETM - ENTER TIME.
*
* ENTRY (LS) = LAST SECOND CLOCK.
* (LM) = LAST MILLESECOND CLOCK.
*
* EXIT TIME STAMP SET ON DATA.
*
* CALLS SDC.
ETM SUBR ENTRY/EXIT
LDD LS ENTER LAST SECOND CLOCK
LPC 1777
LMC 6000 SET TIME FLAG FOR *DEMUX*
RJM SDC STORE TIME BYTE
LDD LM ENTER MILLISECONDS
LPC 1777
LMC 4000 SET TIME FLAG
RJM SDC STORE MS TIME BYTE
UJN ETMX RETURN
SAA SPACE 4,10
** SAA - SET ABSOLUTE ADDRESSES.
*
* EXIT ABSOLUTE ADDRESSES SET IN *SDW*.
*
* USES T1 - T2, CM - CM+4.
SAA SUBR ENTRY/EXIT
LDC **
SAAA EQU *-1 (FET ADDRESS)
SHN 6
LMC ** (FET ADDRESS)
SAAB EQU *-1
ZJN SAAX IF NO OUTPUT RECOVERED
ADD RA SET IN POINTER ADDRESS
SHN 6
ADN 2
STD T2
STM .INA+1
SHN -14
STD T1
ADC LDCI
STM .INA
LDD T1
SHN 14
LMD T2
CRD IN READ IN
* PSN (AFTER FIRST ENTRY)
SAAC EQU *-1
SBN 1
CRD CM READ FIRST
LDD CM+3
LPN 37
SHN 14
ADD CM+4
SBN 1 ADJUST FOR IN ADVANCEMENT
STM .FT1+1
SHN -14
ADC LDCI
STM .FT1
LDD T1 READ LIMIT
SHN 14
LMD T2
ADN 2
CRD CM
LDD CM+3
LPN 37
SHN 6
ADD RA
SHN 6
ADD CM+4
SBN 1
STM .LM1+1
SHN -14
ADC LMCI
STM .LM1
LDD RA SET RA
SHN 6
STM .RA1+1
SHN -14
ADC ADCI
STM .RA1
LDC PSNI DISABLE READ OF IN
STM SAAC
LJM SAAX RETURN
SDC SPACE 4,20
** SDC - STORE DATA CHARACTER.
*
* ENTRY (A) = CHARACTER.
* (T7) = TERMINAL NUMBER.
*
* EXIT DATA WORD IN *TTER* UPDATED WITH CHARACTER.
*
* USES T1, CM - CM+4.
*
* CALLS SDW.
*
* NOTES *SDC* USES THE DATA WORD (FOURTH WORD OF
* THE *TTER* ENTRY) AS A TEMPORARY BUFFER FOR
* OUTPUT. ONCE THIS WORD IS FULL, *SDC* IS CALLED
* TO ENTER IT INTO THE OUTPUT BUFFER.
SDC SUBR ENTRY/EXIT
STD T1 SAVE CHARACTER
LDN 1 (NO OUTPUT RECOVERY)
* LDN 0 (OUTPUT RECOVERY)
SDCA EQU *-1
NJN SDCX IF NO OUTPUT RECOVERY
TTADD T7,3 READ TERMINAL TABLE ENTRY
CRD CM
AOD CM
LMN 4
ZJN SDC1 IF END OF WORD PACK
LDD T1
STM CM,CM
TTADD T7,3 WRITE TERMINAL TABLE ENTRY
CWD CM
LDD T1
NJN SDC2 IF NOT END OF SESSION
SDC1 RJM SDW
SDC2 UJN SDCX RETURN
SDW SPACE 4,20
** SDW - STORE DATA WORD.
*
* ENTRY (T7) = TERMINAL NUMBER.
* (T1) = CHARACTER.
* (IN - IN+4) = ADDRESS TO IN POINTER.
*
* EXIT DATA WORD WRITTEN TO FET BUFFER.
* IN POINTER UPDATED IN FET.
*
* USES IN+3, IN+4, CM - CM+4.
*
* CALLS DFM.
SDW SUBR ENTRY/EXIT
LDD T7 ENTER TERMINAL NUMBER
ADC **
SDWA EQU *-1 (TERMINAL BIAS)
STD CM
LDD T1 ENTER CHARACTER
STD CM+4
LDD IN+3 STORE DATA WORD
SHN 14
ADD IN+4
.RA1 ADC **
CWD CM
.LM1 LMC ** CHECK IN
NJN SDW1 IF IN .NE LIMIT-1
.FT1 LDC ** RESET IN = FIRST
STD IN+4
SHN -14
STD IN+3
SDW1 AOD IN+4 ADVANCE IN
SHN -14
ZJN SDW2
AOD IN+3
SDW2 BSS 0
.INA LDC ** UPDATE IN
CWD IN
ADN 1
CRD CM READ OUT
LDD IN+3
SBD CM+3 IN-OUT
SHN 14
ADD IN+4
SBD CM+4
NJN SDW3 IF IN IS NOT EQUAL TO OUT
LDC MSGC OVERFLOW MESSAGE
RJM DFM
SDW3 LDN ZERL
CRD CM
TTADD T7,3 CLEAR DATA WORD ENTRY
CWD CM CLEAR ACCUMULATOR WORD
LJM SDWX RETURN
TITLE INITIALIZATION.
PRS SPACE 4,20
** PRS - PRESET PROGRAM.
PRS3 LDN 0 CLEAR TERMINAL NUMBER
STD T1
LDD NT SET ACTIVE TERMINAL COUNT
STD AT
PRS4 LDC LGI ENTRY ADDRESS = LOGIN
STM TOCA,T1
TTADD T1,0
CRD CM
LDD CM CHECK DISABLED STATUS
SHN 21-12
PJN PRS5 IF TERMINAL ACTIVE
SOD AT DECREMENT ACTIVE TERMINAL COUNT
LDC OFL2 SET ENTRY ADDRESS OFF LINE
STM TOCA,T1
PRS5 AOD T1 ADVANCE TERMINAL NUMBER
LMD NT
NJN PRS4 IF NOT END OF TABLE
LDC RTCL READ REAL TIME CLOCK
CRD CM
LDD CM+4 SET LAST MILLISECOND COUNT
STM STMD SET PREVIOUS TIME
LDD RA READ *RA*
SHN 6
CRM RBUF,ON
* UJN PRSX RETURN
PRS SUBR ENTRY/EXIT
PAUSE NE
LDK NCPL CHECK *STIMULA* CONTROL POINT
CRD CM
LDD CM+1
SHN 7
LMD CP
ZJN PRS0 IF *STIMULA* AT LAST CONTROL POINT
LDC =C+ *STM* MUST BE AT LAST CP.+
LJM ABT ABORT
PRS0 RJM CTS CHECK *IAF* STATUS
LDD IR+3
LPN 37
STD IR+3
ADD IR+4
NJN PRS1 IF STIMULATION TO BE INITIATIED
RJM ICT INITIALIZE CONTROL TABLE
LJM DPP DROP PPU
PRS1 RJM ISC INITIALIZE STIMULATOR CHANNELS
LDD RA READ CONTROL WORD
SHN 6
ADN RACW
CRD CM
LDD CM SET NUMBER OF *TTER* ENTRIES
STM SADA
LDD CM+1 SET ACTIVATE COUNT
STD LC
LDD CM+2 SET THINK TIME INCREMENT MASK
LPN 77
RAM TTDA
LDD CM+4 SAVE REQUIRED FL
STM SCPA
LDD IR+3 READ CONTROL TABLE ENTRY
LPN 37
SHN 6
ADD RA
SHN 6
ADD IR+4
CRD TW
RJM SCP START CENTRAL PROGRAM
RJM IOR INITIALIZE OUTPUT RECOVERY
LDD TW+3 SET BASE TERMINAL TABLE ADDRESS
LPN 37
STD T3
LDD TW+4
STD T4
RJM SAD SET TERMINAL TABLE ADDRESSES
LDN 0 CLEAR OUTPUT CHARACTER
STD OC
STD IC CLEAR INPUT CHARACTER
STD MT MAXIMUM CYCLE TIME
STD LM LAST MILLISECOND CLOCK
STD LS LAST SECOND CLOCK
LDD NT INPUT TERMINAL = N-1
SBN 1
STD IT
ZJN PRS2 IF ONLY ONE TERMINAL
LDN 1
PRS2 STD OT SET OUTPUT TERMINAL NUMBER
LJM PRS3 INITIALIZE *TOCA*
TOCA SPACE 4,10
** TOCA - TABLE OF OUTPUT CONTROL ADDRESSES.
*
* ENTRY 1 WORD.
*
* ADDRESS OF CURRENT OUTPUT ROUTINE.
USE //
RBUF EQU 6000 *RA* BUFFER
TOCA EQU RBUF+5 OUTPUT PROCESSOR BUFFER
IBUF EQU TOCA+100 INPUT BUFFER
OBUF EQU IBUF+100 OUTPUT BUFFER
TBUF EQU OBUF+100 TRACE BUFFER
ERRNG 7776-TBUF-100*5 BUFFER OVERFLOW
ERRNG TOCA-PRSX-2 OVERFLOW INTO BUFFER
ABT SPACE 4,10
** ABT - ABORT JOB.
*
* ENTRY (A) = ERROR MESSAGE.
ABT RJM DFM ISSUE DAYFILE MESSAGE
MONITOR ABTM ABORT JOB
LJM PPR EXIT TO PP RESIDENT
CTS SPACE 4,15
** CTS - CHECK *IAF* STATUS.
*
* ENTRY NONE.
*
* EXIT (NT) = NUMBER OF TERMINALS.
* (DP) = STIMULATOR CHANNEL.
* TO *ABT* IF *IAF* NOT ACTIVE.
*
* USES T1, T2, CM - CM+4.
*
* MACROS SFA.
CTS5 LDC =C* IAF NOT ACTIVE.*
LJM ABT
CTS SUBR ENTRY/EXIT
LDN PPUL SET PPU COUNT
CRD CM
LDD CM+2
STD T1
LMN 10D
ZJN CTS1 IF ONLY 10 PPUS
LDN 20D
STD T1 SET 20 PPUS
CTS1 LDN PPCP SET START OF PPU COMMUNICATIONS AREA
CRD CM
LDD CM+4
STD T2
CTS2 SOD T1 DECREMENT PPU COUNT
ZJN CTS5 IF END OF PPU
LDN 10 ADVANCE INPUT REGISTER ADDRESS
RAD T2
CRD CM READ INPUT REGISTER
LDD CM+1 CHECK NAME
SCN 77
SHN 6
LMD CM
LMC 3RN1T
NJN CTS2 IF NOT *1TN*
CTS3 SFA EST,CM+2 READ STIMULATOR EST ENTRY
ADK EQDE
CRD CM
LDD CM+1 SET CHANNEL NUMBER
LPN 37
STD DP
LDD CM+4 SET PORT COUNT
LPC 777
NJN CTS4 IF PORTS SPECIFIED
LDD TH SET DEFAULT PORT COUNT
CTS4 STD NT
LJM CTSX RETURN
ICT SPACE 4,20
** ICT - INTIALIZE CONTROL TABLE.
*
* ENTRY (NT) = NUMBER OF TERMINALS.
*
* EXIT CONTROL TABLE BUILT STARTING AT (RA+5).
*
* USES CM - CM+4, T1 - T5.
ICT SUBR ENTRY/EXIT
LDN ZERL RETURN NUMBER OF TERMINALS
CRD CM
CRD T1
LDD NT
STD CM+1
LDD RA
SHN 6
ADN TCWD
CWD CM
ADN 1 SET END OF TABLE
CWD T1
LDN 1 SET NUMBER OF *TCWD* ENTRIES
STD T1+4
LDD RA
SHN 6
ADN RAPP
CWD T1
UJN ICTX RETURN
IOR SPACE 4,10
** IOR - INITIALIZE OUTPUT RECOVERY.
*
* ENTRY (TW - TW+4) = CONTROL TABLE ENTRY.
*
* EXIT FET ADDRESS SET IN *SAA*
*
* USES T1, T2.
IOR SUBR ENTRY/EXIT
LDD TW+3 SET ADDRESS OF IN
SCN 77
STM SAAA
SHN 6
LMD TW+2
STM SAAB
ZJN IORX IF NO OUTPUT RECOVERED
LDC IORA SET MODIFICATION TABLE
STD T1
IOR1 LDI T1 SET ADDRESS
ZJN IOR2 IF END OF TABLE
STD T2
AOD T1
LDI T1
STI T2
AOD T1
UJN IOR1 LOOP TO END OF TABLE
IOR2 LDD TW SET TERMINAL BIAS
LPC 3777
STM SDWA
LJM IORX RETURN
IORA BSS 0
CON SDCA
LDN 0
CON ESDA
LDN 0
CON 0 END OF TABLE
ISC SPACE 4,20
** ISC - INITIALIZE STIMULATOR CHANNELS.
*
* ENTRY (DP) = CHANNEL NUMBER.
*
* EXIT CHANNEL INSTRUCTIONS MODIFIED.
*
* USES T1, T2.
*
* MACROS CHTL.
ISC SUBR ENTRY/EXIT
LDC TCHS SET FWA OF CHANNEL TABLE
STD T1
ISC1 LDI T1
STD T2
LDD DP
CHTL *
SBN CH
ZJN ISCX RETURN IF ALL INSTRUCTIONS MODIFIED
RAI T2 MODIFY INSTRUCTION
AOD T1
UJN ISC1 LOOP FOR ALL INSTRUCTIONS
TCHS CHTB
RQS SPACE 4,20
** RQS - REQUEST STORAGE.
*
* ENTRY (A) = STORAGE REQUEST.
*
* EXIT STIMULATOR FIELD LENGTH ADJUSTED.
* TO *ABT* IF ERROR.
*
* USES T1, T2, CM - CM+4.
*
* MACROS MONITOR, PAUSE.
RQS3 LDC =C*MEMORY REQUEST ERROR.*
LJM ABT
RQS SUBR ENTRY/EXIT
STD T1 SAVE REQUEST
LDD IR+3 CHECK OUTPUT RECOVERY
SCN 77
ADD IR+2
ZJN RQS1 IF NOT SET
LDD NT
RQS1 ADD NT COMPUTE LAST WORD TO BE WRITTEN
ADD NT
ADD NT
STD T2
LDD IR+3
LPN 37
SHN 14
ADD IR+4
ADD T2
ADN 77
SHN -6
SBD T1
ZJN RQS2 IF ENOUGH ROOM
PJN RQS3 IF NOT ENOUGH ROOM FOR WRITES
RQS2 LDD T1 REQUEST STORAGE
STD CM+1
LDN 0 SET CM REQUEST
STD CM+2
MONITOR RSTM
LDD FL CHECK FIELD LENGTH
LMD T1
NJN RQS2 IF REQUEST REJECTED
LJM RQSX RETURN
SCP SPACE 4,20
** SCP - START CENTRAL PROGRAM.
*
* ENTRY (SCPA) = FL REQUIRED FOR STIMULATION.
* (TW - TW+4) = CONTROL WORD FROM *TCWD*.
*
* EXIT FL SET.
* CPU PROGRAM STARTED IF OUTPUT TO BE RECOVERED.
* REMAINING COPIES OF STIMULATION DRIVER CALLED.
* TO *DPP* IF ERROR FLAG SET AT CONTROL POINT.
*
* USES CM - CM+4, T1 - T1+4.
*
* CALLS DFM, RQS.
*
* MACROS CHTE, MONITOR, PAUSE.
*
* NOTES *SCP* IS RESPONSIBLE FOR STARTING THE CPU
* IF OUTPUT IS TO BE RECOVERED.
SCP SUBR ENTRY/EXIT
LDD IR+3
SHN 14
LMD IR+4
LMN TCWD
NJN SCPX IF NOT FIRST COPY OF *1TS*
LDN 0
STD CM+1
MONITOR DCPM CLEAR CPU STATUS
LDC * (REQUIRED FL)
SCPA EQU *-1
RJM RQS REQUEST STORAGE
LDC =C* STIMULATION INITIATED.*
RJM DFM
* START CPU IF OUTPUT IS TO BE RECOVERED.
LDD TW+3
SCN 77
ADD TW+2
ZJN SCP1 IF CENTRAL PROGRAM NOT NEEDED
LDD CP READ EXCHANGE PACKAGE
CRD CM
LDC STMO SET (P)
STD CM+1
SHN -14
STD CM
LDD CP
CWD CM
MONITOR RCPM REQUEST CPU
SCP1 LJM SCPX RETURN
SAD SPACE 4,10
** SAD - SET ADDRESSES.
*
* ENTRY (T3 - T4) = BASE ADDRESS FOR *TTER*.
*
* EXIT TABLE ADDRESS SET.
*
* USES T1, T2, T3, T4, T5.
SAD SUBR ENTRY/EXIT
LDC SADB
STD T1
SAD1 LDI T1 SET NEXT TABLE ADDRESS
ZJN SADX IF NO MORE TABLES
STD T2
SAD2 LDI T2
NJN SAD3 IF NOT END OF TABLE
LDC * (NUMBER OF *TTER* ENTRIES)
SADA EQU *-1
RAD T4
SHN -14
RAD T3
AOD T1
UJN SAD1 PROCESS NEXT TABLE
SAD3 STD T5
LDD T3 SET TABLE ENTRY ADDRESS
RAI T5
LDD T4
RAM 1,T5
AOD T2
UJN SAD2 LOOP
SADB BSS 0
CON TTE0 *TTER* WORD 0 ADDRESS
CON TTE1 *TTER* WORD 1 ADDRESSES
CON TTE2 *TTER* WORD 2 ADDRESSES
CON TTE3 *TTER* WORD 3 ADDRESSES
CON TTE4 *TTER* WORD 4 ADDRESSES
CON 0 END OF TABLE
SPACE 4,10
** INITIALIZATION TABLES.
TTE0 BSS 0
TTE0 HERE
CON 0
TTE1 BSS 0
TTE1 HERE
CON 0
TTE2 BSS 0
TTE2 HERE
CON 0
TTE3 BSS 0
TTE3 HERE
CON 0
TTE4 BSS 0
TTE4 HERE
CON 0
SPACE 4
END