IDENT CPUMTR
ENTRY CPUMTR
SST PPR,FL,TH,T1,T2,T3,RA
B1=1
LIST F
*COMMENT CPUMTR - CPU MONITOR.
COMMENT COPYRIGHT CONTROL DATA SYSTEMS INC. 1992.
TITLE CPUMTR - CPU MONITOR.
SPACE 4
*** CPUMTR - CPU MONITOR.
* G. R. MANSFIELD. 70/12/13.
* W. E. GOEBEL. 76/01/21.
* P. T. BARNETT. 80/10/31.
SPACE 4
*** *CPUMTR* WORKS IN CONJUNCTION WITH *MTR* TO DO
* THE FOLLOWING TASKS -
*
* 1) SCHEDULE THE CPU AMONG ELIGIBLE JOBS AT CONTROL POINTS.
* 2) PERFORM REQUESTED OPERATIONS BY PP-S
* (MONITOR FUNCTIONS ABOVE *CPUM*).
* 3) PERFORM REQUESTED OPERATIONS BY JOBS RUNNING AT
* CONTROL POINTS (RA+1 REQUESTS).
* 4) PERFORM REQUESTED OPERATIONS BY *MTR*
* (STORAGE MOVE, ETC.)
* 5) PERFORM DATA TRANSFERS FOR BUFFERED MASS STORAGE DEVICES
* (REFER TO THE *CPUCIO* BLOCK FOR AN EXPLANATION OF THE
* PSEUDO-PP).
*
* *CPUMTR* CODE RUNS IN BOTH MONITOR AND PROGRAM MODE. THE
* CODE USED IN EITHER MODE IS MOSTLY SEPARATE, BUT IN CERTAIN
* RARE CASES, CODE IS SHARED BETWEEN THE TWO. IN BOTH CASES,
* THE CODE EXECUTES AT AN RA OF 0, AND AN FL OF MACHINE FIELD
* LENGTH, GIVING *CPUMTR* FULL ACCESS TO ALL OF CM (AND ECS).
*
* MONITOR MODE CODE EXECUTION IS LIMITED TO FUNCTIONS THAT CAN
* BE DONE QUICKLY OR REQUIRE INTERLOCKING. PROGRAM MODE
* CODE IS USED FOR PROCESSING FUNCTIONS THAT POTENTIALLY CAN
* TAKE A LONG TIME (SUCH AS STORAGE MOVE). PROGRAM MODE
* *CPUMTR* RUNS AT CONTROL POINT N+1, AND HAS A CPU PRIORITY
* OF 100B, HIGHER THAN ANY OTHER JOB IN THE SYSTEM.
SPACE 4,10
** IMPLEMENTATION NOTES.
*
* *CPUMTR* IS LOADED AND RELOCATED BY *CPUMLD*.
* *CPUMLD* SUPPORTS ONLY THE COMMONLY USED LOADER TABLES,
* INCLUDING 3400 (PIDL), 3600 (ENTR), 4000 (TEXT),
* 4100 (XFILL), 4200 (FILL), 4600 (XFER), AND 7700 (PRFX)
* LOADER TABLES. LOADER TABLES SUCH AS 3700 (XTEXT),
* 4300 (REPL), 4400 (LINK), 4500 (XLINK), AND
* 4700 (XREPL) ARE NOT SUPPORTED BY *CPUMLD*.
* SINCE *BSSZ* INSTRUCTIONS OF 6 OR MORE WORDS GENERATE
* *REPL* TABLES, USE OF *CON* OR *BSS* INSTRUCTIONS
* ARE RECOMMENDED AS AN ALTERNATIVE.
*
* DUE TO THE DEFINITION OF A *CON* INSTRUCTION IN
* COMPASS 3.0, DATA INSTRUCTIONS CONTAINING RELOCATABLE
* ADDRESSES SHOULD USE ONLY THE *VFD* INSTRUCTION.
SPACE 4
**** ASSEMBLY CONSTANTS.
NPPCP EQU LREC-1 MAXIMUM NUMBER OF PP-S TO A CP
RSHF EQU 12 SHIFT COUNT TO MOVE RA FIELD
OF FLSW TO LOWER BITS
RMSK EQU 24 FIELD WIDTH OF RA IN CONTROL POINT AREA
MCUR EQU 40B MAXIMUM CONSECUTIVE UNIT RESERVE COUNT
SDUD EQU 100 UNABLE TO RELEASE WRITE ACCESS DELAY (MS)
SDWD EQU 100 DEVICE WRITE ACCESS REQUESTED DELAY (MS)
SDMD EQU 4 *MTE* WAIT DELAY FOR WRITE ACCESS (MS)
****
SPACE 4
*CALL COMCMAC
*CALL COMSACC
*CALL COMSCIO
*CALL COMSDFS
QUAL DSL
*CALL COMSDSL
QUAL *
DSCP EQU /DSL/DSCP DEADSTART CONTROL POINT
QUAL DST
*CALL COMSDST
QUAL *
*CALL COMSEJT
*CALL COMSJCE
*CALL COMSLSD
*CALL COMSMMF
*CALL COMSMRT
*CALL COMSMSP
QUAL MTX
*CALL COMSMTX
QUAL *
QUAL PFM
*CALL COMSPFM
QUAL *
*CALL COMSREM
*CALL COMSPRD
*CALL COMSSCD
*CALL COMSSSD
LIST X
*CALL COMSHIO
*CALL COMSMSC
*CALL COMSLFD
*CALL COMSSCP
LIST *
*CALL COMSSRU
QUAL DSL
*CALL COMSDSL
QUAL *
LIST X
*CALL COMS176
*CALL COMSCPS
*CALL COMSMTR
LIST *
TITLE MACRO DEFINITIONS.
NOREF .1,.2,.3
BLOCK SPACE 4,20
** BLOCK - DEFINE AN OPTIONAL BLOCK OF CPUMTR CODE.
*
*
* BLOCK NAME,(TTLE),Q
* ENTRY *NAME* = NAME OF BLOCK.
* *TTLE* = DESCRIPTION TO APPEAR ON TITLE LINE FOLLOWING
* *CPUMTR - CPU MONITOR *
* *Q* = QUAL TO BE USED FOR BLOCK IF OTHER THAN *NAME*.
PURGMAC BLOCK
BLOCK MACRO NAME,TTLE,Q
_NAME TTL CPUMTR - CPU MONITOR _TTLE
TITLE
QUAL Q NAME
NOREF .1,.2,.3
USE /_NAME/
USE /TREL/
CON 0
VFD 42/0L_NAME,18/0
USE *
USE /TJMP/
CON 0
VFD 42/0L_NAME,18/0
USE *
ENDM
BSSZ SPACE 4,10
** BSSZ - REDEFINE *BSSZ* PSEUDO INSTRUCTION.
*
* THE REDEFINED *BSSZ* PSEUDO INSTRUCTION WILL ISSUE AN
* ASSEMBLY ERROR IF THE RESULTING BINARY CANNOT BE LOADED
* BY *CPUMLD*.
BSSZ. OPSYN BSSZ SAVE OLD DEFINITION
PURGMAC BSSZ
BSSZ MACRO EXP
BSSZ. EXP
ERRPL EXP-6 *CPUMLD* CANNOT LOAD THIS *CPUMTR*
BSSZ ENDM
CFI SPACE 4,10
** CXI XJ,TAB - CONVERT A TABLE ORDINAL TO AN OFFSET.
*
* CXI XJ,TAB
*
* CONVERT THE ORDINAL FOR TABLE *TAB* IN *XJ* INTO AN OFFSET
* IN *XI*. *XI* AND *XJ* MUST BE DIFFERENT REGISTERS. THE
* VALUE OF *XJ* IS PRESERVED.
PURGDEF CXX,Q
CXX,Q OPDEF I,J,TAB
ERRPL TAB_E-21B TABLE ENTRY TOO LONG
ERRZR I-J REGISTERS MUST BE DIFFERENT
.1 OCTMIC TAB_E
.A".1" SKIP
.A0 ENDIF
ERR TABLE ENTRIES ARE DEFINED AS ZERO LENGTH
.B SKIP
.A1 ENDIF
BX.I X.J
.B SKIP
.A2 ENDIF
LX.I X.J,B1
.B SKIP
.A3 ENDIF
LX.I X.J,B1
IX.I X.I+X.J
.B SKIP
.A4 ENDIF
BX.I X.J
LX.I 2
.B SKIP
.A5 ENDIF
BX.I X.J
LX.I 2
IX.I X.I+X.J
.B SKIP
.A6 ENDIF
LX.I X.J,B1
IX.I X.I+X.J
LX.I 1
.B SKIP
.A7 ENDIF
BX.I X.J
LX.I 3
IX.I X.I-X.J
.B SKIP
.A10 ENDIF
BX.I X.J
LX.I 3
.B SKIP
.A11 ENDIF
BX.I X.J
LX.I 3
IX.I X.I+X.J
.B SKIP
.A12 ENDIF
BX.I X.J
LX.I 2
IX.I X.I+X.J
LX.I 1
.B SKIP
.A13 ENDIF
BX.I X.J
LX.I 2
IX.I X.I+X.J
LX.I 1
IX.I X.I+X.J
.B SKIP
.A14 ENDIF
BX.I X.J
LX.I 1
IX.I X.I+X.J
LX.I 2
.B SKIP
.A15 ENDIF
BX.I X.J
LX.I 1
IX.I X.I+X.J
LX.I 2
IX.I X.I+X.J
.B SKIP
.A16 ENDIF
BX.I X.J
LX.I 3
IX.I X.I-X.J
LX.I 1
.B SKIP
.A17 ENDIF
BX.I X.J
LX.I 4
IX.I X.I-X.J
.B SKIP
.A20 ENDIF
BX.I X.J
LX.I 4
.B ENDIF
ENDM
ENDBLK SPACE 4,10
** ENDBLK - END AN OPTIONAL BLOCK OF CPUMTR CODE.
*
PURGMAC ENDBLK
ENDBLK MACRO
BSS 0
USE *
QUAL
ENDM
IDIV SPACE 4,10
** IXI XJ/XK - INTEGER DIVISION.
*
* IXI XJ/XK
* DIVIDE XJ BY XK TO XI.
* DESTROYS XJ, XK, B7.
PURGDEF IXX/X
IXX/X OPDEF I,J,K
PX.J X.J
PX.K X.K
NX.K X.K
FX.I X.J/X.K
UX.I B7,X.I
LX.I X.I,B7
ENDM
MONITOR SPACE 4,10
** MONITOR - ISSUE PSEUDO OUTPUT REGISTER *CPUMTR* FUNCTION.
*
* MONITOR FC,RAD
* WHERE FC = *CPUMTR* FUNCTION CODE.
* RAD = RETURN ADDRESS, OPTIONAL IF RETURN TO NEXT
* LOCATION AFTER MONITOR CALL.
*
* CALLS /BUFIO/IMF.
PURGMAC MONITOR
MONITOR MACRO FC,RAD
LOCAL MRA
IFC NE,$_RAD$B6$,1
SB6 RAD MRA
SX1 FC
EQ /BUFIO/IMF ISSUE MONITOR FUNCTION
MRA BSS 0
ENDM
ICTE SPACE 4,10
** ICTE - INTERNAL CIO FUNCTION CODE TABLE ENTRY.
*
* ICTE FC,(FLAGS)
*
* FC INTERNAL CIO FUNCTION (DEFINED IN *COMSCIO*).
*
* FLAGS FUNCTION FLAGS.
* BKW = BACKWARD OPERATION.
* CRW = *READCW*/*WRITECW* OPERATION.
* EOF = EOF OPERATION - STOP ON EOF FOR READ/SKIP,
* FLUSH EOF FOR WRITE OPERATION.
* EOI = EOI OPERATION - STOP ON EOI FOR READ/SKIP,
* FLUSH DATA FROM BUFFER FOR WRITE OPERATION.
* EOR - EOR OPERATION - STOP OF EOR FOR READ/SKIP,
* FLUSH EOR FOR WRITE OPERATION.
* EXF = FUNCTION LEGAL FOR EXECUTE-ONLY FILE.
* IOF = REWIND OPERATION (SET IN = OUT = FIRST).
* LST = *READLS*/*RPHRLS* OPERATION.
* MSO = MASS STORAGE ONLY FUNCTION.
* MTO = MAGNETIC TAPE ONLY FUNCTION.
* NDT = NO DEVICE TYPE RETURNED TO FET.
* NRW = *READN*/*WRITEN* OPERATION.
* PRU = PRU OPERATION - STOP ON PRU FOR READ/SKIP,
* FLUSH ONLY ONE FULL PRU FOR WRITE.
* RFE = FUNCTION REQUIRES FNT ENTRY.
* RWO = REWRITE OPERATION.
* SKO = SKIP OPERATION.
* UNL = UNLOAD OPERATION.
* VFL = VALIDATE FIRST AND LIMIT FET PARAMETERS.
* VIO = VALIDATE IN AND OUT FET PARAMETERS.
* XF = EXTENDED FUNCTION LEGAL (3XX/6XX CIO CODE).
ICTE MACRO FC,FLAGS
LOCAL F,FG1,FG2
FG2 SET 0
.A IFC NE,$_FC$$
FG1 SET FC*100B
.B ECHO ,F=(FLAGS)
IFC EQ,$_F$BKW$,1
FG1 SET FG1+4000B
IFC EQ,$_F$CRW$,1
FG1 SET FG1+40B
IFC EQ,$_F$EOF$,1
FG1 SET FG1+EOF
IFC EQ,$_F$EOI$,1
FG1 SET FG1+EOI
IFC EQ,$_F$EOR$,1
FG1 SET FG1+EOR
IFC EQ,$_F$EXF$,1
FG2 SET FG2+100B
IFC EQ,$_F$IOF$,1
FG2 SET FG2+200B
IFC EQ,$_F$LST$,1
FG1 SET FG1+20B
IFC EQ,$_F$MSO$,1
FG2 SET FG2+2000B
IFC EQ,$_F$MTO$,1
FG2 SET FG2+1000B
IFC EQ,$_F$NDT$,1
FG2 SET FG2+40B
IFC EQ,$_F$NRW$,1
FG1 SET FG1+20B
IFC EQ,$_F$PRU$,1
FG1 SET FG1+PRU
IFC EQ,$_F$RFE$,1
FG2 SET FG2+400B
IFC EQ,$_F$RWO$,1
FG1 SET FG1+2000B
IFC EQ,$_F$SKO$,1
FG1 SET FG1+2000B
IFC EQ,$_F$UNL$,1
FG1 SET FG1+2000B
IFC EQ,$_F$VFL$,1
FG1 SET FG1+1
IFC EQ,$_F$VIO$,1
FG1 SET FG1+2
IFC EQ,$_F$XF$,1
FG2 SET FG2+4000B
.B ENDD
.A ELSE
FG1 SET 7777B
.A ENDIF
VFD 12/FG1,12/FG2,6/0
ENDM
JSNMASK SPACE 4,20
** JSNMASK - DEFINE CHARACTER MASK FOR ONE CHARACTER OF JSN.
*
*
* JSNMASK LO,HI,EX
* ENTRY *LO* = LOWEST CHARACTER TO APPEAR IN THIS POSITION.
* *HI* = HIGHEST CHARACTER TO APPEAR IN THIS POSITION.
* *EX* = CHARACTERS TO BE EXCLUDED FROM THIS POSITION.
PURGMAC JSNMASK
JSNMASK MACRO LO,HI,EX
IFC EQ,$LO$$
.1 DECMIC 1RA DEFAULT LOWEST CHARACTER
ELSE
ERRNG 1R_LO-1RA VALUE IS TOO LOW
.1 DECMIC 1R_LO LOWEST CHARACTER ALLOWABLE
ENDIF
IFC EQ,$HI$$
.2 DECMIC 1RZ DEFAULT HIGHEST CHARACTER
ELSE
ERRNG 1R9-1R_HI VALUE IS TOO HIGH
.2 DECMIC 1R_HI HIGHEST CHARACTER ALLOWABLE
ENDIF
.2 DECMIC ".2"+1 BIT FOR HIGHEST CHARACTER + 1
.3 MICRO 1,, -0-1S".2"+1S".1"
ECHO 4,CH=(EX) CHARACTERS TO EXCLUDE
IFGE 1R_CH,".1",3
IFLT 1R_CH,".2",2
.4 DECMIC 1R_CH
.3 MICRO 1,, ".3"+1S".4"
VFD 60/".3" EXCLUDED CHARACTER MASK
ENDM
PER SPACE 4,10
** PER - SET ECS PARITY ERROR PROCESSING PARAMETERS.
*
*
* PER X,PROC
* ENTRY *X* = EXIT ADDRESS IN CASE OF UNRECOVERABLE ERROR.
* *PROC* = EXTENDED MEMORY ERROR PROCESSOR.
* IF PROC IS NOT DEFINED THEN EITHER /ECS/PER OR
* /PROGRAM/PER IS USED AS THE PROCESSOR DEPENDING ON
* IF THE CALL IS FROM ECS OR PROGRAM QUAL BLOCK.
PURGMAC PER
PER MACRO X,PROC
LOCAL A
QUAL ECS
A EQU *+1
QUAL *
RJ PROC PER
TPER RMT
VFD 12/,18/A,12/,18/X
TPER RMT
ENDM
TVFD SPACE 4,25
** TVFD - DEFINE RELOCATABLE -VFD-.
*
*
* TVFD N/V,V1,C1,V2,C2,V3,C3,V4,C4,V5,C5,V6
* ENTRY *N* = BIT COUNT
* *V* = BASE VALUE TO WHICH A *VI* WILL BE ADDED.
* IF *C1* IS NOT PRESENT
* *V1* = ADDRESS OF VALUE TO BE ADDED DURING PRESET.
* IF *C1* IS PRESENT THEN
* *VI* = THE VALUE TO BE ADDED DURING PRESET, IF THE
* CORRESPONDING *CI* IS TRUE.
* *CI* = THE ADDRESS OF THE CONDITION WORD IN PRESET
* WHICH TELLS IF THE CORRESPONDING VALUE IS TO BE
* BE USED. IF THE CONDITION WORD IS ZERO, THE
* CORRESPONDING VALUE WILL BE USED. THE *CI*S ARE
* CHECKED IN ORDER, FROM LEFT TO RIGHT, UNTIL A
* TRUE CONDITION IS FOUND. IF NONE OF THE
* CONDITIONS ARE TRUE, *VN* IS USED.
* *VN* = THE DEFAULT VALUE TO BE SET DURING PRESET.
* IT IS THE LAST VALUE SPECIFIED AND MUST NOT
* HAVE A CONDITION ASSOCIATED WITH IT.
PURGMAC TVFD
TVFD MACRO V,V1,C1,V2,C2,V3,C3,V4,C4,V5,C5,V6
LOCAL S
* EXTRACT FIELD WIDTH
.1 MICRO 1,,/V
.1 MICCNT .1
* CHECK FOR RELOCATION REQUIRED
.2 MICRO .1+2,, V
.A IFC EQ,$V1$$
VFD ".1"/".2"
.A ELSE
VFD ".1"/S+".2"
S SAC ".1",V1,C1,V2,C2,V3,C3,V4,C4,V5,C5,V6
IF -DEF,S,1
ERRNZ ".2" 0 V MUST BE ZERO IN A CONDITIONAL *VFD*
.A ENDIF
ENDM
SAC SPACE 4,40
** SAC - SUBSTITUTE ADDRESS CONSTANT.
*
*
* THERE ARE TWO FORMS OF THE *SAC* MACRO. IF TWO PARAMETERS
* ARE SPECIFIED, *SAC* CAUSES A PRESET DETERMINED VALUE TO BE
* ADDED TO A SPECIFIED FIELD. IF MORE THAN TWO PARAMETERS ARE
* SECIFIED, *SAC* CAUSES A SPECIFIED VALUE TO BE SUBSTITUTED
* INTO THE FIELD ACCORDING TO A PRESET DETERMINED CONDITION.
*
* SAC W,V
*
* ENTRY *W* = FIELD WIDTH.
*
* *V* = ADDRESS OF WORD IN PRESET WHOSE VALUE WILL BE
* ADDED TO THE SPECIFIED FIELD.
*
* SAC W,V1,C1,V2,C2,V3,C3,V4,C4,V5,C5,V6
*
* ENTRY *W* = FIELD WIDTH.
*
* *VI* = THE VALUE TO BE SUBSTITUTED INTO THE SPECIFIED
* FIELD DURING PRESET, IF THE CORRESPONDING *CI*
* IS TRUE.
*
* *CI* = THE ADDRESS OF THE CONDITION WORD IN PRESET
* WHICH TELLS IF THE CORRESPONDING VALUE IS TO BE
* BE USED. IF THE CONDITION WORD IS NON-ZERO
* (THE CONDITION IS TRUE), THE CORRESPONDING
* VALUE WILL BE USED. THE *CI*S ARE CHECKED IN
* ORDER, FROM LEFT TO RIGHT, UNTIL A TRUE
* CONDITION IS FOUND. IF NONE OF THE CONDITIONS
* ARE TRUE, *VN* IS USED.
*
* *VN* = THE DEFAULT VALUE TO BE SET DURING PRESET.
* IT IS THE LAST VALUE SPECIFIED AND MUST NOT
* HAVE A CONDITION ASSOCIATED WITH IT.
PURGMAC SAC
MACRO SAC,S,W,V1,C1,V2,C2,V3,C3,V4,C4,V5,C5,V6
LOCAL N
QUAL PRESET
.1 SET *-*P/60
.2 SET W+*P-*P/60*60
USE /TREL/
.A IFC EQ,$C1$$
.3 MICRO 1,1,$V1$
.B IFC NE,$".3"$-$
+ VFD 6/.2,6/W,18/V1,12/2000B,18/.1
.B ELSE
.3 MICRO 2,,$V1$
+ VFD 6/.2,6/W,18/".3",12/-2000B,18/.1
.B ENDIF
.A ELSE
+ VFD 6/.2,6/W,18/C1,12/2000B+N,18/.1
.B IFLE W,24D
+ JP V1 FIRST ALTERNATE
- JP V6 V5 V4 V3 V2 V1
.1 SET 1
.D ECHO ,V=(V2,V3,V4,V5,V6),C=(C2,C3,C4,C5,)
.E IFC NE,$C$$
+ JP V NEXT ALTERNATE
- VFD 30/C
.1 SET .1+1
.E ELSE
STOPDUP
IFC EQ,$V$$,1
ERR NO DEFAULT HAS BEEN SPECIFIED
.E ENDIF
.D ENDD
N EQU .1
.B ELSE
+ VFD 30/V1 ALTERNATE
- VFD 30/V2 DEFAULT
N EQU 1
.B ENDIF
.A ENDIF
.A IFC NE,$S$$
.B IFC EQ,$C1$$
QUAL
S EQU 0
QUAL *
.B ELSE
SAC RMT
QUAL
S EQU V1
QUAL *
RMT
.B ENDIF
.A ENDIF
USE *
QUAL *
ENDM
OPDEFS SPACE 4
** CONDITIONAL ADDRESS SETTING.
*
* THE CAPABILITY EXISTS TO PRESET THE ADDRESS PORTION OF AN
* INSTRUCTION TO A VALUE DETERMINED DURING DEADSTART OR TO ONE
* OF SEVERAL VALUES DEPENDING ON A *CONDITION* WORD IN THE
* PRESET RELOCATION TABLE.
* IN ORDER TO SET THE ADDRESS PORTION CONDITIONALLY A MACRO
* MUST BE WRITTEN WHICH CALLS THE *SAC* MACRO TO SET THE
* ADDRESS PORTION OF THE INSTRUCTIONS.
*
* AN EXTENSIVE SET OF OPDEFS IS AVAILABLE FOR UNCONDITIONALLY
* PRESETTING THE SET INSTRUCTIONS. THERE ARE MANY FORMS OF THE
* INSTRUCTIONS DEFINED. SOME EXAMPLES ARE -
*
* TA2 MS2W,SCA
* TX3 B7+FLSW,TAG
*
* THE RESULTING INSTRUCTIONS AFTER PRESET WOULD BE -
* SA2 MS2W + CONTENTS OF */PRESET/SCA*
* SX3 B7+FLSW + CONTENTS OF */PRESET/TAG*
*
* IN MOST CASES THE FIRST PARAMETER CAN BE A CONSTANT, A
* REGISTER, THEIR SUM OR DIFFERENCE, OR OMITTED ALTOGETHER.
* THE SECOND PARAMETER (OR ONLY PARAMETER) IS PASSED TO THE
* *SAC* MACRO. REFER TO ITS DOCUMENTATION FOR THE POSSIBLE
* OPTIONS.
*
* A SMALLER COLLECTION OF MACROS PERMITS THE CONDITIONAL
* PRESETTING OF SET INSTRUCTIONS. ANY OR ALL OF THE PARAMETERS
* MAY CONTAIN A VALUE, A B-REGISTER, OR THEIR SUM.
*
* TSX0 (B3+OFFSET,CONDITION,TAG)
*
* THE RESULTING INSTRUCTION AFTER PRESET WOULD BE -
* SX0 B3+OFFSET IF CONDITION PRESENT
* SX0 TAG IF CONDITION NOT PRESENT
TAQ OPDEF I,L
SA.I 0
SAC 18,L
ENDM
PURGDEF TBQ
TBQ OPDEF I,L
SB.I 0
SAC 18,L
ENDM
TXQ OPDEF I,L
SX.I 0
SAC 18,L
ENDM
TAQ,Q OPDEF I,K,L
SA.I K
SAC 18,L
ENDM
TBQ,Q OPDEF I,K,L
SB.I K
SAC 18,L
ENDM
TXQ,Q OPDEF I,K,L
SX.I K
SAC 18,L
ENDM
TAAQ,Q OPDEF I,J,K,L
SA.I A.J+K
SAC 18,L
ENDM
TBAQ,Q OPDEF I,J,K,L
SB.I A.J+K
SAC 18,L
ENDM
TXAQ,Q OPDEF I,J,K,L
SX.I A.J+K
SAC 18,L
ENDM
TABQ,Q OPDEF I,J,K,L
SA.I B.J+K
SAC 18,L
ENDM
TBBQ,Q OPDEF I,J,K,L
SB.I B.J+K
SAC 18,L
ENDM
TXBQ,Q OPDEF I,J,K,L
SX.I B.J+K
SAC 18,L
ENDM
TAXQ,Q OPDEF I,J,K,L
SA.I X.J+K
SAC 18,L
ENDM
TBXQ,Q OPDEF I,J,K,L
SB.I X.J+K
SAC 18,L
ENDM
TXXQ,Q OPDEF I,J,K,L
SX.I X.J+K
SAC 18,L
ENDM
TAA,Q OPDEF I,J,L
SA.I A.J+0
SAC 18,L
ENDM
TBA,Q OPDEF I,J,L
SB.I A.J+0
SAC 18,L
ENDM
TXA,Q OPDEF I,J,L
SX.I A.J+0
SAC 18,L
ENDM
TAB,Q OPDEF I,J,L
SA.I B.J+0
SAC 18,L
ENDM
TBB,Q OPDEF I,J,L
SB.I B.J+0
SAC 18,L
ENDM
TXB,Q OPDEF I,J,L
SX.I B.J+0
SAC 18,L
ENDM
TAX,Q OPDEF I,J,L
SA.I X.J+0
SAC 18,L
ENDM
TBX,Q OPDEF I,J,L
SB.I X.J+0
SAC 18,L
ENDM
TXX,Q OPDEF I,J,L
SX.I X.J+0
SAC 18,L
ENDM
OPDEFS SPACE 4,10
** THE FOLLOWING *ECHO* PSEUDO-OP DEFINES A SET OF MACROS THAT
* PERMITS THE REGISTERS IN THE LIST TO BE SET WITH CONDITIONAL
* VALUES.
ECHO ,R=(A1,A2,A3,B3,B4,B6,X0,X1,X2,X3,X4,X5,X6,X7)
PURGMAC TS_R
TS_R MACRO L,M THE *M* SHOULD BE REMOVED LATER
LOCAL T
S_R T+B0
IFC NE,$M$$,4 THIS IS TRANSITIONAL CODE **
IFEQ L,0,1 **
T SAC 21,M "TWOPARS" "SEQNO" **
ELSE 1 **
T SAC 21,L
ENDM
ENDD
OPDEFS SPACE 4
** JUMP MACROS.
*
* A FULL SET OF MACROS IS AVAILABLE FOR THE JUMP INSTRUCTIONS.
* THE FORM OF A CONDITIONAL JUMP INSTRUCTION IS AS FOLLOWS.
*
* TNZ X4,(/ISD/SUB3,ISD,/LSPMMF/SUB2,MMF,/MONITOR/PPRX)
*
* THE RESULTING INSTRUCTION AFTER PRESET WOULD BE -
* NZ X4,/ISD/SUB3 JUMP TO SUB3 IF ISD PRESENT
* NZ X4,/LSPMMF/SUB2 JUMP TO SUB2 IF MMF PRESENT
* NZ X4,/MONITOR/PPRX OTHERWISE JUMP TO PPRX
*
* ANY OR ALL OF THE PARAMETERS OF A *TJP* INSTRUCTION MAY ALSO
* CONTAIN A REGISTER OR A REGISTER PLUS OFFSET. THE PARAMETERS
* MAY BE ANY ALLOWED ON THE *JP* INSTRUCTION.
*
* TJP (/PROGRAM/TAG1,MMF,/MONITOR/HNG1)
*
* THE RESULTING INSTRUCTION AFTER PRESET WOULD BE -
* JP 0+/PROGRAM/TAG1 JUMP TO TAG1 IF MMF PRESENT
* JP 0+/MONITOR/HNG1 JUMP TO HNG1 IF MMF NOT PRESENT
TJP MACRO L,M THE *M* SHOULD BE REMOVED LATER
LOCAL S
JP S
IFC NE,$M$$,4 THIS IS TRANSITIONAL CODE **
0 ERR *TJP* CAN HAVE ONLY ONE PARAMETER **
IFEQ L,0,1 **
S SAC 24,M **
ELSE 1 **
S SAC 24,L
ENDM
TEQ MACRO L
LOCAL S
EQ S
S SAC 18,L
ENDM
TGE MACRO J,K,L
LOCAL S
.1 MICRO 1,, J
.2 MICRO 1,, K
GE ".1",".2",S
S SAC 18,L
ENDM
TGT MACRO J,K,L
LOCAL S
.1 MICRO 1,, J
.2 MICRO 1,, K
GT ".1",".2",S
S SAC 18,L
ENDM
TZR MACRO J,L
LOCAL S
.1 MICRO 1,, J
ZR ".1",S
S SAC 18,L
ENDM
TNZ MACRO J,L
LOCAL S
.1 MICRO 1,, J
NZ ".1",S
S SAC 18,L
ENDM
TPL MACRO J,L
LOCAL S
.1 MICRO 1,, J
PL ".1",S
S SAC 18,L
ENDM
TNG MACRO J,L
LOCAL S
.1 MICRO 1,, J
NG ".1",S
S SAC 18,L
ENDM
OPDEFS SPACE 4,10
* THIS INSTRUCTION IS A CONDITIONAL NO-OP.
* IF THE CONDITION WORD *C* IS NON-ZERO, AN *EQ* TO
* THE SPECIFIED ADDRESS (*L*) IS ENTERED INTO THIS
* LOCATION AT PRESET TIME. OTHERWISE, A *SB0 46000B*
* IS ENTERED, MAKING THE INSTRUCTION A NO-OP.
TNO MACRO L,C
.1 SET *P
.A IFEQ .1,15
NO
.A ENDIF
VFD 30/0400000000B+L
SAC 30,0400000000B+L,C,6100046000B
ENDM
OPDEFS SPACE 4,10
* THIS INSTRUCTION IS A CONDITIONAL NO-OP.
* IF THE CONDITION WORD *C* IS NONZERO, A *NZ B5*
* TO THE SPECIFIED ADDRESS (*L*) IS ENTERED INTO THIS
* LOCATION AT PRESET TIME. OTHERWISE, A *SB0 46000B*
* IS ENTERED, MAKING THE INSTRUCTION A NO-OP.
TNZB5 MACRO L,C
.1 SET *P
.A IFEQ .1,15
NO
.A ENDIF
NZ B5,L
SAC 30,0550000000B+L,C,6100046000B
ENDM
OPDEFS SPACE 4,10
* THESE MACROS PERMIT SETTING THE COUNT IN A SHIFT OR MASK
* INSTRUCTION. THE FORM OF THESE INSTRUCTIONS IS IDENTICAL TO
* THE OTHER CONDITIONAL INSTRUCTIONS.
*
* WHEN USING THE *TAX*, *TLX*, OR *TMX* MACROS IN THE FORM
*
* TLX1 (M,N,CONDITION)
*
* MAKE SURE THAT *M* AND *N* ARE POSITIVE. FOR EXAMPLE
* *TLX0 (-6,0,ESM)* SHOULD BE *TLX0 (60-6,0,ESM)*.
ECHO ,R=(0,1,2,3,4,5,6,7)
TAX_R MACRO J,L
LOCAL S
IFC EQ,*L**,3
AX_R S
S SAC 6,J
ELSE 4
AX_R J
S SAC 6,L
IF -DEF,S,1
ERR ONLY ONE PARAMETER IS PERMITTED ON A CONDITIONAL SHIFT
ENDM
ENDD
ECHO ,R=(0,1,2,3,4,5,6,7)
TLX_R MACRO J,L
LOCAL S
IFC EQ,*L**,3
LX_R S
S SAC 6,J
ELSE 4
LX_R J
S SAC 6,L
IF -DEF,S,1
ERR ONLY ONE PARAMETER IS PERMITTED ON A CONDITIONAL SHIFT
ENDM
ENDD
TMX3 MACRO L
LOCAL S
MX3 S
S SAC 6,L
ENDM
CME SPACE 4,10
** THE FOLLOWING MACROS DEFINE INSTRUCTIONS FOR
* READING AND WRITING CENTRAL MEMORY. THESE INSTRUCTIONS
* SHOULD BE USED WHEN ADDRESSING A USER-S FIELD LENGTH,
* OR FOR ANY ADDRESSING OUTSIDE LOW CORE. THESE
* INSTRUCTIONS ARE MODIFIED AT PRESET TIME TO USE
* THE STANDARD *SAI XJ* OPCODE IF RUNNING ON A MAINFRAME
* WITH UP TO 262K OF CENTRAL MEMORY. OTHERWISE, IT IS
* SET TO A NEW OPCODE THAT ALLOWS ADDRESSING OF ADDRESSES
* LARGER THAN 18 BITS. NOTE THAT THE SAME CONVENTIONS
* FOR REGISTER USAGE (I.E. 1,2,3,4,5 FOR READING CM;
* 6,7 FOR WRITING CM) STILL EXIST FOR CODE THAT CAN
* RUN IN EITHER MODE.
ERRMC MACRO
.A IF -DEF,CME$
ERR INVALID OP-CODE
.A ENDIF
ENDM
EXREAD MACRO I,J
.1 MICRO 1,1, J
.A IFC NE,$".1"$X$
ERR ILLEGAL SOURCE OPERAND
.A ENDIF
.2 MICRO 2,2, J
VFD 15/660_I_".2"B
SAC 15,660_I_".2"B,CME,53_I_".2"0B
ENDM
EXWRIT MACRO I,J
.1 MICRO 1,1, J
.A IFC NE,$".1"$X$
ERR ILLEGAL SOURCE OPERAND
.A ENDIF
.2 MICRO 2,2, J
VFD 15/670_I_".2"B
SAC 15,670_I_".2"B,CME,53_I_".2"0B
ENDM
ERX0 MACRO J
ERRMC
EXREAD 0,J
ENDM
ERX1 MACRO J
EXREAD 1,J
ENDM
ERX2 MACRO J
EXREAD 2,J
ENDM
ERX3 MACRO J
EXREAD 3,J
ENDM
ERX4 MACRO J
EXREAD 4,J
ENDM
ERX5 MACRO J
EXREAD 5,J
ENDM
ERX6 MACRO J
ERRMC
EXREAD 6,J
ENDM
ERX7 MACRO J
ERRMC
EXREAD 7,J
ENDM
EWX0 MACRO J
ERRMC
EXWRIT 0,J
ENDM
EWX1 MACRO J
ERRMC
EXWRIT 1,J
ENDM
EWX2 MACRO J
ERRMC
EXWRIT 2,J
ENDM
EWX3 MACRO J
ERRMC
EXWRIT 3,J
ENDM
EWX4 MACRO J
ERRMC
EXWRIT 4,J
ENDM
EWX5 MACRO J
ERRMC
EXWRIT 5,J
ENDM
EWX6 MACRO J
EXWRIT 6,J
ENDM
EWX7 MACRO J
EXWRIT 7,J
ENDM
SPACE 4,10
** THE FOLLOWING OPDEF GENERATES AN 016 INSTRUCTION TO READ THE
* FREE RUNNING COUNTER TO THE SPECIFIED X REGISTER ON A 180
* MACHINE. ON OTHER MACHINES A *BXI XI-XI* INSRUCTION IS
* GENERATED TO SET THE X REGISTER TO 0.
RCX OPDEF P1
VFD 9/016B,3/P1,3/0
SAC 15,016_P1_0B,CME,13_P1_P1_P1_B
ENDM
SPACE 4,10
** DEFINE OPCODES.
* TRAP INSTRUCTION.
RTX,Q OPDEF P1,K
+ VFD 9/017B,3/P1,18/K,30/0
ENDM
* INVALIDATE CACHE.
*
* P1 = 1/ F,59/ ADDR.
* F = CENTRAL MEMORY/EXTENDED MEMORY INDICATOR (0 IF CM).
* ADDR = RAC/RAE (RAC IF *F* = 0).
* P2 = BLOCK LENGTH.
* K = EI SUBFUNCTION (703B TO INVALIDATE SELECTED CACHE;
* 40000B TO INVALIDATE ALL CACHE ON THE OTHER CPU).
ICX,X,Q OPDEF P1,P2,K
+ VFD 9/017B,3/P1,3/P2,15/K,30/0
ENDM
OPDEFS SPACE 4,10
* TIC - CONDITIONALLY INVALIDATE CACHE.
*
* THIS INSTRUCTION IS A CONDITIONAL NO-OP. IF THE CONDITION
* WORD *C* IS NONZERO, AN *IC 40000B* INSTRUCTION (WHICH
* INVALIDATES ALL CACHE ON THE OTHER CPU) IS ENTERED INTO
* THIS LOCATION AT PRESET TIME. OTHERWISE, TWO *SB0 46000B*
* INSTRUCTIONS ARE ENTERED, MAKING THIS WORD A NO-OP.
*
* NOTE - WHEN UPDATING A SEQUENCE OF WORDS TERMINATING IN AN
* INTERLOCK WORD, THIS INSTRUCTION IS NORMALLY ISSUED JUST
* BEFORE THE LAST WRITE. SINCE THE CACHE INVALIDATE
* OPERATION TIES UP THE OTHER CPU FOR 5 MICROSECONDS (ON A
* 960), THIS SEQUENCE OF INSTRUCTIONS ALLOWS THE FINAL WRITE
* TO PROCEED IN PARALLEL WITH THE PURGE. THIS MINIMIZES
* CACHE PURGE OVERHEAD WHILE STILL ENSURING DATA INTEGRITY.
TIC MACRO C
+ VFD 30/0170040000B *IC 40000B*
SAC 30,0170040000B,C,6100046000B
VFD 30/0
SAC 30,0,C,6100046000B
ENDM
EXP SPACE 4
** EXP - GENERATE EXCHANGE PACKAGE.
PURGMAC EXP
EXP MACROE P,A0,B0,RA,A1,B1,FL,A2,B2,EM,A3,B3,RAX,A4,B4,FLX,A5,B5,
,MA,A6,B6,EA,A7,B7,X0,X1,X2,X3,X4,X5,X6,X7
LOCAL A
MACREF EXP
A BSS 0
+ VFD 24/P
VFD 18/A0
VFD 18/B0
+ VFD 24/RA
VFD 18/A1
VFD 18/B1
+ TVFD 24/FL
TVFD 18/A2
VFD 18/B2
IFC EQ,$EM$$
+ TVFD 12/0,EEMC+60B,CP176,EEMC
ELSE
TVFD 12/EM
ENDIF
VFD 12/
TVFD 18/A3
VFD 18/B3
+ VFD 3/
TVFD 21/RAX
TVFD 18/A4
VFD 18/B4
+ TVFD 24/FLX
TVFD 18/A5
VFD 18/B5
+ VFD 6/
TVFD 18/MA
TVFD 18/A6
VFD 18/B6
+ VFD 6/
IFC EQ,$EA$$,2
TVFD 18/0,EEAD
ELSE 1
TVFD 18/EA
TVFD 18/A7
VFD 18/B7
+ VFD 60/X0
VFD 60/X1
VFD 60/X2
VFD 60/X3
VFD 60/X4
VFD 60/X5
VFD 60/X6
VFD 60/X7
ENDM
MNR SPACE 4
*** MNR - GENERATE PPU MONITOR PROGRAM MODE FUNCTION TABLE ENTRY.
*
*
* MNR FCN,A
* ENTRY *FCN* = FUNCTION CODE NAME.
* *A* = ENTRY ADDRESS.
PURGMAC MNR
MNR MACRO FCN,A
MACREF MNR
LOC FCN
BSS 0
ORG TMNR+FCN
VFD 42/
IFC NE,*A**
TVFD 18/,A
ELSE 1
VFD 18//PROGRAM/.FCN
USE *
.FCN BSS 0
ENDM
PMN SPACE 4
** PMN - GENERATE PPU MONITOR FUNCTION TABLE ENTRY.
*
*
* PMN FCN,A
* ENTRY *FCN* = FUNCTION CODE NAME.
* *A* = ENTRY ADDRESS.
PURGMAC PMN
PMN MACRO FCN,A
MACREF PMN
LOC FCN
BSS 0
ORG TPMN-1+FCN
VFD 42/
.1 SET 0
IRP A
.1 SET .1+1
IRP
IFEQ .1,0,1
VFD 18//MONITOR/.FCN
IFEQ .1,1,1
VFD 18//MONITOR/A
IFGT .1,1,1
TVFD 18/,A
USE *
.FCN BSS 0
ENDM
PPR SPACE 4,30
** PPR - GENERATE PPU REQUEST PROCESSOR TABLE ENTRY.
*
*
* PPR FCN,MON,PRG,SCP
* ENTRY *FCN* = FUNCTION CODE NUMBER.
* *MON* = MONITOR MODE PROCESSOR.
* *PRG* = PROGRAM MODE PROCESSOR.
* *SCP* = *DCP*, DROP CPU OPERATION NEEDS ACTIVE CPU.
* *SCP* = *FEX*, FAST EXIT WITHOUT FULL PARAMETER SETUP.
* ACTIVE CPU CHECK IS NOT MADE WITH *FEX* OPTION.
*
* THE *MON* AND *PRG* ADDRESSES MAY BE CONDITIONAL
* VALUES THAT ARE SET DURING PRESET. THEY ARE SPECIFIED
* IDENTICALLY TO THE WAY CONDITIONAL ADDRESSES ARE
* SPECIFIED IN THE CONDITIONAL JUMP MACROES.
* FOR EXAMPLE THE FOLLOWING INSTRUCTION SETS THE
* MONITOR MODE PROCESSOR ADDRESS TO EITHER /MMF/IAU
* OR /0MMF/IAU DEPENDING ON THE PRESENCE OF MMF.
*
* PPR IAUM,(/MMF/IAU,/0MMF/IAU,MMF)
*
* THE CORRECT ENTRY ADDRESS IS SET DEPENDING IN THIS CASE
* UPON THE PRESENCE OF THE MMF BLOCK.
*
* NOTE CPUMTR PROGRAM MODE FUNCTIONS MUST ALWAYS
* BE PROCESSED IN THE SAME CPU, THAT IS CPU-0
* IF BOTH CPU-S ARE AVAILABLE.
PURGMAC PPR
PPR MACRO FCN,A,B,C
MACREF PPR
LOC FCN
BSS 0
IFC NE,*B**,3
IFC NE,*C**,2
IFC NE,*C*FEX*,1
ERR PROGRAM MODE/CPU SELECTION CONFLICT
ORG TPPR+FCN-CPUM
.2 SET 0
IFC EQ,*C*FEX*,1
.2 SET 4000B
IFC EQ,*C*DCP*,1
.2 SET 2000B
VFD 12/.2
.1 SET 0
IRP B
.1 SET .1+1
IRP
IFEQ .1,0,1
VFD 18//PROGRAM/HNG
IFEQ .1,1,1
VFD 18//PROGRAM/B
IFGT .1,1,1
TVFD 18/,B
VFD 12/0
.1 SET 0
IRP A
.1 SET .1+1
IRP
IFEQ .1,0,1
VFD 18//MONITOR/.FCN
IFEQ .1,1,1
VFD 18//MONITOR/A
IFGT .1,1,1
TVFD 18/,A
USE *
.FCN BSS 0
PPR ENDM
SFMACRO SPACE 4,25
** SFMACRO - DEFINE THE MACRO TO BUILD A SUBFUNCTION TABLE.
*
* F SFMACRO PIF,OPT,BIAS
*
* *SFMACRO* DEFINES A MACRO (NAMED BY THE *F* PARAMETER) THAT
* WILL BUILD SUBFUNCTION TABLE ENTRIES THAT ARE PACKED TWO PER
* WORD. IF *PAIRED* IS SPECIFIED, THERE IS AN ENTRY FOR EVERY
* TWO CONSECUTIVE SUBFUNCTION CODES. EACH ENTRY CONSISTS OF AN
* ADDRESS IN THE LOWER 18 BITS OF THE WORD AND AN OPTION CODE
* PACKED INTO THE UPPER 12 BITS OF THE WORD. WHEN OPTIONS ARE
* ALLOWED, THEIR CODES AND VALUES ARE SPECIFIED BY THE *OPT*
* PARAMETER. THE SECOND ENTRY IS CORRECTLY POSITIONED IN THE
* WORD. THE FIRST ENTRY IS POSITIONED BY LEFT SHIFTING THE
* WORD BY 30 BITS.
*
* F = FIRST THREE CHARACTERS OF MONITOR FUNCTION NAME.
* PIF = PAIRED/INDIVIDUAL FLAG.
* = *INDIVIDUAL*, IF THERE IS ONE SUBFUNCTION PER ENTRY.
* = *PAIRED*, IF THERE ARE TWO SUBFUNCTIONS PER ENTRY.
* OPT = AN OPTIONAL LIST OF OPTIONS TO BE ALLOWED FOR EACH
* ENTRY. (O=X,P=Y,Q=Z,...)
* O,P,Q = 1 OR 2 CHARACTER OPTION CODES.
* X,Y,Z = THE VALUE TO BE USED WHEN CODE IS SPECIFIED.
* OPTIONS ARE ADDED TOGETHER WHEN MORE THAN ONE IS USED.
* BIAS = NUMBER OF THE FIRST SUBFUNCTION (DEFAULT = 0).
PURGMAC SFMACRO
MACRO SFMACRO,F,PIF,OPT,BIAS
.A IFC EQ,/PIF/INDIVIDUAL/
.1 MICRO 1,,$*$ DELETE PAIRED-ONLY LINES
.A ELSE
IFC NE,/PIF/PAIRED/,1
ERR PARAMETER MUST BE *INDIVIDUAL* OR *PAIRED*
.1 MICRO 0,,$$ INCLUDE PAIRED-ONLY LINES
.A ENDIF
.A IFC EQ,/OPT//
.2 MICRO 1,,$*$ DELETE OPTION-ONLY LINES
.A ELSE
.2 MICRO 0,,$$ INCLUDE OPTION-ONLY LINES
.A ENDIF
F SFMACR0 ".1",".2",OPT,BIAS
ENDM
SFMACR0 SPACE 4,15
** SFMACR0 - THE REAL MACRO THAT DOES THE WORK OF *SFMACRO*.
*
* F SFMACR0 PIF,OPF,OPT,BIAS
*
* F = FIRST THREE CHARACTERS OF MONITOR FUNCTION NAME.
* PIF = PAIRED/INDIVIDUAL FLAG.
* = *INDIVIDUAL*, IF THERE IS ONE SUBFUNCTION PER ENTRY.
* = *PAIRED*, IF THERE ARE TWO SUBFUNCTIONS PER ENTRY.
* OPF = OPTIONS FLAG.
* = -*-, IF OPTIONS MAY BE SPECIFIED FOR THE SUBFUNCTIONS.
* = NULL, IF OPTIONS ARE NOT USED.
* OPT = SAME AS *SFMACRO* PARAMETER.
* BIAS = SAME AS *SFMACRO* PARAMETER.
PURGMAC SFMACR0
MACRO SFMACR0,F,PIF,OPF,OPT,BIAS
.A IFC EQ,/PIF/*/
.1 MICRO 0,,$$ OMIT *SF2* PARAMETER
.A ELSE
.B IFC EQ,/PIF//
.1 MICRO 1,,$SF2,$ INCLUDE *SF2* PARAMETER
.B ELSE
ERR PAIRED FLAG MUST BE -*- OR OMITTED
.B ENDIF
.A ENDIF
.A IFC EQ,/OPF//
.1 MICRO 1,,$".1"OP,$ INCLUDE *OP* PARAMETER
IRP OPT DEFINE OPTION CODES
.4 MICRO 1,,=OPT= GET MNEMONIC
.4 MICCNT .4
.5 MICRO .4+2,,$OPT$ GET VALUE
.F_M.".4" EQU ".5"
IRP
.A ELSE
.B IFC NE,/OPF/*/
ERR OPTIONS FLAG MUST BE -*- OR OMITTED
.B ENDIF
.A ENDIF
PURGMAC F
F MACRO SF1,".1"BLOCK
.6 SET SF1
PIF .6 SET SF1/2
.7 SET 0_BIAS/2
PIF .7 SET 0_BIAS/4
ERRNZ T_F+.6-.6/2-.7-*O SUBFUNCTION OUT OF ORDER
.6 MICRO 1,17,$/MONITOR/.F_M_SF1$
PIF ERRNZ SF1/2*2-SF1 FIRST SUBFUNCTION MUST BE EVEN
PIF IFC NE,/SF2//,3
PIF .7 MICRO 1,17,$/MONITOR/.F_M_SF2$
PIF ERRNZ SF1*1+1-SF2 SUBFUNCTIONS MUST BE CONSECUTIVE
PIF ERRNZ ".6"-".7" SUBFUNCTIONS NOT DEFINED ON SAME *SUBFUN*
ORG T1
LOC SF1
VFD 18/".6"
.8 SET 2000B
OPF IRP OP
OPF .8 SET .8+.F_M.OP OP IS AN UNDEFINED OPTION
OPF IRP
.C IFEQ .6,.6/2*2 IF FIRST ENTRY IN WORD
ORG T_F+.6/2-.7
VFD 12/..SF1_NO,18/".6"
.D IFC NE,$BLOCK$$
SAC 18,".6",BLOCK,/MONITOR/HNG1
.D ENDIF
VFD 12/.8,18/..SF1_NA
.8 MICRO 1,, ..SF1
..SF1_NO OCTMIC 4000B
..SF1_NA MICRO 1,,$/MONITOR/HNG1$
RMT
..SF1_NO EQU "..SF1_NO"B
..SF1_NA EQU "..SF1_NA"
RMT
.C ELSE
ORG T_F+.6/2-.7+1
".8"NO OCTMIC .8
".8"NA MICRO 1,,$".6"$
.D IFC NE,$BLOCK$$
SAC 18,".6",BLOCK,/MONITOR/HNG1
.D ENDIF
.C ENDIF
ENDM
SFMACRO ENDM
SUBFUN SPACE 4,15
** SUBFUN - DEFINE SUBFUNCTION PROCESSOR.
*
* SFA SUBFUN FNC,(SFN)
* ENTRY SFA = SUBFUNCTION PROCESSOR ENTRY NAME.
* FNC = FUNCTION NAME.
* SFN = ONE OR MORE SUBFUNCTION NAMES.
*
* THIS MACRO DEFINES A SYMBOL, QUALIFIED BY *MONITOR*, FOR EACH
* SUBFUNCTION IN THE LIST. THE SYMBOL NAME IS *.FNCSFN*,
* TRUNCATED TO 8 CHARACTERS. IT IS SET TO THE ADDRESS OF THE
* PROCESSOR.
PURGMAC SUBFUN
MACRO SUBFUN,SFA,FNC,SFN
SFA BSS 0
QUAL MONITOR
IRP SFN
.1 MICRO 1,8,$.FNC_SFN$
".1" BSS 0
IRP
QUAL *
ENDM
RUE SPACE 4,10
** RUE - READ USER ECS.
*
* RUE MODE
*
* ENTRY *MODE* = *MONITOR* IF CALLED FROM MONITOR MODE,
* OTHERWISE CALLED FROM PROGRAM MODE.
* (A0) = CM ADDRESS.
* (B4) = WORD COUNT TO READ FROM USER ECS.
* (B6) = RETURN ADDRESS.
* (X0) = 30/ CM ADDRESS, 30/ ECS ADDRESS.
*
* USES A - 2, 3, 6, 7, IF */SUE/RUM* ROUTINE CALLED.
*
* CALLS /SUE/RUM, IF SIMULTANEOUS UEM/ESM DEFINED.
RUE MACRO MODE
LOCAL S
+ VFD 12/0400B
SAC 12,0400B,SUE,0114B
VFD 18/S
.A IFC EQ,*MODE*MONITOR*
S SAC 18,/SUE/RUM1,SUE,000000B
.A ELSE
S SAC 18,/SUE/RUM,SUE,000000B
.A ENDIF
ENDM
WUE SPACE 4,10
** WUE - WRITE USER ECS.
*
* WUE MODE
*
* ENTRY *MODE* = *MONITOR* IF CALLED FROM MONITOR MODE,
* OTHERWISE CALLED FROM PROGRAM MODE.
* (A0) = CM ADDRESS.
* (B4) = WORD COUNT TO WRITE TO USER ECS.
* (B6) = RETURN ADDRESS.
* (X0) = 30/ CM ADDRESS, 30/ ECS ADDRESS.
*
* USES A - 2, 3, 6, 7, IF */SUE/WUM* ROUTINE CALLED.
*
* CALLS /SUE/WUM, IF SIMULTANEOUS UEM/ESM DEFINED.
WUE MACRO MODE
LOCAL S
+ VFD 12/0400B
SAC 12,0400B,SUE,0124B
VFD 18/S
.A IFC EQ,*MODE*MONITOR*
S SAC 18,/SUE/WUM1,SUE,000000B
.A ELSE
S SAC 18,/SUE/WUM,SUE,000000B
.A ENDIF
ENDM
SPACE 4,10
* DEFINE *QUAL* ORDER IN CROSS REFERENCE.
QUAL MONITOR
QUAL PROGRAM
QUAL PRESET
QUAL
TITLE TABLES.
TMNR SPACE 4,10
** NOTE - THE FOLLOWING TABLES *TMNR*, *TPMN*, AND *TPPR*
* MUST BE CONTIGOUS AND THE UPPER FOUR BITS OF THE ENTRIES
* IN THE FIRST TWO TABLES MUST BE 0 DUE TO CODE IN ROUTINE
* */MONITOR/PPR*.
** TMNR - TABLE OF *MTR* PROGRAM MODE REQUEST PROCESSORS.
* ENTRY 1 WORD.
*
* INDEXED BY *MTR* PROGRAM MODE FUNCTION.
*
*T 4/0,38/,18/ ADDR
*
* ADDR ADDRESS OF PROCESSOR.
QUAL PROGRAM
USE TMNR
TMNR BSS 0
DUP PMXF,1
VFD 42/0,18//PROGRAM/HNG
USE *
QUAL *
TPMN SPACE 4,10
** TPMN - PPU MONITOR REQUESTS.
* ENTRY = 1 WORD.
*
* INDEXED BY PPU MONITOR FUNCTION.
*
*T 4/0,38/,18/ ADDR
*
* ADDR ADDRESS OF PROCESSOR.
USE TPMN
TPMN BSS 0
DUP MXPF-1,1
VFD 42/0,18//MONITOR/HNG
USE *
TPPR SPACE 4,10
** TPPR - PPU REQUEST TABLE.
* ENTRY = 1 WORD.
*
* INDEXED BY MONITOR FUNCTION.
*
*T 1/F,1/D,10/,18/ PRG,12/,18/ MTR
*
* F *SCP* = *FEX* SPECIFIED.
* D *SCP* = *DCP* SPECIFIED.
* PRG PROGRAM MODE PROCESSOR ADDRESS.
* MTR MONITOR MODE PROCESSOR ADDRESS.
USE TPPR
.1 SET CPUM-MXPF+1-PMXF
IFGT .1,0,2
DUP .1,1
VFD 42/0,18//MONITOR/HNG
TPPR BSS 0
DUP MXFM-CPUM,1
VFD 42/0,18//MONITOR/HNG
TPPRL BSS 0
USE *
TREL SPACE 4,10
** THE FOLLOWING DECLARATIONS ESTABLISH THE *TREL* USE BLOCK
* FOR THE *SAC* MACRO. *CPUMLD* LOADS THIS BLOCK (FOLLOWED
* BY THE *TBLK* BLOCK) AFTER ALL OTHER BLOCKS THAT ARE
* INCLUDED IN THE LOAD.
QUAL PRESET
USE /TREL/
REL BSS 0
USE *
QUAL *
TJMP SPACE 4,10
** ESTABLISH *TJMP* BLOCK
QUAL PRESET
USE /TJMP/
TJMP BSS 0
USE *
QUAL *
TITLE DATA.
DATA SPACE 4
ORG BSS 0
DATA SPACE 4
** *CPUMTR* LOW MEMORY LOCATIONS.
CL BSS 0
ORG CL+CBLP LOADED BLOCK TABLE POINTER
VFD 42/0,18//MONITOR/LBAT
ORG CL+CSXP SYSTEM CP EXCHANGE PACKAGE TABLE ADDRESS
VFD 42/0,18//MONITOR/MNRA
ORG CL+CXBP *EXPACS* BLOCK POINTER
VFD 42/0,18//MONITOR/MXP
ORG CL+CFPP FAST PP LOADER TABLE POINTERS
VFD 24/0,6//MONITOR/TPPIL,6//MONITOR/TFPLL,6/0,18//MONITOR/
,TFPL
ORG CL+CMST MONITOR MODE STATUS BY CPU
VFD 60/0
VFD 60/0
ORG CL+CPBT PROGRAM MODE BASE TIME BY CPU
CON 0
CON 0
ORG CL+CACX ALTERNATE CPU EXCHANGE REQUESTS BY CPU
CON 0
CON 0
ORG CL+CMTLL
QUAL MONITOR
PX SPACE 4
** PX - PROGRAM MODE EXIT REQUEST.
* (PX) IS SET FOR IN THE FOLLOWING CASES.
* (PX) = 1 INDICATES THAT PROGRAM MODE MONITOR IS COMPLETE.
* (PX) = -1 INDICATES A PP IS REQUESTED BY PROGRAM MODE MONITOR.
* (PX) = -2 INDICATES AN *MTR*-LIKE FUNCTION IS REQUESTED BY
* PROGRAM MODE MONITOR. (SEE *PMN*.)
PX CON 0 PROGRAM MODE EXIT REQUEST
PR SPACE 4
** PR - PROGRAM MODE REQUESTS.
* (PR) CONTAINS A STACK OF REQUESTS FOR PROGRAM MODE
* EXECUTION.
*
*T, PR 1/,11/ MF,20/ PF,1/ PS,27/
* MF *MTR* PROGRAM MODE REQUESTS.
* PF PP PROGRAM MODE REQUESTS.
* PS PSEUDO-PP REQUEST.
PR CON 0
SMPR SPACE 4,10
** SMPR - STORAGE MOVE PROGRAM REQUEST.
*
* WORD *SMPR* CONTAINS THE REQUEST FOR THE STORAGE MOVE
* (PROGRAM MODE) EXCHANGE PACKAGE. IT WILL CONTAIN EITHER
* *MSTF*+1 OR *MECF*+1, DEPENDING ON WHETHER THE CURRENT
* STORAGE MOVE REQUEST IS FOR CM OR ECS/ESM/UEM. IF NO
* REQUESTS ARE PENDING OR IN PROGRESS, THIS WORD WILL BE
* ZERO. NOTE THAT THIS MECHANISM CANNOT STACK REQUESTS.
SMPR CON 0,0
SMIN EQU SMPR+1 STORAGE MOVE INCREMENT
DD SPACE 4,10
** DD - INPUT REGISTER FOR DAYFILE DUMP PROCESSOR.
DD VFD 18/3L1DD,42/0
MP SPACE 4
** MP - INPUT REGISTER FOR MONITOR AUXILLARY PROCESSOR.
* USED FOR ASSIGNING THE MONITOR AUXILLARY PROCESSOR TO
* PROCESS REQUESTS FOR STORAGE INCREASES.
MP VFD 18/0L1MA,3/2,39/0
MT SPACE 4,10
** MT - MONITOR MODE TIME. (180 MACHINES).
MT CON 0,0 MONITOR MODE TIME BY CPU
SA SPACE 4,10
** SA - CPU SLICE TIME ACCUMULATED SINCE CPU SWITCH.
SA CON 0,0 SLICE TIME ACCUMULATED BY CPU
SPACE 4
** RC - RA+1 AUTO RECALL REQUEST.
RC VFD 24/0LRCLP,36/0
AM SPACE 4,10
** AM - ACTIVITY MASK FOR PP-S AND TAPE.
AM CON 00370000000000007760B
SPACE 4,10
** IP - INCREASE PRIORITY ON I/O COMPLETION.
*
* IP = 20, GIVES NEXT JOB STARTED EXTRA PRIORITY OVER
* EQUAL PRIORITY JOB. THIS IS SET BY
* *DPPM* AND *RCLM* FUNCTIONS.
*
* IP = 0, NO CHANGE IN PRIORITY.
IP CON 0
SPACE 4
** WT - *WQ* TERMINATOR.
*
* THE LAST ENTRY IN *WQ* POINTS TO THIS LOCATION.
WT VFD 12/2000B,48/0
TPRC SPACE 4,10
** PRIORITY CONTROL TABLE.
TPRC BSS 0
DUP MPRS+1,1
CON 0
SPACE 4,10
** THE FOLLOWING ARE USED FOR TEMPORARY STORAGE.
QUAL MONITOR
RA BSS 1 ADDRESS OF RA
RA1 BSS 1 ADDRESS OF RA+1
ERRNZ RA1-RA-1
T1 BSS 1
T2 BSS 1
T3 BSS 1
QUAL *
SPACE 4
**** THE FOLLOWING ARE CONSTANTS.
TH CON 0.001P48+1 .001
CON 1000.P 1000
TTH CON 0.0001P48+1 .0001
CON 10000.P 10000
HTH CON 0.0000001P48+1
****
TTL CPUMTR/MONITOR - MONITOR MODE EXECUTION.
TITLE MTR - MAIN PROGRAM.
MTR SPACE 4
** MONITOR MODE EXECUTION REGISTER USAGE.
*
* INVIOLATE USAGE.
*
* (A0) = CPU NUMBER (0 OR 1).
* (A5) = OUTPUT REGISTER ADDRESS FOR ALL ROUTINES THAT MAY HAVE
* BEEN ENTERED FROM A POOL PP EXCHANGE.
* (B1) = 1.
* (B2) = ADDRESS OF CALLER-S EXCHANGE PACKAGE.
* (B7) = CONTROL POINT ADDRESS.
*
* NOTE - CMU MAY NOT BE USED IN MONITOR MODE ON A DUAL CPU
* MACHINE WITH ONLY A SINGLE CMU BECAUSE THE CMU MAY BE IN
* USE ON THE OTHER CPU, CAUSING MONITOR MODE TO WAIT FOR THE
* CMU TO BECOME FREE.
*
* CONVENTIONS.
*
* (B3) = SUBROUTINE EXIT ADDRESS.
MTRX SPACE 4
** MTRX - MONITOR EXIT.
* THE FOLLOWING RULES MUST BE FOLLOWED ON EXIT -
*
* 1) ALL EXITS MUST CHECK FOR A POSSIBLE MODE ERROR THAT
* WAS IN PROCESS (HAD NOT GENERATED AN EXCHANGE) AT THE TIME
* OF THE EXCHANGE INTERRUPT. IF THIS IS NOT DONE MODE
* ERRORS WILL NOT BE PROCESSED CORRECTLY ON MACHINES SUCH
* AS THE CYBER 73.
*
* 2) ALL EXITS MUST SET (X0) = 0 AND BRANCH TO */NVE/XJ1*
* (IF PRESENT) IMMEDIATELY PRIOR TO THE *XJ*. THIS IS A
* MICROCODE REQUIREMENT.
*
* 3) ALL EXITS MUST CHECK FOR A CPU SWITCH REQUEST.
MTRC SA7 A5+ STORE OUTPUT REGISTER FOR PPU REQUEST
PPR1 EQU MTRC
EQ MTRX EXIT MONITOR MODE
MTRP SA1 RA1 ADDRESS OF RA+1
NO
EWX7 X1 SET RA+1
MTRX TNO /MONITOR/MTRX+1,NTRACE
*PPRX EQU MTRX
JP /TRACE/TRP CHECK FOR TRAP CONDITION
SA2 A0+CSWL CHECK FOR CPU SWITCH REQUEST
SA3 B2+ CHECK FOR MODE ERROR
NG X2,BNJ1 IF CPU SWITCH REQUEST
AX3 36+1 CHECK FOR P = 0 OR 1
SB4 XJ1 *CJS* RETURN ADDRESS
ZR X3,MTR2 IF MODE ERROR
XJ1 SX0 B0+
TNO /CME/XJ2,CME
XJ1.1 XJ B2 EXCHANGE TO PROGRAM
TNO /IH819/XJ2,IH819 CHECK STEP CONDITION
XJ2 SA1 CPSL
RC X3 GET MONITOR MODE START TIME IF 180 MACHINE
PX6 B0,X3
SA6 CL+CMST+A0 SET CPU CALL AND BASE TIME
NZ X1,MTR3 IF PP EXCHANGE REQUESTED
MTR SPACE 4
* ENTRY FROM CPU PROGRAM.
MTR SA2 B2+B1 SET RA
SX7 B1
TA5 20B,SP SET FAKE RA
AX2 36 RA
BX6 X2
IX7 X2+X7 RA+1
ERX5 X7 READ RA+1
SA6 RA STORE RA
SB3 A6 ADDRESS OF RA ADDRESS
SA7 A6+B1 STORE RA+1
ZR X2,MNR IF RA = 0, CHECK MONITOR REQUEST
NZ X5,CPR PROCESS CPU REQUEST IF (RA+1) " 0
TEQ (/MONITOR/PPE,CP176,/MONITOR/MTRX) CHECK MODE ERROR
* PROCESS MODE ERROR.
MTR2 SA1 CPAL+A0
SB6 B2 SET EXCHANGE PACKAGE ADDRESS
AX1 24
SB7 X1
JP CJS
* PROCESS PP PRIORITY EXCHANGE.
MTR3 SX6 B0 CLEAR EXCHANGE REQUESTED
SA6 A1
TA1 PRXS,SDA COUNT EXCHANGE REQUESTS
SA2 TSCL+A0
SX0 B1
IX6 X1+X0
AX2 48+3
SA6 A1
SX2 X2-LSCS-200B
PL X2,MTR IF SYSTEM PRIORITY
EQ SXS PLACE CONTROL POINT IN RECALL
MNR SPACE 4,10
** MNR - MONITOR REQUEST PROCESSING.
*
* THIS ROUTINE DOES THE START-UP AND EXIT PROCESSING FOR THE
* VARIOUS PROGRAM-MODE EXCHANGE PACKAGES CONTAINED WITHIN
* *CPUMTR*.
*
* ENTRY (X3) = MONITOR MODE START TIME IF 180 MACHINE.
MNR SA1 B2+CWQW GET EXCHANGE PACKAGE TYPE
MX2 -3
LX1 -18
BX1 -X2*X1 EXCHANGE PACKAGE TYPE
SA1 MNRA+X1 GET PROCESSOR ADDRESS
AX1 18 SHIFT TO PROCESSOR ADDRESS
SB4 X1
JP B4 JUMP TO PROCESSOR
* PROCESS EXIT FROM CONTROL POINT N+1.
MNR3 SB7 B2 SET CONTROL POINT ADDRESS
TNO /BUFIO/MNR,BUFIO IF BUFFERED I/O PRESENT
BX0 X0-X0
MNR4 SA1 PX PROGRAM MODE EXIT STATUS
SA2 PR PROGRAM MODE REQUESTS
BX7 X7-X7
SA7 A1 CLEAR EXIT STATUS
ZR X1,MTRX IF PROGRAM MODE NOT COMPLETE
SB3 X1+3
TNG X1,(/ISD/MNR5,ISD,/MONITOR/MNR5) IF REQUEST
ZR X2,BNJ IF NO MORE REQUESTS TO PROCESS
EQ MTRX RETURN TO PROGRAM MODE
* PROCESS PP REQUEST FROM CONTROL POINT N+1.
MNR5 SX1 B0+ PRESET RESPONSE
SB6 MNR6 *CAL* RETURN ADDRESS - NO LIMIT
SB3 MNR7 *CAL* RETURN ADDRESS - ACTIVITY LIMIT
EQ CAL CHECK ACTIVITY LIMIT
MNR6 SA2 B2+16B PARAMETER WORD IN (X6)
SA5 B2+17B PP CALL IN (X7)
SB4 -1
BX7 X2
BX6 X5
SA7 APQA
EQ APQ ASSIGN PP
MNR7 BX7 X1
SA7 A5-B1 RETURN STATUS IN (X6)
EQ MTRX RETURN
* PROCESS STORAGE MOVE EXIT PROCESSING.
MNR8 SA1 SMPR STORAGE MOVE REQUESTS
NZ X1,MTRX IF NOT YET COMPLETE, RETURN
EQ TSM TERMINATE STORAGE MOVE
* THE FOLLOWING TABLE MUST BE MAINTAINED IN THE ORDER OF THE
* PROGRAM MODE EXCHANGE PACKAGE TYPES DEFINED IN *COMSMTR*.
*
* ENTRY FORMAT -
*
* 24/ 0,18/ PROCESSOR ADDRESS,18/ EXCHANGE PACKAGE ADDRESS
MNRA VFD 24/0,18/MNR3 CONTROL POINT N+1
TVFD 18/0,SCA
VFD 24/0,18/MNR8,18//PROGRAM/SMPXP STORAGE MOVE XP
VFD 24/0 FIELD LENGTH VERIFICATION XP
TVFD 18/0,(/CME/MNR,CME,0)
TVFD 18/0,(/CME/VFLXP,CME,0)
VFD 24/0 PSEUDO-PP EXCHANGE PACKAGE
TVFD 18/0,(/BUFIO/MNR1,BUFIO,/MONITOR/MNR)
TVFD 18/0,(/BUFIO/CPP,BUFIO,0)
* ALL FOLLOWING ENTRIES WILL HANG *MNR*.
VFD 24/0,18/MNR,18/IXP CPU 0 IDLE PACKAGE XP
VFD 24/0,18/MNR CPU 1 IDLE PACKAGE XP
TVFD 18/0,(/DCP/IXP1,DCP,0)
VFD 24/0,18/MNR,18/0 ILLEGAL
VFD 24/0,18/MNR,18/0 ILLEGAL
CON 0 END OF TABLE
TITLE UTILITY SUBROUTINES.
APP SPACE 4
AAD SPACE 4
** AAD - APPLY ADDER INCREMENT TO SRU ACCUMULATOR.
*
* NEW SRU = AD (UNITS) + OLD SRU.
*
* ENTRY (X1) = INCREMENT (INTEGER FORMAT).
* (B3) = EXIT ADDRESS.
* (B4) = OVERFLOW FLAG.
*
* EXIT EXITS THRU ROUTINE *AIO* TO APPLY FINAL
* INCREMENT TO SRU ACCUMULATOR.
*
* USES X - 1, 2, 3, 6.
* A - 2, 3, 6.
AAD ZR X1,AIO2 IF NO INCREMENT
SX2 10000000/200B
IX1 X1*X2
LX1 7
EQ AIO1 (X1) = SRU INCREMENT
ACB SPACE 4,15
** ACB - ASSIGN COMMUNICATION BUFFER.
*
* *ACB* ALLOCATES A BUFFER FOR COMMUNICATION BETWEEN
* *CPUMTR* AND A PP. IT IS THE RESPONSIBILITY OF THE
* PP TO CLEAR THE FIRST WORD OF ITS ASSIGNED BUFFER
* WHEN COMPLETE. THIS *RETURNS* THE BUFFER TO THE
* SYSTEM FOR FURTHER USAGE. *CPUMTR* WILL NOT ASSIGN
* THE BUFFER TO ANYONE ELSE AS LONG AS THE FIRST WORD
* OF THE BUFFER IS NON-ZERO.
*
* ENTRY (B3) = RETURN ADDRESS.
* (B3) .LT. 0 IF RETURN TO */PROGRAM/APS1*.
*
* EXIT (X1) = ADDRESS OF BUFFER.
* (X1) = 0 IF NO BUFFER AVAILABLE.
*
* USES X - 1, 6.
* A - 1, 6.
ACB SX6 B0+ INITIALIZE BUFFER INDEX
ACB1 SX1 X6-MCBLL
ZR X1,ACB3 IF END OF BUFFER(S)
SX1 MCB+X6 ADDRESS OF BUFFER
SX6 X6+MCBL INCREMENT TO NEXT BUFFER
+ SA1 X1 **** PERFORM IN ONE WORD ****
NZ X1,ACB1 IF ASSIGNED **** PERFORM IN ONE WORD ****
SA6 A1 **** PERFORM IN ONE WORD ****
SX1 A1+ ADDRESS OF BUFFER
ACB2 NG B3,/PROGRAM/APS1 IF CALLED BY *APS*
JP B3 RETURN
ACB3 TA1 CBNS,SDA COUNT BUFFER NOT AVAILABLE
SX6 B1
IX6 X1+X6
SA6 A1
SX1 B0 SET BUFFER NOT AVAILABLE
EQ ACB2 RETURN
MCB SPACE 4,10
** MCB - MONITOR COMMUNICATION BUFFER(S).
*
* THESE BUFFERS ARE USED BY *CPUMTR* TO PASS INFORMATION
* TO A PP REQUESTED BY IT (SUCH AS *1MA* AND *1MC*).
* THE ASSEMBLY CONSTANTS ARE DEFINED IN *COMSMSC*.
*
* NMCB = NUMBER OF BUFFER(S).
* MCBL = LENGTH OF BUFFER.
MCB BSS 0
.A DUP NMCB
CON 0 FWA OF BUFFER - NOT BUSY
BSS MCBL-1
.A ENDD
MCBLL EQU *-MCB TOTAL LENGTH OF BUFFER(S)
ACS SPACE 4,25
** ACS - ADVANCE CPU SERVICE CYCLE.
*
* ENTRY (B3) = EXIT ADDRESS.
* (X1 BITS 0 - 17) = ADDRESS OF FIRST *WQ* ENTRY AT OR
* BELOW PRIORITY (WITHOUT FLAGS) OF
* NEW JOB.
* (X3) = NEW JOB *CWQW* (DELINKED FROM *WQ*).
* (A3) = ADDRESS OF NEW JOB *CWQW*.
* (B4) = NEW JOB CPU PRIORITY (WITH FLAGS).
*
* EXIT SERVICE CYCLE UPDATED FOR PRIORITY.
* CPU SCHEDULING ACSUMULATORS AND FLAGS RESET FOR
* NEW JOB AND ALL *WQ* ENTRIES AT THE SAME CPU
* PRIORITY.
* (X7) = *CSAW* FOR NEW SERVICE CYCLE.
* (B4) = NEW JOB CPU PRIORITY (WITH FLAGS).
* (B6) = NEW JOB CPU PRIORITY (WITHOUT FLAGS).
*
* USES X - 0, 1, 2, 3, 5, 6, 7.
* A - 1, 2, 6, 7.
* B - 5, 6.
ACS BSS 0 ENTRY
* ADVANCE SERVICE CYCLE FOR PRIORITY AND UPDATE NEW JOB CPU
* SCHEDULING PARAMETERS.
SX6 B4
AX6 3
SA2 TPRC+X6 GET SERVICE CYCLE FOR PRIORITY
MX7 6
SX0 B1
LX6 3
LX0 54-0
SB6 X6 SET PRIORITY WITHOUT FLAGS FOR COMPARISON
BX6 X7*X2 OLD SERVICE CYCLE
BX2 -X7*X2
IX6 X6+X0
BX7 X7*X6 NEW SERVICE CYCLE
BX6 X2+X7 MERGE NEW SERVICE CYCLE
SX2 24B
SA6 A2+ UPDATE *TPRC* ENTRY
LX2 45
BX3 X3+X2 SET SLICE ACTIVE/INCOMPLETE FLAGS
SX5 A3+
BX6 X3
UX0,B4 X3 SET PRIORITY WITH ACTIVE FLAG
* UPDATE CPU SCHEDULING PARAMETERS FOR ALL *WQ* ENTRIES AT
* PRIORITY OF NEW JOB.
ACS1 SA1 X1 GET NEXT *WQ* ENTRY
SA6 X5 UPDATE PRIORITY FLAGS
SA7 X5+B1 SET SERVICE CYCLE AND CLEAR ACSUMULATORS
ERRNZ CSAW-CWQW-1
SX5 A1
UX0,B5 X1 UNPACK PRIORITY WITH FLAGS
BX6 X1+X2 SET SLICE ACTIVE FLAGS
LE B6,B5,ACS1 IF PRIORITY (NO FLAGS) SAME AS NEW JOB
JP B3 RETURN
AIO SPACE 4
** AIO - APPLY IO INCREMENT TO SRU ACCUMULATOR.
*
* IO = S2*MS + S3*MT + S4*PF + S5*OD
*
* NEW SRU = IOM*IO + OLD SRU
*
* ENTRY (X1) = INCREMENT (INTEGER FORMAT).
* (X2) = INCREMENT INDEX.
* (B3) = EXIT ADDRESS.
* (B4) = OVERFLOW FLAG.
*
* USES X - 0, 1, 2, 3, 4, 6.
* B - 4, 6.
* A - 2, 3, 4, 6.
AIO ZR X1,AIO2 IF NO INCREMENT
SA2 AIOA+1+X2 INCREMENT MULTIPLIER (S2, S3, S4 OR S5)
SA3 B7+MP3W IO MULTIPLIER (IOM)
MX6 -30
PX1 X1
BX3 -X6*X3 ISOLATE IOM
NX1 X1
PX3 X3
RX1 X2*X1 IO = (S2, S3, S4, S5) * (MS, MT, PF, OD)
NX3 X3
RX1 X3*X1 IOM * IO
UX1,B6 X1
LX1 B6 (X1) = SRU INCREMENT
NE B1,B4,AIO1 IF NOT PF ACCUMULATOR
SB4 B4+1
* UPDATE SRU ACCUMULATOR.
* (X1) = INCREMENT.
* (B4) = 0B FOR NO OVERFLOW,
* 1B FOR ADDER OVERFLOW,
* 2B FOR PF OVERFLOW,
* 4B FOR TAPE OVERFLOW,
* 10B FOR MS OVERFLOW,
* 20B FOR MP OVERFLOW,
* 40B FOR AUC OVERFLOW,
* 100B FOR OD OVERFLOW.
AIO1 SA2 B7+SRUW SRU ACCUMULATOR
MX0 -42
BX6 X2
SA4 B7+MP3W CHECK FOR SRU ACCUMULATION DISABLED
NG X4,AIO2 IF SRU ACCUMULATION DISABLED
BX4 -X0*X2 ISOLATE ACCUMULATOR
SA3 B7+STLW GET SRU LIMIT
IX4 X4+X1 APPLY INCREMENT
BX3 -X0*X3 ISOLATE LIMIT VALUE
IX6 X2+X1
IX4 X3-X4 COMPARE LIMIT TO NEW VALUE
SA6 A2
PL X4,AIO2 IF LIMIT NOT EXCEEDED
SB4 B4+20000B SET SRU LIMIT FLAG
AIO2 NZ B4,AIO3 IF OVERFLOW OR LIMIT HAS OCCURRED
JP B3
AIO3 SA2 B7+SRUW SET LIMIT FLAGS
SX0 B4
BX3 X2
LX0 43 POSITION FLAGS
LX3 59-53
NG X3,RB3 IF RESOURCE LIMITS DISABLED
BX6 X2+X0
SA6 A2
JP B3 EXIT
AIOA CON "S5SRM","S4SRM","S3SRM","S2SRM" S5,S4,S3,S2
AMP SPACE 4,10
** AMP - ADD MAP PROCESSOR OR OPTICAL DISK INCREMENT.
*
* IF OD, EXITS TO *AIO* TO APPLY IO INCREMENT.
*
* IF MAP, NEW SRU = M1 * MAP MULTIPLIER * (X1) + OLD SRU
*
* ENTRY (X1) = INCREMENT (INTEGER FORMAT)
* (X2) = 0 IF MAP INCREMENT,
* 1 IF OD INCREMENT.
* (B3) = EXIT ADDRESS
* (B4) = OVERFLOW FLAG
*
* EXIT EXITS THRU ROUTINE *AIO* TO APPLY FINAL
* INCREMENT TO SRU ACCUMULATOR.
*
* USES A - 3.
* B - 4.
* X - 1, 2, 3, 6.
AMP ZR X1,AIO2 IF NO INCREMENT
NZ X2,AMP1 IF OD INCREMENT
SA3 B7+MPAW GET M1 * MAP MULTIPLIER
MX6 18
BX2 X6*X3 ISOLATE MULTIPLIER
LX2 18
IX1 X1*X2 M1 * MAP MULTIPLIER * INCREMENT
ZR B4,AIO1 IF NO OVERFLOW
SB4 20B SET OVERFLOW FLAG TO MAP
EQ AIO1 UPDATE SRU ACCUMULATION
AMP1 SX2 -1 SET INDEX TO *S5*
ZR B4,AIO IF NO OVERFLOW
SB4 100B SET OVERFLOW FLAG TO OD
EQ AIO UPDATE IO SRU ACCUMULATION
APQ SPACE 4,10
** APQ - ASSIGN PP OR IF UNASSIGNABLE ENTER IN REQUEST QUEUE.
*
* ENTRY (X6) = PP CALL.
* (B3) = EXIT ADDRESS.
* (B4) = INDEX INTO *TFPL* IF LIBRARY SEARCH NOT NEEDED.
* (B4) = 0 IF LIBRARY SEARCH NEEDED.
* (B4) .LT. 0 RETURN REQUESTED WHEN PP UNASSIGNABLE.
* (B7) = CONTROL POINT ADDRESS.
* NOTE THAT THE CONTROL POINT NUMBER IS ENTERED
* INTO THE PP CALL BY THIS ROUTINE.
* (A5) = OUTPUT REGISTER OF REQUESTING PP, IF ANY.
* (APQA) = PARAMETER WORD.
* (APQC) = MASK FOR *PPAL* SELECTION.
*
* EXIT (X1) = 0 IF PP UNASSIGNABLE AND RETURN REQUESTED.
* (X1) = -0 IF REJECT FOR STORAGE MOVE.
* (X1) = *IR* ADDRESS IF PP ASSIGNED.
*
* USES X - 1, 2, 3, 4, 7.
* B - 6.
* A - 1, 2, 6, 7.
*
* PRESERVES X0, B7, B4, B3, A5, A0.
*
* CALLS APQ, SPL.
APQ SA2 PPAL CHECK PP AVAILABILITY
MX3 20
LX3 -12
BX2 X3*X2
SA3 SCRL CHECK EMERGENCY STEP
LX3 59-56
NG X3,APQ8 IF EMERGENCY STEP SET
* ENTERED HERE FROM *PPQ*.
APQ1 MX7 20 INITIALIZE PP SELECTION MASK
LX7 -12
SA7 APQC
* CHECK FOR SPECIAL PRE-PROCESSING REQUIRED.
* EXIT TO *CSP* IF CYBER 810/830.
* EXIT TO *APQ9* IF CYBER 170.
TJP (/MONITOR/CSP,CP830,/0CME/APQ9,NCME,/MONITOR/APQ1.0)
APQ1.0 BX3 X2
MX4 5
SA2 CMCL CHECK MOVE REQUESTED
SX7 B7
LX4 40-59
LX7 36-7 MERGE CONTROL POINT NUMBER
BX6 -X4*X6
AX2 48
BX6 X6+X7
LX2 36
BX2 X2-X7
ZR X2,APQ7 IF MOVE REQUESTED
ZR X3,APQ8 IF NO PP AVAILABLE
* ENTER HERE FOR SPECIAL *1VP* ASSIGNMENT REQUEST.
APQ1.1 SB6 APQ2 *SPL* RETURN ADDRESS
LT B4,B1,SPL IF LIBRARY SEARCH / NO PP RECALL
SA2 PLDP
SA1 TFPL-1+B4 GET PP DIRECTORY ADDRESS
AX2 36
SX1 X1+
MX3 1
ZR X2,APQ7 IF LIBRARY LOCKED
ZR X1,SPL IF FAST PP LOADER TABLE NOT BUILT
MX4 18
SA1 X1 READ DIRECTORY ENTRY
LX3 41-59
BX1 -X4*X1
IX7 X1+X3
BX7 -X3*X7
TNO /PROBE/SPL,PROBE
APQ2 ZR X1,APQ8 IF LIBRARY LOCKED
SA2 APQC GET SELECTION MASK
SA1 PPAL ASSIGN NEXT PP
BX2 X2*X1
MX3 1
LX3 -12
NX2 B6,X2 SELECT NEXT AVAILABLE PP
SX2 B6
SX4 B6-11B-1
AX3 B6,X3
BX1 X1-X3 CLEAR PP AVAILABLE
NG X4,APQ2.1 IF NOT SECOND BANK
* THE PPS IN THE SECOND BANK ARE ASSIGNED IN REVERSE ORDER.
* PP = (31B-20B+12B+12B-BIT NUMBER) = (35B-BIT NUMBER)
SX4 35B REVERSE ORDER OF SECOND BANK
IX2 X4-X2
APQ2.1 LX2 PPCES
MX4 48
R= X3,ASCM
BX1 X4*X1
TX2 X2,FP SET PP COMMUNICATION BLOCK ADDRESS
LX3 48
BX7 X7+X3
SA4 APQB-1 PRESET SEARCH OF TABLE
SA7 X2+B1 SET PP OR (LOAD PARAMETERS)
MX7 18
APQ2.2 SA4 A4+B1 GET NEXT TABLE ENTRY
ZR X4,APQ5 IF END OF TABLE
SB6 X4 SAVE LOAD PARAMETER ADDRESS
BX4 X4-X6
BX4 X7*X4
NZ X4,APQ2.2 IF PP NAME DOES NOT MATCH
EQ B4,B6,APQ3 IF *CPUCIO* REQUEST
TX4 A5-1,-SP
NZ X4,APQ5 IF NOT PSEUDO-PP REQUEST
SA4 A5+2 LOAD MB+1
EQ APQ4 TRANSFER DATA
APQ3 SA4 /CPUCIO/MB
APQ4 BX7 X4 MOVE MB TO MB
SA7 A7+B1
SA4 A4+B1
ERRNZ /CPUCIO/MB1-/CPUCIO/MB-1
BX7 X4 MB1 TO MB+1
SA7 A7+B1
SA4 A4+B1
ERRNZ /CPUCIO/MB2-/CPUCIO/MB1-1
BX7 X4 MB2 TO MB+2
SA7 A7+B1
EQ APQ6 SKIP PARAMETER WORD CHECK
APQ5 SA4 APQA MOVE PARAMETER WORD
BX7 X4
SA7 A7+B1 MOVE TO MB
APQ6 SX4 B7
SX7 B7 SET FUNCTION PROCESSING CP ADDRESS
LX4 24 SET CP ADDRESS
BX7 X7+X4
LX4 24-7 SET CP NUMBER
BX7 X7+X4
TX4 X2,-FP
LX4 PPXES-PPCES
TA7 X4+ACPP,FPX SET CP ASSIGNMENT
BX7 X1
MX4 20
LX4 -12
BX1 X4*X1
CX1 X1
SA6 X2 STORE PP INPUT REGISTER
BX7 X7+X1
SA7 A1+
SA1 B7+STSW INCREMENT PP COUNT
IX7 X1+X3
SA7 A1
SX1 A6 RETURN *IR* ADDRESS
JP B3 RETURN
APQ7 BX1 -X1+X1
NG B4,RB3 IF NO QUEUEING REQUESTED
APQ8 BX1 X1-X1
NG B4,RB3 IF NO QUEUEING REQUESTED
MX4 6
SA3 APQA
SX2 PQ
BX7 X3
SA7 AQRA
EQ AQR ASSIGN QUEUE REQUEST
APQA BSS 1 PARAMETER WORD
* TABLE OF PP-S REQUIRING SPECIAL PROCESSING FOR *CPUCIO*.
APQB VFD 18/3L1MS,24/,18/LA1MS
VFD 18/3L1MI,24/,18/LA1MI
VFD 18/3L1ML,24/,18/LA1ML
VFD 18/3L1OD,24/,18//MONITOR/LA1OD
CON 0 END OF TABLE
APQC VFD 12/0,20/-0,28/0 *PPAL* SELECTION MASK
TFPL SPACE 4,10
** TFPL - FAST PP LOADER TABLE.
*
* THIS TABLE CONTAINS THE ABSOLUTE MEMORY ADDRESS OF THE *PLD*
* ENTRY FOR THE CORRESPONDING PP PROGRAM. IT IS UPDATED
* BY *SLL* OR *REC* WHEN A LIBRARY CHANGE OR RELOAD OCCURS.
TFPL BSS 0
LOC 1
LA1MS VFD 17/0,1/1,18/3L1MS,24/0 *1MS* LIBRARY ENTRY ADDRESS
LA1AJ VFD 17/0,1/1,18/3L1AJ,24/0 *1AJ* LIBRARY ENTRY ADDRESS
LA1MI VFD 17/0,1/1,18/3L1MI,24/0 *1MI* LIBRARY ENTRY ADDRESS
LA1RO VFD 17/0,1/1,18/3L1RO,24/0 *1RO* LIBRARY ENTRY ADDRESS
LA1SJ VFD 17/0,1/1,18/3L1SJ,24/0 *1SJ* LIBRARY ENTRY ADDRESS
LA1MA VFD 17/0,1/1,18/3L1MA,24/0 *1MA* LIBRARY ENTRY ADDRESS
LACPM VFD 17/0,1/1,18/3LCPM,24/0 *CPM* LIBRARY ENTRY ADDRESS
LALDR VFD 17/0,1/1,18/3LLDR,24/0 *LDR* LIBRARY ENTRY ADDRESS
LA1ML VFD 17/0,1/1,18/3L1ML,24/0 *1ML* LIBRARY ENTRY ADDRESS
LA1OD VFD 17/0,1/1,18/3L1OD,24/0 *1OD* LIBRARY ENTRY POINTER
LA1FA VFD 17/0,1/1,18/3L1FA,24/0 *1FA* LIBRARY ENTRY ADDRESS
LA1RU VFD 17/0,1/1,18/3L1RU,24/0 *1RU* LIBRARY ENTRY ADDRESS
LA1BP VFD 17/0,1/1,18/3L1BP,24/0 *1BP* LIBRARY ENTRY ADDRESS
LA3RX VFD 17/0,1/1,18/3L3RX,24/0 *3RX* LIBRARY ENTRY ADDRESS
LA1CP VFD 17/0,1/1,18/3L1CP,24/0 *1CP* LIBRARY ENTRY ADDRESS
TMSD EQU *O-1
LOC 1
LA6DI VFD 18/1,18/3L6DI,24/0 *6DI* PLD ENTRY ADDRESS
LA6DJ VFD 18/1,18/3L6DJ,24/0 *6DJ* PLD ENTRY ADDRESS
LA6DP VFD 18/1,18/3L6DP,24/0 *6DP* PLD ENTRY ADDRESS
LA6DE VFD 18/1,18/3L6DE,24/0 *6DE* PLD ENTRY ADDRESS
LA6DX VFD 18/1,18/3L6DX,24/0 *6DX* PLD ENTRY ADDRESS
LA6DC VFD 18/1,18/3L6DC,24/0 *6DC* PLD ENTRY ADDRESS
LA6DD VFD 18/1,18/3L6DD,24/0 *6DD* PLD ENTRY ADDRESS
LA6MX BSS 0 END OF DRIVERS
LOC *O
TFPLL EQU *-TFPL FAST PP LOADER TABLE LENGTH
TPPI SPACE 4,10
** TPPI - TABLE OF PRE-PROCESSOR INDICES.
*
* THIS TABLE CONTAINS THE PRE-PROCESSOR NAME AND
* DEFAULT FL/100B CORRESPONDING TO THE INDEX FOR
* THE *ENEJ* SUBFUNCTION OF THE *EJT* RA+1 CALL.
* THIS TABLE MUST IMMEDIATELY FOLLOW THE *TFPL*
* TABLE SO IT CAN BE LOCATED AND REBUILT BY *SLL*
* AFTER A LIBRARY CHANGE IS MADE.
TPPI BSS 0
LOC 0
VFD 42/4LLDR=,18/0
VFD 42/4LSORT,18/0
VFD 42/4LPACK,18/0
LOC *O
TPPIL EQU *-TPPI
AQR SPACE 4,10
** AQR - ASSIGN QUEUE REQUEST.
*
* ENTRY (X0) = ORDERED QUEUE PARAMETER.
* (X2) = QUEUE INDEX.
* = RQ, IMPLIES AN ORDERED QUEUE REQUIRING X0 SET.
* (X6) = REQUEST.
* (A5) = OUTPUT REGISTER ADDRESS (PRIORITY PP REQUEST).
* (B3) = EXIT ADDRESS.
* (B7) = CONTROL POINT ADDRESS.
* (AQRA) = PARAMETER WORD.
*
* EXIT (A2) = ADDRESS OF QUEUE ENTRY LINKED TO NEW ENTRY.
*
* USES X - 1, 2, 3, 4, 6, 7.
* B - 6.
* A - 1, 3, 6, 7.
*
* PRESERVES B3, A5, B7, A0.
AQR SA1 B7+STSW ALLOCATE RECALL SLOT
ZR X6,* IF PP CALL ZERO
SA2 TAQR+X2 READ PROCESSING PARAMETERS
MX7 -4
BX4 -X7*X1 NEXT FREE RECALL SLOT
*
* CONTINUING AT THIS POINT WILL YIELD CATASTROPHIC
* RESULTS AND COVER UP THE AUDIT TRAIL, SO STOP.
*
ZR X4,* IF CONFUSED, HANG
SB6 B7+RCCW-1
BX7 X7*X1
SA3 B6+X4 READ NEXT FREE RECALL SLOT
SA6 A3+RECW-RCCW STORE REQUEST TO RECALL
SA4 AQRA GET PARAMETER WORD
MX6 1
BX6 X4+X6
SA6 A3+REPW-RCCW
UX2,B6 X2 SET RECALL ADDER
SX3 X3+B6
SB6 X2 SET PROCESSOR ADDRESS
IX7 X7+X3
AX2 18 GET START OF QUEUE
SA7 A1
MX7 -18
BX1 X1-X1
JP B6 JUMP TO PROCESSOR
* PLACE ENTRY AT END OF QUEUE.
* USED FOR PQ AND CQ.
*
* LOOP IS REPLICATED FOR PERFORMANCE.
AQR0 MX1 1 SET NO ROLL FLAG
AQR1 SA2 X2
BX3 -X7*X2
ZR X3,AQR1.1 IF END OF QUEUE
SA2 X2
BX3 -X7*X2
NZ X3,AQR1 IF NOT END OF QUEUE
AQR1.1 BX2 X7*X2
BX7 X7-X7 CLEAR END OF QUEUE
BX7 X1+X7
SA7 A3
SX7 A3 EXTEND END OF QUEUE
BX7 X7+X2 INSERT LINK
SX1 A3 RETURN QUEUE ADDRESS
SA7 A2+
JP B3 RETURN
* ASSIGN ENTRY TO ORDERED QUEUE.
AQR2 SA2 X2+ FIND FIRST ENTRY
MX4 -12
BX0 X4*X0
AQR3 BX7 -X4*X2 EXTRACT LINKAGE
SB6 A2
ZR X7,AQR4 IF END OF QUEUE
SA2 X7 READ NEXT QUEUE ENTRY
IX3 X2-X0
NG X3,AQR3 IF NOT .LT. THIS QUEUE ENTRY
AQR4 BX7 X7+X0
SX3 A3 SET RECALL SLOT ADDRESS
SA2 B6 REPLACE LINK TO NEW RECALL ENTRY
SA7 A3
BX2 X4*X2
BX7 X2+X3
SA7 A2+
JP B3 RETURN
* PLACE ENTRY AT BEGINNING OF QUEUE.
AQR5 SA2 X2 PLACE ENTRY AT HEAD OF QUEUE
BX2 -X7*X2
SX7 A5
LX7 18
BX7 X7+X2
SA7 A3
SX7 A3
SA7 A2
JP B3 RETURN
AQRA BSS 1
TAQR SPACE 4,10
** TAQR - TABLE OF QUEUE PROCESSING PARAMETERS.
*
* ENTRY 1 WORD
*T, TAQR 12/ 2000+RC,12/,18/ QS,18/ QP
* RC RECALL COUNT TO INCREMENT *STSW*.
* QS START OF QUEUE POINTER.
* QP QUEUE PROCESSOR.
TAQR BSS 0
LOC 0
BQ VFD 12/2420B,12/0,18/BQRL,18/AQR2 BUFFER MANAGER
RQ VFD 12/2020B,12/0,18/RQRL,18/AQR2 *MTR* RECALL
NRQ VFD 12/2420B,12/0,18/RQRL,18/AQR2
CQ VFD 12/2420B,12/0,18/CQRL,18/AQR1 *CPUCIO* REQUEST QUEUE
PQ VFD 12/2020B,12/0,18/PQRL,18/AQR1 PP REQUEST QUEUE
NPQ VFD 12/2420B,12/0,18/PQRL,18/AQR0 PP NO ROLL REQUEST
PRP VFD 12/2420B,12/0,18/PQRL,18/AQR5 PRIORITY PP REQUEST
LOC *O
BNJ SPACE 4,25
** BNJ - BEGIN NEW JOB.
*
* THIS ROUTINE UPDATES THE CPU TIME FOR THE CURRENTLY ACTIVE
* JOB (OLD JOB) IN THIS CPU AND STARTS THE HIGHEST PRIORITY JOB
* (NEW JOB) THAT CAN USE THIS CPU.
*
* IF ENTERED AT *BNJ*, (B7) IS THE ACTIVE (OLD JOB) CONTROL
* POINT AND (X7) IS THE CPU STATUS TO SET FOR THE OLD JOB.
*
* IF ENTERED AT *BNJ1*, THE OLD JOB CPU STATUS IS ASSUMED TO
* HAVE BEEN SET PRIOR TO ENTRY IF NOT *A* OR *B* STATUS.
*
* IF THE OLD JOB CPU STATUS IS *A* OR *B* ON ENTRY, THE CPU
* STATUS WILL BE CHANGED TO *W* AND THE JOB WILL BE INSERTED IN
* *WQ* ACCORDING TO PRIORITY AND CPU SLICE EXPIRATION CRITERIA.
*
* EXIT EXCHANGE PACKAGE AT (B2) RESET FOR PPU USE.
* RUNNING TIME UPDATED.
*
* USES X - ALL.
* B - 3, 4, 5, 6.
* A - 1, 2, 3, 4, 5, 6, 7.
*
* CALLS ACS, CPT, ESC, /DCP/BNJ, MSM, MSR.
BNJ SA1 B7+STSW
MX0 3 CLEAR OLD STATUS AND SET NEW
LX7 -3
BX1 -X0*X1
BX7 X7+X1
SA7 A1+
* ENTRY IF CPU STATUS ALREADY SET OR IF *W* STATUS TO BE SET.
BNJ1 SB3 BNJ2 *CPT* RETURN ADDRESS
SB6 200B SET CPU SWITCH FLAG
TJP (/NVE/CPT1,NVE,/CME/CPT1,CME,/MONITOR/CP76,CP176,/MONIT
,OR/CPT)
BNJ2 SA2 X1+STSW GET CONTROL POINT *STSW*
SX6 B0+
SX4 1
SA6 SA+A0 CLEAR CPU SWITCH ACCUMULATED TIME
LX4 56
BX7 X4*X2
SB4 X1+ EXCHANGE PACKAGE ADDRESS IF SUB-CP ACTIVE
TNZ X7,(/MONITOR/ESC,SUBCP,/MONITOR/BNJ2) IF SUB-CP ACTIVE
LX1 24
SB4 X1 EXCHANGE PACKAGE ADDRESS IF NOT SUB-CP
* UPDATE CPU SLICE ACCUMULATORS AND FLAGS FOR OLD JOB.
* INCREMENT CPU SLICE ACCUMULATOR BY TIME USED.
* CLEAR EXTENDED CPU SLICE INCOMPLETE FLAG IF .LT. RECALL CPU
* SLICE REMAINING IN EXTENDED CPU SLICE.
* CLEAR CPU SLICE ACTIVE FLAG IF .LT. RECALL CPU SLICE
* REMAINING IN CPU SLICE.
* CLEAR RECALL FLAG IF RECALL CPU SLICE LIMIT REACHED.
* CLEAR RECALL SLICE ACCUMULATOR IF RECALL FLAG CLEARED.
BNJ3 SA3 B4+CWQW GET *WQ* PARAMETERS
SA1 B4+STSW GET EXCHANGE PACKAGE *STSW*
SA4 A3+B1 GET CPU SLICE ACCUMULATORS
ERRNZ CSAW-CWQW-1
TAX0 (6,CME,11,CP176,0) SCALE CPU TIME FOR ACCUMULATORS
MX7 -9
LX7 27
BX7 -X7*X3 SERVICE PARAMETERS INDEX
BX2 X1
SX6 A0+ACPS+WCPS
AX2 57
LX7 -27
SB3 X2 (B3) .GT. 0 IF *A* OR *B* CPU STATUS
LX6 -3
SB5 X2 SET STATUS FOR DRIVER RECALL CHECK
LE B3,B0,BNJ4 IF NOT TO SET *W* STATUS
BX6 X1-X6 SET *W* STATUS
SB5 WCPS-7 SET *W* STATUS FOR DRIVER RECALL CHECK
SA6 A1+
BNJ4 TA2 X7+CSAT,JCB GET CPU SCHEDULING PARAMETERS
GT B3,B0,BNJ5 IF *W* STATUS SET (JOB PREEMPTED)
NZ X0,BNJ5 IF CPU SLICE INCREMENT NOT NULL
SX0 1 SET VALUE TO INSURE SLICE EXPIRATION
BNJ5 SX5 X4 CPU SLICE ACCUMULATOR
SX7 X2 EXTENDED CPU SLICE LIMIT
IX5 X5+X0
IX5 X5-X7 CHECK TIME LEFT IN EXTENDED CPU SLICE
LX3 59-48 POSITION RECALL FLAG
NG X5,BNJ6 IF .GE. RECALL SLICE LEFT IN EXTENDED
MX7 6
SX1 7 SET TO CLEAR ALL CPU SCHEDULING FLAGS
BX7 X7*X4 SET TO CLEAR ALL ACCUMULATORS
LX7 -18
LE B3,B0,BNJ8 IF *W* STATUS NOT SET
PL X3,BNJ8 IF RECALL FLAG NOT SET
LX4 -18
LX2 -18
SX6 X4 RECALL CPU SLICE ACCUMULATOR
SX1 X2 RECALL CPU SLICE LIMIT
IX6 X6+X0
IX6 X6-X1
SX1 7 SET TO CLEAR ALL CPU SCHEDULING FLAGS
PL X6,BNJ8 IF NO TIME REMAINING IN RECALL SLICE
SX1 5 SET TO CLEAR ALL BUT RECALL FLAG
EQ BNJ8 UPDATE ACCUMULATORS AND FLAGS
BNJ6 IX4 X4+X0 INCREMENT CPU SLICE ACCUMULATOR
LX4 -18
SX1 6 SET TO CLEAR NORMAL SLICE AND RECALL FLAGS
SX6 X4 RECALL CPU SLICE ACCUMULATOR
IX7 X4-X6 CLEAR RECALL CPU SLICE ACCUMULATOR
LE B3,B0,BNJ8 IF *W* STATUS NOT SET
LX2 -18
SX1 X2+ RECALL CPU SLICE LIMIT
LX2 -18
PL X3,BNJ7 IF RECALL CPU SLICE NOT ACTIVE
IX6 X6+X0
IX6 X6-X1
PL X6,BNJ7 IF NO TIME REMAINING IN RECALL CPU SLICE
IX7 X4+X0 INCREMENT RECALL CPU SLICE ACCUMULATOR
SX1 B0 SET TO PRESERVE ALL FLAGS
EQ BNJ8 UPDATE ACCUMULATORS AND FLAGS
BNJ7 SX2 X2 CPU SLICE RECALL EXTENSION
IX2 X2+X5 CHECK TIME LEFT IN UNEXTENDED CPU SLICE
MX1 1
BX2 -X2
BX1 X1*X2 SET TO CLEAR SLICE ACTIVE IF LIMIT
LX1 2-59
SX1 X1+2 SET TO CLEAR RECALL FLAG
* WRITE ACCUMULATORS AND UPDATE CPU SCHEDULING FLAGS.
BNJ8 LX7 18 RESTORE *CSAW*
LX1 58
SA7 A4 UPDATE CPU SLICE ACCUMULATORS
BX3 -X1*X3 CLEAR SELECTED SCHEDULING FLAGS
SX1 B5
SX6 B1
AX1 1
LX6 57-0
SX1 X1+B1 (X1) = 0 IF *W* OR *X* STATUS
BX3 X3+X6 SET DRIVER RECALL NOT REQUIRED
NZ X1,BNJ9 IF NOT *W* OR *X* STATUS
NG X3,BNJ9 IF *W* STATUS WITH RECALL
BX3 -X6*X3 CLEAR DRIVER RECALL NOT REQUIRED
* INITIALIZE TO RESET *WQ* LINKAGE.
BNJ9 MX6 42
LX3 48-59 RESTORE *CWQW*
SX1 B0+
LE B3,B0,BNJ14 IF *W* STATUS NOT SET
SA2 WQRL
UX0,B4 X3 OLD JOB CPU PRIORITY AND FLAGS
BX4 X3
LX4 59-49
SX7 A3+ OLD JOB *CWQW* ADDRESS
PL X4,BNJ11 IF CPU SLICE INACTIVE
* INSERT OLD JOB IN *WQ* AS FIRST AT PRIORITY.
* LOOP REPLICATED FOR PERFORMANCE.
BNJ10 SA4 X2
UX0,B5 X4
GE B4,B5,BNJ13 IF POSITION FOUND
SA2 X4
UX0,B5 X2
LT B4,B5,BNJ10 IF POSITION NOT FOUND
EQ BNJ12 SET *WQ* LINKAGE
* INSERT OLD JOB IN *WQ* AS LAST AT PRIORITY.
* LOOP REPLICATED FOR PERFORMANCE.
BNJ11 SA4 X2
UX0,B5 X4
GT B4,B5,BNJ13 IF POSITION FOUND
SA2 X4
UX0,B5 X2
LE B4,B5,BNJ11 IF POSITION NOT FOUND
* SET LINKAGE FOR JOB INSERTED IN *WQ*.
BNJ12 BX1 X6*X4 CLEAR LINK
BX7 X1+X7 MERGE NEW LINK
SX1 A2 SET LINK TO NEXT ENTRY
SA7 A4
EQ BNJ14 UPDATE LINK
BNJ13 BX1 X6*X2 CLEAR LINK
BX7 X1+X7 MERGE NEW LINK
SX1 A4 SET LINK TO NEXT ENTRY
SA7 A2
* UPDATE OLD JOB PRIORITY FLAGS AND *WQ* LINKAGE.
BNJ14 BX3 X6*X3
BX7 X3+X1 MERGE LINK
SA7 A3+ UPDATE *CWQW*
* SELECT NEW JOB, UPDATE *WQ* POINTER, AND ADVANCE CPU SERVICE
* CYCLE IF JOB WITH INACTIVE CPU SLICE SELECTED.
BNJ15 SA1 WQRL SELECT NEXT JOB
* EQ /DCP/BNJ (DUAL CPU MACHINE)
SA3 X1 GET *CWQW* ENTRY
UX0,B4 X3 UNPACK PRIORITY
ZR B4,BNJ15 IF NOT VALID *WQ* FIRST ENTRY
BX7 X6*X3 CLEAR *WQ* LINK
BX6 -X6*X3 EXTRACT *WQ* LINK
SA7 A3
SA6 A1 UPDATE *WQ* POINTER
BX3 X7
LX7 59-49
NG X7,BNJ16 IF ACTIVE CPU SLICE
SB3 BNJ16 SET *ACS* RETURN ADDRESS
BX1 X6
EQ ACS ADVANCE CPU SERVICE CYCLE
* SET ACTIVE CPU STATUS AND CLEAR *MTR* BYPASS FLAG FOR JOB
* WITH CPU SWITCH REQUEST. THE SWITCH REQUEST MAY HAVE BEEN
* FOR A JOB OTHER THAN THE SELECTED NEW JOB.
BNJ16 SA1 A3+STSW-CWQW GET CPU STATUS
SA2 CSWL+A0
LX3 -27
MX6 -9
SX7 A0+ACPS+WCPS
MX5 -3
BX6 -X6*X3 SERVICE PARAMETERS INDEX
LX3 9
LX7 -3
BX5 -X5*X3 EXCHANGE PACKAGE TYPE
BX7 X1-X7 SET ACTIVE STATUS
LX2 -36
SA7 A1 UPDATE CPU STATUS
SX2 X2
ZR X2,BNJ17 IF NO *WQ* ENTRY WITH *MTR* BYPASS SET
SA2 X2 GET *WQ* ENTRY WITH BYPASS FLAG
SX7 B1
LX7 26-0
BX7 -X7*X2 CLEAR *MTR* BYPASS FLAG
SA7 A2
* SET CPU SCHEDULING CMR POINTERS.
BNJ17 SA4 A3+CSAW-CWQW GET *CSAW* ACCUMULATORS
SA1 RTCL
TA2 X6+CSJT,JCB GET CPU SCHEDULING SERVICE PARAMETERS
SA3 BNJA
MX6 -36
MX7 -12
SX0 X4+ CPU SLICE ACCUMULATOR
BX1 -X6*X1 REAL TIME MILLISECOND CLOCK
PX0 X0
BX6 -X7*X2 CPU SLICE LIMIT
NO (NON - CME MACHINE)
SAC 15,40003B,CME,46000B
* FX0 X0*X3 (CME MACHINE)
LX2 -12
UX0 X0
BX2 -X7*X2 RECALL SLICE LIMIT
IX6 X6-X0 TIME REMAINING IN CPU SLICE
IX3 X1+X2 MILLISECOND CLOCK AT END OF RECALL SLICE
IX0 X6-X2
IX6 X1+X6 MILLISECOND CLOCK AT END OF CPU SLICE
PX7 B4,X3 MERGE CPU PRIORITY AND RECALL SLICE LIMIT
PL X0,BNJ18 IF .GE. RECALL SLICE IN UNEXTENDED SLICE
BX6 X3 SET TO SWITCH CPU AT END OF RECALL SLICE
BNJ18 SA6 CSWL+A0 SET CPU SWITCH CONTROL
SA7 TSCL+A0 SET PRIORITY AND RECALL SLICE LIMIT
* SET CPU PROGRAM CONTROL CMR POINTERS. NOTE THAT THE OLD
* EXCHANGE PACKAGE ADDRESS IN *CPAL* IS THE ADDRESS IN THE
* JOB-S FIELD LENGTH TO WHICH THE SUB-CONTROL POINT EXCHANGE
* PACKAGE WILL BE COPIED IF A SUB-CONTROL POINT WAS ACTIVE.
* EXIT IS MADE TO *MTRX* WITHOUT UPDATING *CPAL* AND *ACPL* IF
* THE OLD AND NEW JOBS ARE THE SAME TO AVOID THE OVERHEAD OF
* AN EXCHANGE PACKAGE COPY AND BECAUSE THE RA VALUE READ FROM
* THE NEW EXCHANGE PACKAGE AREA WILL NOT BE CORRECT IF MONITOR
* MODE WAS ENTERED FROM A PP EXCHANGE.
SA2 CPAL+A0
SX1 A4-CSAW NEW JOB EXCHANGE PACKAGE ADDRESS
LX5 42
SA3 X1+B1 READ RA
BX7 X1+X5 SET NEW EXCHANGE PACKAGE ADDRESS AND TYPE
SX4 X1
ZR X5,BNJ19 IF CONTROL POINT EXCHANGE PACKAGE
TX4 SCA SET SYSTEM CONTROL POINT ADDRESS
BNJ19 MX0 -24
SB7 X4 NEW CONTROL POINT ADDRESS
MX6 24
LX4 24
BX2 -X0*X2 OLD JOB EXCHANGE PACKAGE ADDRESS
BX6 X6*X3 NEW JOB RA
IX0 X1-X2
BX7 X7+X4 MERGE CONTROL POINT ADDRESS
ZR X0,MTRX IF RESTARTING OLD JOB
SA6 ACPL+A0 SET RA FOR *MTR* RA+1 CHECK
SA7 CPAL+A0 SET EXCHANGE PACKAGE POINTERS
SX3 B2+ OLD EXCHANGE ADDRESS
SB2 X1 NEW EXCHANGE ADDRESS
IX1 X3-X2 EXCHANGE PACKAGE MOVE DIFFERENTIAL
TNO /NVE/SVS,NVE
* COPY EXCHANGE PACKAGE.
* ENTRY FROM *XJP* AND *ESC*.
* RETURN FROM */NVE/SVS*.
* (B2) = NEW PROGRAM MODE EXCHANGE PACKAGE ADDRESS.
* (X1) = EXCHANGE PACKAGE MOVE DIFFERENTIAL.
* (X3) = ADDRESS OF EXCHANGE PACKAGE FOR COPY.
BNJ20 ZR X1,MTR IF NO EXCHANGE PACKAGE COPY
TX2 MCMS SET MACHINE FIELD LENGTH
SB4 20B (B4) = LENGTH OF MOVE
LX2 36+6
BX0 X3 FWA OF EXCHANGE COPY
SB6 BNJ21 *MSM* *MSR* RETURN ADDRESS
TJP (/CME/MSR,CME,/MONITOR/MSM,CMUMTR,/MONITOR/MSR)
BNJ21 SX6 B1 RA = 0, B1 = 1
BX7 X2+X3 FL, B2
SA6 X3+B1
SX4 A5 MERGE FLS AND (A5)
TX6 XPFE
LX4 18
SA7 A6+B1
LX6 48
TX1 MECS SET MACHINE FLX
TLX1 (6,ESM170,0)
TX2 MECNF
BX1 X1+X2
SA6 A7+B1
TLX1 (36+3,ESM170,36+9)
TX6 RAEX SET RAE BASE ADDRESS
TLX6 (36+3,ESM170,36+9)
BX7 X1+X4
SA6 A6+B1 (RAX)=0
SA7 A6+B1 FLX, A5
BX6 X6-X6
SA6 A7+B1 (MA) = 0
TEQ (/MONITOR/BNJ30,CP176,/MONITOR/MTR)
BNJA CON 0.064P48+1 MICROSECONDS/64 TO MILLISECONDS CONVERSION
CAL SPACE 4,15
** CAL - CHECK ACTIVITY LIMIT.
*
* *CAL* ADDS UP THE ACTIVITY ON THE CONTROL POINT
* (PP-S ACTIVE, TAPE ACTIVITY, AND PP-S IN RECALL),
* AND CHECKS TO SEE IF THEY EXCEED THE ALLOWED LIMIT.
* IF THE CONTROL POINT IS THE SYSTEM CONTROL POINT,
* PP-S ACTIVE ARE NOT INCLUDED IN THE SUM.
*
* ENTRY (B3) = RETURN ADDRESS IF ACTIVITY LIMIT.
* (B6) = RETURN ADDRESS IF NO LIMIT.
*
* USES X - 2, 3, 4.
* B - 5.
* A - 2.
CAL SA2 B7+STSW GET CONTROL POINT STATUS
MX3 -4
LX2 -4
BX4 -X3*X2 PP RECALL, TAPE ACTIVITY
TB5 B7,-SCA
LX2 4-48
ZR B5,CAL1 IF SYSTEM CONTROL POINT
BX2 -X3*X2
IX4 X2+X4 INCLUDE PP ACTIVITY COUNT
CAL1 SX2 X4-NPPCP
PL X2,RB3 IF ACTIVITY LIMIT
JP B6 RETURN
CIA SPACE 4,20
** CIA - CHECK *IAF* ACCESSIBILITY.
*
* *CIA* CHECKS IF *IAF* IS ACCESSIBLE BY LOOKING AT THE
* SUBSYSTEM CONTROL POINT TABLE (SSCT). THE *IAF* STATUS WORD
* STSW IS ALSO CHECKED FOR AN ERROR FLAG, BECAUSE IAF MUST BE
* CONSIDERED INACCESSIBLE IF AN ERROR FLAG IS SET SO THAT *PP*S
* AT IAF-S CONTROL POINT WILL DROP AND ALLOW *1AJ* TO PROCESS
* THE ERROR FLAG.
*
* ENTRY (B3) = RETURN ADDRESS.
*
* EXIT (B4) = 0, IF *IAF* IS ACCESSIBLE AND NO ERROR FLAGS
* ARE SET.
* .NE. 0, IF *IAF* IS UNACCESSIBLE OR AN ERROR FLAG
* IS SET.
* (X2) = SSCT WORD.
*
* USES X - 0, 2, 3.
* A - 2, 3.
* B - 4.
CIA SA2 SSCP GET SSCT ADDRESS
SB4 B1 SET RETURN PARAMETER NON-ZERO
AX2 12
SA2 X2+ GET SUBSYSTEM CONTROL POINT TABLE ENTRY
PL X2,RB3 IF *IAF* NOT ACCESSIBLE
SA3 VCPT*200B+STSW CHECK FOR ERROR FLAG
MX0 -12
LX3 -36
BX3 -X0*X3
SB4 X3 INDICATE IF IAF IS ACCESSIBLE
JP B3 RETURN
CJS SPACE 4,20
** CJS - CHECKS JOB STATUS FOR THE FOLLOWING ITEMS.
*
* MODE ERRORS, PROGRAM STOPS, TIME AND SRU LIMITS.
*
* ENTRY (B4) = EXIT ADDRESS.
* (B6) = EXCHANGE PACKAGE ADDRESS TO BE CHECKED.
* (B7) = CONTROL POINT ADDRESS.
*
* EXIT EXITS TO SEF IF ERRORS DETECTED.
*
* USES X - 2, 3, 4, 6, 7.
* A - 2, 3, 4.
CJS SA3 B6+B1 READ RA
AX3 36
SA2 B6 READ P
SA4 A3+B1 READ FL
AX2 36
AX4 36
IX7 X2+X3 RA + P
IX6 X2-X4 P - FL
PL X6,CJS2 IF P .GE. FL
AX6 X2,B1
ERX1 X7 READ RA + P
R= X7,TLET PRESET TIME LIMIT ERROR FLAG
ZR X6,CJS3 IF P = 0, 1
CJS1 SA2 B7+SRUW CHECK FOR LIMITS
MX4 6
BX6 X4*X1
LX1 X2,B1
ZR X6,CJS2 IF PROGRAM STOP
LX2 59-56
BX4 X2+X1
NG X4,CJS5 IF LIMIT
SA1 B7+STSW READ CP STATUS
TJP (/MONITOR/CJS7,CP176,B4)
CJS2 SX7 PSET SET PROGRAM STOP ERROR FLAG
JP SEF
CJS3 ZR X2,CJS4 IF NOT SETCORE
NZ X1,CJS1 IF RA+1 NOT PROCESSED
CJS4 SA4 A4+B1 CLEAR EXIT MODE BITS
SA2 MABL CHECK MAINFRAME TYPE
MX6 2
ERX3 X3 READ (RA)
LX2 59-47
LX6 -7
AX3 51
PL X2,CJS4.5 IF CYBER 170-8X5
BX6 -X6*X4
SA6 A4
CJS4.5 R= X7,ARET
ZR X3,SEF IF ARITHMETIC ERROR
AX3 54-51 SHIFT OFF MODE FLAG BITS
NZ X3,SEF IF NOT PARITY ERROR
NG X2,CJS4.6 IF CYBER 170-8X5
LX2 20-16
CJS4.6 PL X2,SEF IF NOT A CYBER 170
SX7 PEET SET PARITY ERROR
EQ SEF SET ERROR FLAG
CJS5 NG X1,CJS6 IF TIME LIMIT
SX7 SRET SET SRU LIMIT FLAG
CJS6 SA2 B7+TFSW CHECK FOR INTERACTIVE JOB
MX6 12
BX6 X6*X2 EJT ORDINAL
LX6 12
CX2 X6,EJT CONVERT EJT ORDINAL TO OFFSET
MX6 -4
TA2 X2+JSNE,EJT GET CONNECTION STATUS FROM EJT ENTRY
AX2 7
BX2 -X6*X2 CONNECTION STATUS
SX6 OLCS
BX6 X2-X6
ZR X6,RB4 IF ON-LINE INTERACTIVE JOB
R= X1,DTCS
BX2 X1-X2
ZR X2,RB4 IF DETACHED INTERACTIVE JOB
TA2 SP CHECK PSEUDO-PP IR
SX4 7600B CONTROL POINT MASK
SX3 B7
AX2 36-7
BX2 X4*X2
BX3 X2-X3
ZR X3,RB4 IF PSEUDO-PP ASSIGNED TO THIS C.P.
EQ SEF SET ERROR FLAG
CPT SPACE 4,30
** CPT - UPDATE CPU TIME AND SRU ACCUMULATOR.
*
* CP = S0 * CP0 * SC + S1 * CP1 * SC
* S0 = SITE DEFINABLE CPU MULTIPLIER FOR CPU 0.
* S1 = SITE DEFINABLE CPU MULTIPLIER FOR CPU 1.
* CP0 = CPU TIME USED BY CPU 0 IN MACHINES UNITS.
* CP1 = CPU TIME USED BY CPU 1 IN MACHINES UNITS.
* SC = SCALING FACTOR TO CONVERT MACHINES UNITS INTO
* QUARTER NANOSECONDS.
* MACHINE UNITS ARE MILLISECONDS FOR CYBER 6000,
* CYBER 70 AND CYBER 171 - 175 MAINFRAMES.
* MACHINE UNITS ARE 27.5 NANOSECONDS FOR CYBER 176.
* MACHINE UNITS ARE MICROSECONDS FOR CYBER 8X5.
*
* NEW SRU = CPM*CP + OLD SRU
*
* ENTRY (B3) = EXIT ADDRESS.
*
* EXIT (X1) = *CPAL* SHIFTED LEFT CIRCULAR 36 BITS.
* (X6) = UPDATED CP ACCUMULATOR (QUARTER NANO SECONDS)
* (X0) = CPU TIME SINCE CPU SWITCH IN MACHINE UNITS.
*
* USES X - 0, 1, 2, 3, 6, 7.
* B - 4, 6.
* A - 1, 2, 3, 6, 7.
CPT SA1 RTCL READ MACHINE UNITS
SA2 CL+CPBT+A0 READ BASE TIME
MX7 -36
BX6 -X7*X1 MILLISECOND CLOCK
SA6 A2 SET NEW BASE TIME
IX0 X6-X2 TIME USED IN MACHINE UNITS
* ENTER HERE IF OTHER THAN MILLISECOND CLOCK USED.
* (X0) = CPU TIME INCREMENT IN MACHINE UNITS.
CPT1 SA1 CPAL+A0
SA2 SA+A0
SA3 CPTA+A0
LX1 -42
IX6 X2+X0
IX3 X3*X0 SCALE CPU TIME FOR CPU TYPE
SX2 X1 EXCHANGE PACKAGE TYPE
SA6 SA+A0 UPDATE TIME ACCUMULATED SINCE CPU SWITCH
BX0 X6
NZ X2,CPT5 IF INTERNAL *CPUMTR* EXCHANGE PACKAGE
* UPDATE CPU TIME AND SRU ACCUMULATOR.
LX1 18 POSITION CONTROL POINT ADDRESS
SA2 CPTW+X1 READ CONTROL POINT ACCUMULATOR
IX6 X3+X2
SA6 A2
SA2 X1+CPLW READ TIME LIMIT WORD
IX7 X2-X6
PX3 X3
NG X7,CPT4 IF TIME LIMIT
CPT2 SA2 X1+MP3W READ CPM
NG X2,RB3 IF SRU ACCUMULATION DISABLED
AX2 30
PX2 X2
NX7 X3
NX2 X2
SA3 CPTB CONVERT TO MILLIUNITS
RX2 X2*X7 CPM*CP
RX2 X2*X3 CPM * CP / 4000000
SA3 X1+SRUW READ SRU ACCUMULATOR
UX2,B4 X2
LX2 B4
IX7 X3+X2
SA7 A3
SA3 X1+STLW READ SRU LIMIT
MX2 -42
BX7 -X2*X7
BX3 -X2*X3
IX3 X7-X3
PL X3,CPT3 IF SRU LIMIT
JP B3 RETURN
CPT3 SA2 X1+SRUW SET SRU LIMIT FLAG
SX7 B1
BX3 X2
LX7 56
LX3 59-53
NG X3,RB3 IF RESOURCE LIMITS DISABLED
BX7 X2+X7
SA7 A2
JP B3 RETURN
CPT4 SA2 X1+SRUW SET TIME LIMIT FLAG
BX7 X2
LX7 59-53
NG X7,CPT2 IF RESOURCE LIMITS DISABLED
SX7 B1
LX7 58
BX7 X2+X7
SA7 A2
EQ CPT2 CHECK SRU LIMIT
* UPDATE CPU TIME FOR INTERNAL *CPUMTR* EXCHANGE PACKAGE.
CPT5 LX1 42 POSITION EXCHANGE PACKAGE ADDRESS
SA2 X1+CTMW UPDATE ACCUMULATOR
IX6 X2+X3
LX1 -24 POSITION *CPAL* TO CONTROL POINT
SA6 A2
JP B3 RETURN
CPTA CON 4000000 QUARTER NANOUNITS PER MACHINE UNIT * S0
CON 4000000 QUARTER NANOUNITS PER MACHINE UNIT * S1
CPTB DATA 0.25E-6 MILLISECONDS PER QUARTER NANOSECOND
CPTC CON 4000000.0 QUARTER NANOUNITS PER MILLISECOND
EFP SPACE 4,20
** EFP - EXECUTE FUNCTION POST PROCESSOR OVERLAY.
*
* ENTRY (X5) = 12/0, 48/OUTPUT REGISTER RESPONSE.
* (X7) = OVERLAY CALL PARAMETERS.
* (B4) = OVERLAY PLD POINTER.
* (B3) = RETURN ADDRESS.
*
* EXIT OUTPUT REGISTER RESPONSE SET IN WORD *SBFP + 0* IN
* EXTENDED PP COMMUNICATION BLOCK.
* PARAMETERS SET IN WORD *SBFP + 1* OF EXTENDED PP
* COMMUNICATION BLOCK.
* *BOTM* FUNCTION ISSUED TO PP.
* TO *HNG* IF OVERLAY NOT CM RESIDENT.
*
* *BOTM* FUNCTION FORMAT -
*
* 12/ *BOTM*,24/ OVERLAY CODE FWA,24/ *SBFP + 2* ADDRESS
*
* USES X - 1, 2, 3, 4, 7.
* A - 1, 3, 4, 7.
EFP BSS 0 ENTRY
* SET PARAMETERS AND OUTPUT REGISTER RESPONSE.
* A *PRLM* WILL BE SET IN THE OUTPUT REGISTER IF THERE IS A
* MOVE REQUEST FOR THE CP/PCP IN CASE STORAGE MOVE HAD BEEN
* ENABLED PREVIOUSLY.
TX3 A5-1,-FP
SA1 CMCL
LX3 PPXES-PPCES
TA3 X3+ACPP,FPX GET CP/PCP ASSIGNMENT
SA4 B4 GET PLD POINTERS
SA7 A3+SBFP+1-ACPP SET CALL PARAMETERS
BX3 X3-X1
BX7 X5
AX3 48
SX1 A7+B1 COMMUNICATION BLOCK POINTER FOR CALL
NZ X3,EFP1 IF NO MOVE REQUEST FOR CP/PCP
SX2 PRLM SET PAUSE REQUEST
LX2 48
BX7 X7+X2
EFP1 AX4 24
SA7 A7-B1 SET OUTPUT REGISTER
* ISSUE *BOTM* FUNCTION TO PP.
SX4 X4+1-400000B
SX7 BOTM
LX4 24 OVERLAY CODE FWA
LX7 48
BX4 X4+X1
BX7 X7+X4
SA7 A5+ SET *BOTM* FUNCTION AND PARAMETERS
JP B3 RETURN
EPR SPACE 4,15
** EPR - ENTER PROGRAM REQUEST.
* THIS ROUTINE CAN ONLY BE ENTERED FROM CPU-0 IF BOTH
* CPU-S ARE IN USE. THIS INSURES THAT *PR* IS
* INTERLOCKED PROPERLY.
*
* ENTRY (X0) = REQUEST BIT.
*
* USES X - 2, 6.
* B - 3, 6.
* A - 2, 6.
*
* CALLS RCC.
EPR SA2 PR SET REQUEST BIT
SB3 MTRX SET *RCC* RETURN ADDRESS
TB6 SCA SET EXCHANGE PACKAGE ADDRESS
BX6 X2+X0
SA6 A2
EQ RCC RECALL CPU
IAA SPACE 4,40
** IAA - INCREMENT AUC ACCUMULATOR.
*
* PARAMETER BLOCK FORMAT -
*
*T ADDR 6/ BC,22/ 0,32/ CP
*T ADDR+1 10/ 0,10/ MS,10/ 0,10/ MT,10/ 0,10/ PF
*T ADDR+2 10/ 0,10/ OD,20/ MP,20/ AU
*T ADDR+3 36/ 0,12/ EM,12/ CM
*
* BC = BLOCK CODE = 01B.
* CP = CP TIME (QUARTER NANOUNITS).
* MS = MS UNITS.
* MT = MT UNITS.
* PF = PF UNITS.
* OD = OD UNITS.
* MP = MP UNITS.
* AU = AUC MILLIUNITS.
* EM = EXTENDED MEMORY SIZE/1000B.
* CM = CENTRAL MEMORY SIZE/100B.
*
* SRU INCREMENT =
*
* M1(CP + M2*IO + M3(CP+IO)CM +
* M4(CP+IO)EC + MM*MP + AU)
*
* = M1((1 + M3*CM + M4*EC)CP +
* (M2 + M3*CM + M4*EC)IO + MM*MP + AU)
*
* = (M1 + M1*M3*CM + M1*M4*EC)CP +
* (M1*M2 + M1*M3*CM + M1*M4*EC)IO + M1*MM*MP + M1*AU
*
* = CPM*CP + IOM*IO + M1M*MP + M1*AU.
*
* AUC INCREMENT = SRU INCREMENT / M1.
*
* ENTRY (B3) = EXIT ADDRESS.
* (B7) = CONTROL POINT AREA ADDRESS.
* (X2) = ABSOLUTE PARAMETER BLOCK ADDRESS.
*
* EXIT (B3) = EXIT ADDRESS.
* (B4) = OVERFLOW FLAG.
* (B5) = 0, IF NO ERROR.
* = 1, IF EXCESSIVE INCREMENT.
* (B7) = CONTROL POINT AREA ADDRESS.
* (X5) = PRESERVED.
* TO *AIO1* TO INCREMENT SRU ACCUMULATOR.
*
* USES X - 0, 1, 2, 3, 4, 6, 7.
* A - 1, 2, 3, 6.
* B - 4, 5, 6, 7.
IAA BX3 X2 GET PARAMETER BLOCK CODE
ERX3 X3
MX6 6
BX6 X6*X3
LX6 6
SB4 X6
SB5 B0+ SET NO ERROR
EQ B4,B1,IAA1 IF CODE = 01
JP B3 EXIT
IAA1 SA1 B7+MP2W M1*1000
LX1 36
MX0 -18
BX6 -X0*X1 M12
AX1 18
BX1 -X0*X1 M1*1000
SB4 X1 SAVE M1*1000
SX4 3 GET *EM* AND *CM*
IX4 X2+X4
ERX4 X4
SB6 X6 SAVE M12
MX6 -12
BX1 -X6*X4 CM/100B
AX4 12
BX7 -X6*X4 EM/1000B
MX6 -3
IX1 X1-X6 ROUND CM/100B WITH 7B
AX1 3 CM = (CM/100B + 7B)/10B
SB5 X1 SAVE CM/1000B
ERRNZ MP2W-MP1W-1 CODE DEPENDS ON CONTIGUOUS WORDS
SA1 A1-B1 GET M13 AND M14
LX1 36
BX6 -X0*X1 ISOLATE M14
IX7 X7*X6 M14 * EM/1000B
AX1 18
BX1 -X0*X1 ISOLATE M13
SX6 B5 CM/1000B
IX1 X6*X1 CM/1000B * M13
IX1 X1+X7 M13*CM + M14*EC
BX7 X1
MX6 -54 CHECK *CP* SIZE
BX4 -X6*X3
MX6 -32 ISOLATE *CP*
BX3 -X6*X3
IX6 X4-X3
NZ X6,IAA7 IF INCREMENT TOO LARGE
SX6 B4 M1*1000
IX1 X1+X6 M1*1000 + M13*CM + M14*EC
PX3 X3
PX1 X1
NX4 X3
NX1 X1
SA3 CPTB CONVERT TO MILLIUNITS
RX1 X1*X4 CPM * CP
RX1 X1*X3 CPM * CP / 4000000
UX1,B5 X1
LX1 B5
SX4 B1+B1 GET *AU* AND *MP*
IX4 X2+X4
ERX4 X4
MX0 -20
BX6 -X0*X4 *AU*
SX3 B4
IX6 X3*X6 M1*1000 * AU
IX1 X6+X1 CPM*CP + M1*1000*AU
LX4 20
BX6 -X0*X4 *OD* (SET FOR IO LOOP INITIAL PASS)
SA3 B7+MPMW GET M1 * MAP MULTIPLIER
LX4 20
BX4 -X0*X4 *MP*
LX3 20
BX3 -X0*X3
IX3 X3*X4 MP * M1M
IX1 X1+X3 CPM*CP + M1*1000*AU + MP*M1M
SX3 B6+ M12
IX7 X7+X3 M12 + M13*CM + M14*EC
PX7 X7
NX7 X7
SX4 B1+ GET *IO* COMPONENTS
IX4 X4+X2
ERX4 X4
SB5 B0+ INITIALIZE INDEX
LX4 20
IAA2 MX3 -10
ZR X6,IAA3 IF NO INCREMENT
LX3 10
BX3 -X3*X6
NZ X3,IAA7 IF INCREMENT TOO LARGE
PX6 X6
SA3 B5+AIOA GET MULTIPLIER
NX6 X6
RX6 X3*X6 IO = (S2, S3, S4, S5) * (MS, MT, PF, OD)
RX3 X6*X7 IOM*IO
UX3,B6 X3
LX3 B6
IX1 X1+X3
IAA3 LX4 -20
BX6 -X0*X4 ISOLATE INCREMENT
SB5 B5+1
SB6 4
NE B5,B6,IAA2 IF MORE *IO* COMPONENTS
BX4 X1 DIVIDE BY M1*1000 FOR AUC INCREMENT
SX3 B4
SB4 B7 SAVE CONTROL POINT ADDRESS
IX6 X4/X3 AUC INCREMENT
SB7 B4 RESTORE CONTROL POINT ADDRESS
MX0 19 CHECK FOR INCREMENT TOO LARGE
BX3 X0*X1
NZ X3,IAA7 IF SRU INCREMENT TOO LARGE
MX0 31
BX3 X0*X6
NZ X3,IAA7 IF AUC INCREMENT TOO LARGE
* ADD INCREMENT TO AUC ACCUMULATOR.
SB4 40B PRESET OVERFLOW FLAG
SA2 B7+AUCW GET AUC ACCUMULATOR
BX3 -X0*X2
IX3 X3+X6 ADD INCREMENT
BX7 X0-X3
NZ X7,IAA4 IF NOT MAXIMUM
SX3 B0+ SET ACCUMULATOR = 0
EQ IAA6 SET NEW ACCUMULATOR VALUE
IAA4 BX7 X0*X3 CHECK FOR OVERFLOW
ZR X7,IAA5 IF NO OVERFLOW
BX3 -X0*X3 INCREMENT TO OVERFLOW VALUE - MAXIMUM
EQ IAA6 SET NEW ACCUMULATOR VALUE
IAA5 SB4 B0+ CLEAR OVERFLOW FLAG
IAA6 BX6 X0*X2 SET NEW VALUE INTO AUCW
BX6 X6+X3
SA6 A2
SB5 B0 SET NO ERROR FOR RETURN
EQ AIO1 INCREMENT SRU ACCUMULATOR
IAA7 SB5 B1+ SET EXCESSIVE INCREMENT ERROR
JP B3 EXIT
IBF SPACE 4,20
** IBF - ISSUE *BOTM* FUNCTION.
*
* *IBF* FORMATS AND ISSUES A *BOTM* FUNCTION TO *PPR* TO
* EXECUTE AN OVERLAY PROGRAM VIA A BOOTSTRAP LOADER. *IBF*
* ALLOCATES A PP SAVE AREA, MOVES THE PP-S OUTPUT REGISTER AND
* MESSAGE BUFFER TO IT, PRESETS A THREE-WORD BOOTSTRAP, SETS IT
* IN THE PP SAVE AREA, AND THEN ISSUES THE *BOTM* TO THE PP.
*
* THE PRESETTING USES INFORMATION LOCATED IN THE FOURTH WORD OF
* THE BOOTSTRAP, DESCRIBED BELOW AS *BS+3*.
*
* ENTRY (X3) = 12/ 0, 24/ BP, 12/0, 6/OX, 6/BX.
* BP = *BOTM* PARAMETERS FOR BYTES 3 AND 4.
* OX = *TFPL* INDEX OF OVERLAY.
* BX = *TFPL* INDEX OF BOOTSTRAP.
* (A5) = *OR* ADDRESS.
* (B5) = RETURN ADDRESS IF *SYSEDIT* ACTIVE OR NO PP
* SAVE AREA AVAILABLE.
* (BS+3) = 12/2000B+PA, 48/ PP.
* PA = PRESET ALGORITHM.
* PP = PRESET PARAMETERS.
* WHEN A PP SAVE AREA IS USED, THIS FIELD
* MUST BE FORMATTED AS FOLLOWS.
* 12/ L1, 12/ L2, 12/ F1, 12/ F2.
* L1 = LENGTH OF THE FIRST BLOCK SAVED.
* L2 = LENGTH OF THE SECOND BLOCK SAVED.
* F1 = FIRST BYTE ADDRESS OF FIRST BLOCK.
* F2 = FIRST BYTE ADDRESS OF SECOND BLOCK.
* *DSDI* USES THIS INFORMATION.
*
* EXIT TO *SPL* IF BOOTSTRAP CAN BE EXECUTED.
* TO *B5* RETURN ADDRESS VIA *REJ* IF BOOTSTRAP CANNOT
* BE EXECUTED.
*
* USES X - 0, 1, 3, 4, 5, 6, 7.
* A - 1, 3, 4, 6, 7.
* B - 4, 6.
*
* CALLS MSM, MSR, SPL.
IBF BSS 0 ENTRY
MX4 -6
BX4 -X4*X3
AX3 6
SX1 X3
SA4 X4+TFPL-1 GET BOOTSTRAP *TFPL* ENTRY
SA1 X3+TFPL-1 GET OVERLAY *TFPL* ENTRY
SX6 X4
SX7 X1
ZR X6,REJ IF BOOTSTRAP ENTRY NOT INITIALIZED
ZR X7,REJ IF OVERLAY ENTRY NOT INITIALIZED
LX7 18
BX6 X6+X7
SA6 T1 SAVE PLD POINTERS
* ALLOCATE PP SAVE AREA FOR OVERLAY CALL.
SA1 PPSP GET PP SAVE AREA POINTER
MX7 -12
BX7 -X7*X1 GET NUMBER OF SAVE AREAS
AX1 12
SA1 X1-PPSA
SX0 A5+ SET MOVE SOURCE ADDRESS
IBF1 SA1 A1+PPSA GET SAVE AREA INTERLOCK WORD
SX7 X7-1
NG X7,REJ IF NONE AVAILABLE
NZ X1,IBF1 IF THIS SAVE AREA IS INTERLOCKED
SX5 A1+B1 SET MOVE DESTINATION ADDRESS
TSB4 (7,CME,7,CMUMTR,10B) SET MOVE WORD COUNT
IX1 X0-X5 SET MOVE DIFFERENCE
SB6 IBF2 SET RETURN ADDRESS
TJP (/CME/MSR,CME,/MONITOR/MSM,CMUMTR,/MONITOR/MSR)
IBF2 SA1 T1
SX4 X1 RESTORE BOOTSTRAP PLD POINTER
AX1 18 RESTORE OVERLAY PLD POINTER
* BUILD BOOTSTRAP CALL.
R= X0,BOTM BUILD *BOTM* FUNCTION
AX3 6 POSITION *BOTM* PARAMETERS
BX0 X0+X3
SA4 X4 GET BOOTSTRAP PLD ENTRY
LX0 24 POSITION THE *BOTM* PARAMETERS
AX4 24 GET BOOTSTRAP FWA
SB6 X4
PL B6,HNG IF BOOTSTRAP IS NOT CM RESIDENT
SA3 X4+4-400000B GET BOOTSTRAP PRESET CONTROL WORD
SX7 A5 BUILD THE PP SAVE AREA INTERLOCK
SA4 A3-B1 GET LAST WORD OF BOOTSTRAP
LX7 48 POSITION OUTPUT REGISTER ADDRESS
UX6,B6 X3 GET PRESET ALGORITHM AND *BOTM* PARAMETERS
SA3 A4-B1
BX7 X7+X6
SA1 X1+ GET OVERLAY PLD ENTRY
SA7 X5-1 SET THE PP SAVE AREA INTERLOCK
SX5 X5+7 FWA OF BOOTSTRAP IN PP SAVE AREA
AX6 24 POSITION *BOTM* DATA
BX7 X0+X5
LX7 24
IX7 X7+X6
NZ B6,HNG IF UNUSED PRESET ALGORITHM INDEX
* EXIT TO THE BOOTSTRAP PRESET CODE WITH THESE VALUES -
*
* (A1) = ADDRESS OF OVERLAY-S PLD ENTRY.
* (A3) = ADDRESS OF SECOND WORD OF BOOTSTRAP.
* (A4) = ADDRESS OF LAST WORD OF BOOTSTRAP.
* (B6) = PRESET INDEX.
* (X1) = OVERLAY-S PLD ENTRY.
* (X3) = SECOND WORD OF BOOTSTRAP.
* (X4) = LAST WORD OF BOOTSTRAP.
* (X5) = FWA OF BOOTSTRAP IN PP SAVE AREA.
* (X7) = *BOTM* CALL WORD.
* PRESET ALGORITHM 0.
*
* (MB) = OVERLAY LOAD PARAMETERS FROM *SPL*.
* (MB+1) = *BOTM* CALL WORD.
BX6 X3
SA3 A3-B1
SB6 IBF3 *SPL* RETURN ADDRESS
SA6 X5+B1
BX5 X7
SA7 A5+2 SAVE *BOTM* CALL IN *MB*+1
BX7 X4
MX4 18
SA7 A6+B1
MX7 6
BX6 X3
BX7 X7*X1
SA6 A6-B1
LX7 -54
EQ SPL1.1 BUILD LOAD PARAMETERS
IBF3 SA7 A5+B1 SAVE LOAD PARAMETERS IN *MB*
BX7 X5 RESTORE *BOTM*
EQ PPR1 ISSUE *BOTM*
JAV SPACE 4,40
** JAV - JOB ADVANCE.
*
* CONDITIONS REQUIRED FOR ADVANCE-
*
* ROLLOUT FLAG SET-
* 1) NO PP,S ASSIGNED.
* 2) EJT ENTRY INTERLOCK NOT SET.
* 3) NO ROLLOUT INHIBITING RECALL REQUESTS.
* IE. ENTRIES IN BQ OR CQ.
* 4) EJT ORDINAL IN *TFSW* OF CONTROL POINT.
* 5) STORAGE MOVE NOT PENDING FOR THIS CP.
* 6) LEVEL 3 DEADSTART NOT IN PROGRESS.
*
* IF ROLLOUT FLAG NOT SET-
* 1) NO PP,S ASSIGNED.
* 2) EJT ENTRY INTERLOCK NOT SET.
* 3) NO CPU ACTIVITY.
* 4) NO PP IN RECALL.
* 5) NO TAPE ACTIVITY.
* 6) NO WAIT RESPONSE/LONG TERM CONNECTION SET. (IF ERROR
* FLAG IS SET, OR *END* IS IN (RA+1) THIS CONDITION
* DOES NOT INHIBIT ADVANCE.)
* 7) EJT ORDINAL IN *TFSW* OF CONTROL POINT.
* 8) STORAGE MOVE NOT PENDING FOR THIS CP.
* 9) LEVEL 3 DEADSTART NOT IN PROGRESS.
*
* ENTRY (B3) = EXIT ADDRESS.
* (B7) = CP ADDRESS.
*
* EXIT NONE
*
* USES X - 1, 2, 3, 4, 6, 7.
* B - 4.
* A - 1, 2, 4, 7.
*
* CALLS APQ, /PCP/APC, RB3.
JAV BSS 0 ENTRY
SA2 DSSL CHECK FOR DEADSTART IN PROGRESS
SA1 B7+STSW
MX6 -3
BX6 -X6*X2
SX6 X6-7
ZR X6,RB3 IF A LEVEL 3 DEADSTART IN PROGRESS
SX6 7377B
LX6 -12
BX3 X6*X1
MX6 12
NZ X3,RB3 IF ACTIVITY REMAINS
SA2 SMRL
MX4 -12
BX2 -X4*X2
LX2 7 CONVERT CP NUMBER TO CPA ADDRESS
SB4 X2
EQ B4,B7,RB3 IF MOVE PENDING FOR THIS CP
SX2 7400B
LX6 12+11
BX3 X2*X1
LX1 59-24
LX2 -4+35 POSITION TO RECALL COUNT
NG X1,JAV1 IF ROLLOUT SET
BX4 X6*X1
BX3 X1*X2 EXTRACT RECALL COUNT
NZ X4,JAV1 IF ERROR FLAG
SA4 B7+SSCW
ZR X4,JAV1 IF NO SUBSYSTEM CONNECTIONS
SA2 B7+FLSW READ RA/FL
MX6 -12
BX4 -X6*X2
ZR X4,RB3 IF NO FIELD LENGTH
LX2 -12
MX6 -RMSK
BX2 -X6*X2 EXTRACT RA
SX6 B1
LX2 6
IX2 X2+X6
ERX2 X2 READ (RA+1)
LX2 18
SX2 X2-3REND
NZ X2,RB3 IF NOT END IN RA+1
JAV1 NZ X3,RB3 IF ACTIVITY REMAINS
SA4 B7+TFSW GET EJT ORDINAL
MX6 -12
LX4 -48
BX2 -X6*X4 EJT ORDINAL
CX4 X2,EJT CONVERT EJT ORDINAL TO OFFSET
ZR X2,RB3 IF NO JOB AT CP
TA4 X4+JSNE,EJT
SX7 101B JOB ADVANCE AND INTERLOCK MASK
BX6 X7*X4
BX7 X4+X7 SET JOB ADVANCE AND INTERLOCK
NZ X6,RB3 IF JOB ADVANCE OR INTERLOCK ALREADY SET
SA7 A4
LX1 59-31-59+24
JAVA TNG X1,(/PCP/APC,PCP,/MONITOR/JAV2) IF PSEUDO-ROLL OK
* EQ /TRACE/TRP13 (DURING DEAD JOB TRAP EXECUTION)
JAV2 SX6 3R1AJ
R= B4,LA1AJ SET *1AJ* INDEX
LX6 42
EQ APQ ASSIGN *1AJ*
PCQ SPACE 4,10
** PPQ - PROCESS PP REQUEST QUEUE.
*
* ENTRY NONE.
*
* EXIT TO MTRX.
*
* CALLS APQ.
PPQ SA1 PQ+TAQR SET START OF QUEUE
SA2 SCRL CHECK EMERGENCY STEP
AX1 18
SX0 X1
LX2 59-56
SB3 PPQ2 *APQ* RETURN ADDRESS
NG X2,MTRX IF EMERGENCY STEP SET
PPQ1 SA1 X0+ FIND NEXT ENTRY IN QUEUE
SX1 X1
SA2 PPAL
ZR X1,MTRX IF NO PP REQUEST
SX0 X0
LX0 36
BX0 X0+X1
MX4 20
LX4 -12
BX2 X4*X2
ZR X2,MTRX IF NO PP AVAILABLE
SA4 X1+REPW-RCCW GET PARAMETER WORD
MX7 -12+7 CONTROL POINT AREA ADDRESS MASK
BX6 X4
SA6 APQA
SA4 X1+RECW-RCCW READ PP REQUEST
LX7 7
BX6 X4
BX7 -X7*X1
SB4 -B3 SELECT RETURN IF PP UNASSIGNABLE
SB7 X7+
BX1 X1-X1
EQ APQ1 ASSIGN PP
PPQ2 SA2 X0 CHECK FOR PRIORITY PP REQUEST
BX6 X1
BX3 X2
MX7 -18
AX3 18
BX3 -X7*X3
NG X2,PPQ2.1 IF A NO ROLL REQUEST
ZR X3,PPQ3 IF NOT PRIORITY PP REQUEST
ZR X1,PPQ4 IF PP NOT ASSIGNED
LX6 36 RETURN ASSIGNMENT ADDRESS
SA6 X3+
PPQ2.1 SX3 -400B SET DECREMENT FOR INHIBIT ROLLOUT COUNT
PPQ3 ZR X1,PPQ1 IF NO PP AVAILABLE
AX0 36
SA1 X0 DELETE ENTRY FROM QUEUE
BX6 -X7*X2
BX1 X7*X1
BX6 X1+X6
SA6 A1
MX4 -4
BX6 X6-X6
SA1 B7+STSW ADD RECALL SLOT TO FREE LIST
SX3 X3-20B-RCCW+1
SA6 A2+RECW-RCCW
SA6 A2+REPW-RCCW
BX7 -X4*X1
BX1 X4*X1
SX4 A2-B7 COMPUTE RECALL INDEX
SA7 A2
IX4 X4+X3
IX7 X4+X1 SET NEW FREE ENTRY AND RECALL COUNT
SA7 A1+
EQ PPQ1 PROCESS NEXT QUEUE ENTRY
PPQ4 BX6 X6-X6
SA6 X3 RETURN RESPONSE TO WAITING PP
SX1 B1+
SX3 -400B SET DECREMENT FOR INHIBIT ROLLOUT COUNT
EQ PPQ3 DELETE FROM QUEUE
RB3 SPACE 4,10
** RB3 - RETURN TO ADDRESS IN (B3).
*
* ENTRY (B3) = EXIT ADDRESS.
RB3 JP B3 RETURN
RB4 SPACE 4,10
** RB4 - RETURN TO ADDRESS IN (B4).
*
* ENTRY (B4) = EXIT ADDRESS.
RB4 JP B4 RETURN
RB5 SPACE 4,10
** RB5 - RETURN TO ADDRESS IN (B5).
*
* ENTRY (B5) = EXIT ADDRESS.
RB5 JP B5 RETURN
RB6 SPACE 4,10
** RB6 - RETURN TO ADDRESS IN (B6).
*
* ENTRY (B6) = EXIT ADDRESS.
RB6 JP B6 RETURN
RCC SPACE 4,20
** RCC - RECALL CPU.
*
* THIS ROUTINE MAKES THE REQUESTED JOB OR EXCHANGE PACKAGE A
* CANDIDATE FOR THE CPU. A CPU SWITCH REQUEST WILL BE ENTERED
* IN *CSWL* FOR THE CURRENTLY EXECUTING OR THE ALTERNATE CPU IF
* THE JOB IN THAT CPU CAN BE IMMEDIATELY PREEMPTED. A SWITCH
* REQUEST FOR THE CURRENT CPU WILL BE PROCESSED DIRECTLY BY
* *CPUMTR* ON EXIT FROM MONITOR MODE. A SWITCH REQUEST FOR THE
* ALTERNATE CPU WILL BE DETECTED AND PROCESSED THE NEXT TIME
* THE ALTERNATE CPU EXITS FROM MONITOR MODE OR WILL BE
* INITIATED BY *MTR*.
*
* ENTRY (B3) = EXIT ADDRESS.
* (B6) = EXCHANGE PACKAGE ADDRESS.
*
* USES X - 0, 1, 2, 3, 4, 6, 7.
* B - 4, 5.
* A - 1, 2, 3, 4, 6, 7.
RCC BSS 0 ENTRY
SA1 B6+STSW GET CPU STATUS
MX4 1 BUILD *W* STATUS
MX2 -57
BX6 -X2*X1 CLEAR OLD STATUS
BX2 X2*X1 STATUS CODE
LX1 59-24
LX2 3
BX6 X6+X4
SB4 X2+
SB4 -B4 NEGATIVE STATUS CODE
* THE FOLLOWING IS A JUMP TABLE INDEXED BY CPU STATUS
* IN REVERSE ORDER.
RCCA NG X1,RCC15 IF ROLLOUT SET
JP RCCA+7+B4 JUMP TO PROCESSOR, LOOP FOR STATUS = 7
+ SA6 A1+ 6 = *I* STATUS, AUTO RECALL
EQ RCC7 ADD ENTRY TO WQ
+ SA3 B6+CRCW 5 = *X* STATUS, CPU RECALL
EQ RCC4 DELETE ENTRY FROM *RQ* AND ADD TO *WQ*
+ SA3 B6+CWQW 4 = *W* STATUS, WAITING FOR CPU
EQ RCC3 DELETE FROM *WQ* AND REINSERT
+ EQ * 3 = ILLEGAL
+ SX1 B1 2 = *B* STATUS, CPU 1 ACTIVE ON JOB
SX7 B1
EQ RCC2 SET RECALL FLAG
+ SX1 B0 1 = *A* STATUS, CPU 0 ACTIVE ON JOB
SX7 B1
EQ RCC2 SET RECALL FLAG
+ LX1 12+24-59 0 = NULL STATUS, NO ACTIVITY
AX1 48 EXTRACT ERROR FLAG
NZ X1,RB3 IF ERROR FLAG
SA6 A1+ SET *W* STATUS
EQ RCC7 ENTER IN CPU REQUEST QUEUE
* SET RECALL FLAG ON ACTIVE JOB TO ENFORCE RECALL CPU SLICE.
RCC2 SA3 B6+CWQW
SA1 TSCL+X1
SX6 12B
LX6 45
LX7 48-0
BX6 X3+X6 SET RECALL AND DRIVER FLAGS IN *CWQW*
BX7 X1+X7 SET RECALL FLAG IN *TSCL*
SA6 A3 UPDATE *CWQW*
SA7 A1 UPDATE *TSCL*
JP B3 RETURN
* DELETE ENTRY FROM *WQ*.
RCC3 SX1 WQRL
MX6 -18
SX7 A3 SET *WQ* ENTRY ADDRESS
EQ RCC5 DELETE QUEUE ENTRY
* DELETE ENTRY FROM *RQ*.
RCC4 SX1 RQRL 5 = *X* STATUS, CPU RECALL
SA6 A1 SET NEW CPU STATUS
BX7 X7-X7
MX6 -12
SA7 A3 CLEAR *RQ* PARAMETERS
SX7 A3+ SET *RQ* ENTRY ADDRESS
* DELETE ENTRY FROM *RQ* OR *WQ*.
* SEARCH LOOP REPLICATED FOR PERFORMANCE.
RCC5 SA2 X1
BX1 -X6*X2
BX0 X7-X1
SA4 X1
ZR X0,RCC6 IF ENTRY FOUND
BX1 -X6*X4
BX0 X7-X1
NZ X0,RCC5 IF ENTRY NOT FOUND
SA2 A4+
RCC6 BX2 X6*X2 DELETE LINK TO ENTRY
BX3 -X6*X3 EXTRACT LINK FROM ENTRY
BX7 X2+X3 SET LINK TO BYPASS ENTRY
SA7 A2
* SET RECALL FLAG AND CHECK CPU SLICE RESTART REQUIRED.
RCC7 SA3 B6+CWQW GET CPU SCHEDULING PARAMETERS
SA4 B6+CSAW GET SERVICE CYCLE AND ACCUMULATORS
SX6 12B
SX0 B1
LX6 45
LX0 26-0
UX7,B4 X3 UNPACK CPU PRIORITY AND FLAGS
SX1 B4
BX3 X3+X0 SET *MTR* BYPASS FLAG
AX1 3 CPU PRIORITY
BX3 X3+X6 SET RECALL AND DRIVER FLAGS
SA1 TPRC+X1 GET SERVICE CYCLE FOR PRIORITY
SA2 WQRL
LX0 47-26
BX0 X0*X3 EXTENDED CPU SLICE INCOMPLETE FLAG
MX7 6
LX0 49-47
BX4 X7*X4 CPU SERVICE CYCLE
BX3 X3+X0 SET SLICE ACTIVE STATUS
BX7 X7*X1 CURRENT SERVICE CYCLE
BX1 X4-X7
ZR X1,RCC8 IF CPU SLICE IN CURRENT SERVICE CYCLE
* RESTART CPU SLICE IN CURRENT SERVICE CYCLE.
LX6 1
SA7 B6+CSAW SET SERVICE CYCLE AND CLEAR ACCUMULATORS
BX3 X3+X6 SET ACTIVE/INCOMPLETE SLICE FLAGS
* INSERT JOB IN *WQ* WITH RECALL FLAG.
* SEARCH LOOP REPLICATED FOR PERFORMANCE.
RCC8 MX6 42
SX7 A3+ SET CURRENT JOB WAIT QUEUE ADDRESS
UX0,B4 X3 GET CPU PRIORITY AND FLAGS
RCC9 SA4 X2
UX0,B5 X4
GT B4,B5,RCC10 IF POSITION FOUND
SA2 X4
UX0,B5 X2
LE B4,B5,RCC9 IF POSITION NOT FOUND
BX1 X6*X4 CLEAR LINK
BX7 X1+X7 MERGE NEW LINK
SX0 A2 SET LINK TO NEXT ENTRY
SA7 A4
EQ RCC11 UPDATE LINK
RCC10 BX1 X6*X2 CLEAR LINK
BX7 X1+X7 MERGE NEW LINK
SX0 A4 SET LINK TO NEXT ENTRY
SA7 A2
* SET RECALLED JOB *WQ* LINK AND CHECK CPU SWITCH CRITERIA.
* IF THERE IS A SWITCH REQUEST FOR THE CURRENT CPU ON A DUAL
* CPU SYSTEM, THE OTHER CPU WILL NOT BE CHECKED BY *RCC* SINCE
* *BNJ* WILL PERFORM THIS CHECK ON EXIT FROM MONITOR MODE.
RCC11 SA4 CSWL+A0
SA1 TSCL+A0
SA2 RTCL
BX3 X6*X3 CLEAR POSSIBLE OLD LINK
BX3 X3+X0 MERGE NEW LINK
NO
NO
NG X4,RCC14 IF PENDING SWITCH REQUEST FOR THIS CPU
MX7 -36
UX0,B5 X1 GET THIS CPU ACTIVE JOB PRIORITY
BX1 -X7*X1
BX2 -X7*X2
RCCB GT B4,B5,RCC13 IF NEW JOB .GT. ACTIVE JOB
* EQ /DCP/RCC (DUAL CPU MACHINE)
LT B4,B5,RCC14 IF NEW JOB .LT. ACTIVE JOB
RCC12 IX6 X2-X1
NG X6,RCC14 IF RECALL SLICE NOT EXPIRED
* WRITE *CWQW* AND REQUEST CPU SWITCH.
RCC13 SX1 A3
MX7 1
LX1 36
BX7 X4+X7 SET SWITCH REQUEST FLAG
BX6 X3
BX7 X7+X1 SET POINTER TO *WQ* ENTRY WITH BYPASS FLAG
SA6 A3 WRITE *CWQW*
SA7 A4 WRITE *CSWL*
JP B3 RETURN
* CLEAR *MTR* BYPASS FLAG.
RCC14 SX7 B1
LX7 26-0
BX6 -X7*X3 CLEAR BYPASS FLAG
SA6 A3 WRITE *CWQW*
JP B3 RETURN
* PROCESS RECALL REQUEST WITH ROLLOUT PENDING.
RCC15 LX1 12+24-59
SX2 B1
AX1 48 EXTRACT ERROR FLAG
LX2 25
NZ X1,RB3 IF ERROR FLAG SET
BX6 X2+X6 SET CPU STATUS AT ROLLOUT
LX2 59-25
BX6 -X2*X6 CLEAR *W* STATUS
SA6 A1 SET NULL STATUS
JP B3 RETURN
RSC SPACE 4,30
** RSC - RETURN SUB-SYSTEM CONTROL POINT ADDRESS.
*
* ENTRY (X0) = -7777B
* (X1) = SUBSYSTEM IDENTIFICATION.
* (B3) = EXIT ADDRESS.
* ((B3)-1) = EXIT ADDRESSES FOR ERROR CASES.
* ((B3)-1) = 12/ A1-XA,18/ A2,12/ A3-XA,18/ A4
* XA = EXIT ADDRESS = (B3)
* A1 = EXIT ADDRESS IF SUB-SYSTEM NOT ACTIVE.
* NOTE - IF THE SUB-SYSTEM FL IS ZERO IT
* IS TREATED AS A NOT ACTIVE CONDITION.
* A2 = EXIT ADDRESS IF ILLEGAL SUBSYSTEM ID.
* A3 = EXIT ADDRESS IF JOB ADVANCE OR DMP= SET.
* A4 = EXIT ADDRESS IF STORAGE MOVE SET.
* (B7) = CALLER,S CONTROL POINT ADDRESS.
*
* EXIT (X0) = -7777B
* (X3) = SUB-SYSTEM RA.
* (X6) = SUB-SYSTEM FL.
* (A2) = STSW ADDRESS IN SUB-SYSTEM CONTROL POINT AREA.
*
* USES X - 1, 2, 3, 6.
* B - 6.
* A - 1, 2.
*
* CALLS RSI.
RSC SB6 RSC1 SET RETURN ADDRESS FOR *RSI*
EQ RSI1 RETURN SUBSYSTEM INFORMATION
* RETURN FROM *RSI* IF ILLEGAL SUBSYSTEM IDENTIFICATION.
RSC1 SA1 B3-B1 GET RETURN ADDRESS
AX1 30
EQ RSC6 RETURN
* RETURN FROM *RSI* WITH SUBSYSTEM INFORMATION.
+ SB6 X3 SHIFT COUNT
AX2 B6
LX2 -12
MX3 -5
PL X2,RSC4 IF SUBSYSTEM NOT ACTIVE
SA2 A2+SSCTL GET *SSAT* WORD FOR THIS SUBSYSTEM
AX2 B6
BX6 -X0*X2 GET EJT ORDINAL OF SUBSYSTEM
CX2 X6,EJT CONVERT EJT ORDINAL TO OFFSET
TA2 X2+JSNE,EJT GET EJT ENTRY
LX2 -1
BX6 -X3*X2 GET JOB STATUS
SX6 X6-EXJS
LX2 59-6+1
NZ X6,RSC4 IF SUBSYSTEM NOT AT CONTROL POINT
NG X2,RSC7 IF JOB ADVANCE SET ON SUBSYSTEM
SA2 A2+SCHE-JSNE GET CONTROL POINT NUMBER
AX2 12
BX6 -X3*X2
LX6 7 SUBSYSTEM CONTROL POINT ADDRESS
SA2 X6+JCIW READ JOB CONTROL
AX2 24
BX3 X2-X1
SA1 SMRL CHECK FOR STORAGE MOVE IN PROGRESS
BX3 -X0*X3
NZ X3,RSC4 IF SUB-SYSTEM NOT ACTIVE
BX1 -X0*X1
LX1 7
SA2 X6+STSW
BX1 X1-X6
ZR X1,RSC5 IF SUBSYSTEM MOVING
RSC2 SA1 A2+FLSW-STSW GET RA AND FL
BX6 -X0*X1 EXTRACT FL
LX1 -RSHF
ZR X6,RSC4 IF ZERO FL - TREAT AS NOT ACTIVE
MX3 -RMSK
BX3 -X3*X1
LX6 6
LX3 6
SA1 A2+SPCW-STSW CHECK DMP= PROCESSING
AX1 48
NZ X1,RSC7 IF DMP= IN PROGRESS
JP B3
* EXIT IF SUB-SYSTEM NOT ACTIVE.
RSC4 SA1 B3-B1
AX1 48
EQ RSC8 RETURN
* EXIT IF MOVE FLAG SET.
RSC5 SA1 B3-B1
SB6 X6
EQ B6,B7,RSC2 IF CALLER,S CP .EQ. SUB-SYSTEM,S CP
RSC6 SB3 X1
JP B3 RETURN
* EXIT IF ADVANCE FLAG SET.
RSC7 SA1 B3-1
LX1 30
AX1 48
RSC8 SB3 B3+X1
JP B3 RETURN
RSI SPACE 4,15
** RSI - RETURN SUBSYSTEM IDENTIFICATION.
*
* ENTRY (X0) = -7777B.
* (X1) = SUBSYSTEM IDENTIFICATION IF ENTRY AT *RSI1*.
* (B6) = RETURN ADDRESS IF NOT SUBSYSTEM.
* RETURN TO (B6)+1 WITH SUBSYSTEM INFORMATION.
* (B7) = CONTROL POINT ADDRESS OF SUBSYSTEM IF
* ENTRY AT *RSI*.
*
* EXIT (A2) = ADDRESS OF *SSCT* WORD FOR THIS SUBSYSTEM.
* (X1) = SUBSYSTEM IDENTIFICATION.
* (X2) = *SSCT* ENTRY FOR THIS SUBSYSTEM.
* (X3) = SHIFT COUNT TO POSITION TO BYTE IN *SSCT*
* WORD FOR THIS SUBSYSTEM INFORMATION.
*
* USES A - 2.
* X - 1, 2, 3, 6.
RSI SA1 B7+JCIW GET SUBSYSTEM IDENTIFICATION
LX1 36
BX1 -X0*X1
RSI1 SX6 X1-LSSI-1
NG X6,RB6 IF NOT SUBSYSTEM
SX6 X1-MXSI-1
PL X6,RB6 IF NOT SUBSYSTEM
TX3 -1,SSCT GET FWA - 1 OF *SSCT* TABLE
SB6 B6+1 ADVANCE RETURN ADDRESS
RSI2 SX6 X6+5
SX3 X3+1
NG X6,RSI2 IF *SSCT* WORD NOT REACHED
LX6 2
SA2 X3 GET *SSCT* WORD FOR THIS SUBSYSTEM
LX3 X6,B1
IX3 X3+X6 SHIFT COUNT FOR SUBSYSTEM BYTE
JP B6 RETURN
SCD SPACE 4,10
** SCD - SEARCH CENTRAL LIBRARY DIRECTORY.
*
* ENTRY (X2) = 42/ ENTRY POINT NAME, 18/
* (B6) = RETURN ADDRESS.
*
* EXIT (X7) = ADDRESS OF PST.
* (X7) = 0 IF NOT FOUND.
*
* USES X - 1, 2, 3, 4, 5, 7.
* A - 1, 2.
* B - 4, 5.
SCD SA1 EPDP READ DIRECTORY ADDRESS
MX4 42
SX3 B1
BX7 X4*X2 ENTRY POINT NAME
AX1 36
SA2 LBDP FIND END OF DIRECTORY
SB4 X1 FWA OF DIRECTORY
AX2 12
LX3 41-1
IX2 X2-X3
SB5 X2 LWA+1 OF DIRECTORY
EQ SCD2 ENTER LOOP
SCD1 BX1 -X4*X1
ZR X5,SCD4 IF ENTRY POINT FOUND
SB4 A1+B1 RESET FWA OF SEARCH
SCD2 SX1 B5-B4 LENGTH OF SEARCH INTERVAL
AX1 1
EQ B4,B5,SCD3 IF END OF SEARCH
SA1 B4+X1 GET DIRECTORY ENTRY
NO
BX5 X4*X1 ENTRY POINT NAME
IX5 X7-X5
PL X5,SCD1 IF PROGRAM .GE. SAMPLE ENTRY
SB5 A1+
SCD3 GT B5,B4,SCD2 IF MORE DIRECTORY TO SEARCH
SX7 B0+ CLEAR REPLY (ENTRY POINT NOT FOUND)
JP B6 RETURN
* ENTRY POINT FOUND.
SCD4 SA2 PSTP GET FWA OF PST
AX2 12
BX2 -X4*X2
IX7 X1+X2 ADDRESS OF PST ENTRY
JP B6 RETURN
SEF SPACE 4,15
** SEF - SET ERROR FLAG.
*
* ENTRY (B7) = CP ADDRESS.
* (X7) = ERROR FLAG.
* JOB ACTIVE IN THIS CPU.
*
* EXIT TO *SSE* IF SUBCONTROL POINT ACTIVE.
* TO *MTRX* IF NEW .LT. CURRENT ERROR FLAG.
* TO *SNS* IN NORMAL CASE.
*
* USES X - 1, 2, 4, 6, 7.
* A - 1, 6.
* B - 3, 5.
*
* CALLS MSC.
SEF SA1 B7+STSW READ CP STATUS
BX6 X1
LX1 59-56
SEF1 TNG X1,(/MONITOR/SSE,SUBCP,/MONITOR/SEF1)
MX2 -12
LX7 36
LX2 36
BX4 -X2*X6 GET OLD ERROR FLAG
IX4 X7-X4
ZR X7,SEF2 IF NEW ERROR FLAG IS ZERO
NG X4,MTRX IF OLD .GT. NEW ERROR FLAG
SEF2 TB3 SCA
EQ B7,B3,SEF2.1 IF SYSTEM CONTROL POINT
IX6 X6+X4
SA6 A1
EQ SNS SET NULL CPU STATUS
SEF2.1 SA1 CPAL+A0
AX1 42
SX2 X1-IDXT
SX1 SABT * SYSTEM ABORT.*
TPL X2,(/MONITOR/SEF4,NVE,/MONITOR/SEF3) IF IDLE PACKAGE
SEF3 SB5 MTRX SET EXIT ADDRESS FOR *MSC*
EQ MSC SET MESSAGE AT SYSTEM CONTROL POINT
SEF4 SB5 ZERL ABORT AFTER POSTING MESSAGE
EQ MSC SET MESSAGE AT SYSTEM CONTROL POINT
SFL SPACE 4,15
** SFL - SET FIELD LENGTH.
*
* ENTRY (B5) = 0 IF NOT *MTR* CALL.
* (B6) = EXCHANGE PACKAGE ADDRESS.
* (B7) = CONTROL POINT ADDRESS IF .NE. 0.
* (B7) = 0 IF CMR REQUEST FROM *MTR*.
* (X0) = INCREMENT.
*
* EXIT TO *MTRX*.
*
* USES X - 0, 1, 2, 3, 4, 6, 7.
* B - 3, 4.
* A - 2, 3, 4, 6, 7.
*
* CALLS CJS, SJS, SRU.
SFL BSS 0 ENTRY
SA2 A0+CPAL FETCH CPU ASSIGNMENT DATA
SA3 ACML
SX6 B7
BX7 -X0 COMPLEMENT INCREMENT
AX2 24 POSITION CP ADDRESS
LX7 36-6
AX6 7-1
IX7 X3+X7 ADJUST AVAILABLE MEMORY
SB3 X2+
SA6 UMTA SET MCT INDEX FOR CP
SA7 A3+
* UPDATE EXCHANGE PACKAGE AND CP STATUS.
SFL1 SA3 B7+FLSW GET FL STATUS WORDS
AX0 6
SA4 A3+B1
TA2 X6,MCT FETCH MCT ENTRY
MX1 -12
IX6 X3+X0 UPDATE FIELD LENGTH
+ SA6 A3
IX7 X4+X0 MODIFY *FLSW* + 1
BX6 -X1*X6
SA7 A4 CHANGE CPA WORDS IN 1 WORD OF CODE
SA3 B6+2
IX7 X2-X0 ADJUST UNASSIGNED CM ABOVE CP/PCP
SA7 A2
ZR B7,SFL2 IF CMR REQUEST
MX7 -36
BX4 -X7*X3 CLEAR OLD FL
LX6 36+6
BX6 X6+X4 UPDATE EXCHANGE PACKAGE FL
SA6 B6+2
SFL2 ZR B5,SFL3 IF NOT *MTR* CALL
SX6 0
SA6 SMRL
ZR B7,MTRX IF CMR REQUEST
SFL3 NE B3,B7,SFL4 IF CURRENT CPU NOT ACTIVE ON THIS JOB
SB4 SFL4
JP CJS CHECK JOB STATUS
* UPDATE CM USAGE.
SFL4 SB4 SJS
NG X0,SRU IF FL DECREASE
SB4 MTRX
NZ X0,SRU IF FL INCREASE
JP MTRX EXIT MONITOR MODE
SIS SPACE 4,10
** SIS - SET *I* STATUS.
*
* ENTRY (B7) = CONTROL POINT ADDRESS.
* JOB ACTIVE IN THIS CPU.
*
* EXIT TO *BNJ* BEGIN NEW JOB.
*
* USES X - 7.
SIS BSS 0 ENTRY
SX7 ICPS SET *I* STATUS FOR *BNJ* ENTRY
EQ BNJ BEGIN NEW JOB
SJS SPACE 4,15
** SJS - START JOB SCHEDULER.
*
* EXIT TO MTRX.
*
* USES X - 0, 1, 2, 3, 4, 6, 7.
* B - 3, 4.
* A - 1, 2, 3, 7.
*
* CALLS APQ.
*
* PRESERVES A5, B7, A0.
SJS SX7 B7+ SAVE CONTROL POINT ADDRESS
TB7 SCA SET SYSTEM CONTROL POINT ADDRESS
SA7 T1
SB6 SJS0 RETURN ADDRESS IF NO ACTIVITY LIMIT
SB3 SJS3 RETURN ADDRESS IF ACTIVITY LIMIT
EQ CAL CHECK ACTIVITY LIMIT
SJS0 SA3 JSCL READ SCHEDULER CONTROL WORD
SA1 RTCL
NG X3,SJS3 IF SCHEDULER ACTIVE
SA2 SJSA READ *1SJ* CALL
MX7 24
AX1 36 EXTRACT TIME IN SECONDS
MX0 -24
BX7 X7*X2 CLEAR *1SJ* CALL FLAGS
MX5 1
SA7 A2
ERRNZ SJSB-SJSA-1 CODE ASSUMES *SJSB* = *SJSA* + 1
SA4 A2+B1
SA7 A4 RESET FORCED *JSCL* RESET FLAG
BX7 X3+X5 SET SCHEDULER ACTIVE FLAG
BX6 X2
ZR X4,SJS0.1 IF FORCED *JSCL* RESET
BX4 -X0*X3 EXTRACT RECALL TIME
IX4 X1-X4 *RTCL* - TIME TO RECALL
NG X4,SJS1 IF NOT TIME TO PERFORM PERIODIC RECALL
SJS0.1 AX3 24 EXTRACT RECALL TIME PERIOD
MX0 -12
BX4 -X0*X3
IX7 X7+X4 UPDATE TIME TO RECALL
AX3 12 EXTRACT QFT/EJT SCHEDULING FREQUENCY
BX4 -X0*X3
SX3 B1+
SB3 X4
LX4 X3,B3 GENERATE FREQUENCY MASK
IX4 X4-X3
BX1 X4*X1
NZ X1,SJS1 IF NOT TIME FOR QFT SCHEDULING
LX3 24
BX6 X6+X3
SJS1 SB3 SJS2 *APQ* RETURN ADDRESS
SB4 LA1SJ SET LOAD PARAMETER INDEX
SA7 A3 STORE SCHEDULER CONTROL WORD
EQ APQ ASSIGN PP
* NOTE -
* IN ORDER TO AVOID *DEADLOCK* (SORT OF) PROBLEMS
* WITH THE *CPUCIO* REQUEST QUEUE, THE QUEUE IS CHECKED
* PENDING REQUESTS ON EVERY *1SJ* CALL
SJS2 SB3 SJS3 *PCQ* RETURN ADDRESS
SB4 SJS3
TNO /BUFIO/PCQ1,BUFIO PROCESS PSEUDO-PP REQUEST QUEUE
SJS3 SA1 T1 RESTORE (B7)
SB7 X1+
* IF A PRIORITY PP REQUEST IS PENDING, THE ENTRY IS
* CLEARED AND A REJECT STATUS IS SET TO THE WAITING PP.
SA3 PQRL CHECK FOR PENDING PRIORITY REQUEST
ZR X3,MTRX IF NO PP REQUESTS IN QUEUE
SA1 X3
MX2 -18
LX1 -18
BX3 -X2*X1
ZR X3,MTRX IF FIRST REQUEST NOT PRIORITY
BX7 X7-X7 SEND REJECT RESPONSE TO WAITING PP
SA7 X3
* DELETE ENTRY FROM QUEUE.
LX1 18
MX4 -12
BX6 -X4*X1 ADDRESS OF NEXT ENTRY
SA6 A3
SA7 A1+RECW-RCCW CLEAR ENTRY FROM CONTROL POINT
SA7 A1+REPW-RCCW
SX1 A1
AX1 7
MX4 -4
LX1 7 CONTROL POINT ADDRESS
SA2 X1+STSW ADD ENTRY TO FREE LIST
SX3 -420B-RCCW+1
SB4 X1
BX7 -X4*X2 NEXT FREE ENTRY
BX2 X4*X2
SA7 A1
SX4 A1-B4 COMPUTE RECALL INDEX
IX4 X4+X3
IX7 X4+X2
SA7 A2 UPDATE STSW
EQ MTRX EXIT
SJSA VFD 18/3R1SJ,6/0,12/0,12/0,12/0
SJSB CON 1 ZERO IF FORCED *JSCL* RESET
SNS SPACE 4,10
** SNS - SET NULL STATUS.
*
* ENTRY (B7) = CONTROL POINT ADDRESS.
*
* EXIT TO *JAV* ADVANCE JOB.
*
* CALLS JAV.
SNS SA4 B7+STSW CLEAR CPU STATUS
SB3 BNJ1 *JAV* RETURN ADDRESS
MX7 -57
BX7 -X7*X4
SA7 A4+
EQ JAV ADVANCE JOB
SPL SPACE 4,20
** SPL - SEARCH PERIPHERAL LIBRARY.
*
* ENTRY (X6) = PPU REQUEST.
* (X5) = PP OUTPUT REGISTER IF *SPLM* CALL.
* (B6) = EXIT ADDRESS.
* = EXIT ADDRESS + 400000B, IF REQUEST IS FOR CPP.
*
* EXIT LIBRARY UNLOCKED.
* (X1) .GT. 0.
* (X5) = 0 IF PROGRAM FOUND, ELSE *SFP* *PLD* ENTRY
* RETURNED.
* (X7) = PP LOAD PARAMETERS.
* (A1) = ADDRESS OF PLD ENTRY.
* (B6) = EXIT ADDRESS.
*
* LIBRARY LOCKED (SYSEDIT ACTIVE)
* (X1) = -0.
* (X7) = (X5) ON ENTRY WITH BITS 56 AND 57 SET.
*
* USES X - 1, 3, 4, 5, 7.
* B - 5.
* A - 1, 7.
SPL SA1 PSTP FIND END OF DIRECTORY
MX4 18
AX1 12
SX3 X1-2
SA1 PLDP READ START OF DIRECTORY
BX7 X4*X6 SET PROGRAM NAME
AX1 36
SB5 X1 FWA OF LIBRARY
IX3 X3-X1 LIBRARY LENGTH
NZ B5,SPL1 IF LIBRARY NOT LOCKED
SX3 44B REJECT FUNCTION (SET RETRY/MOVABLE FLAGS)
BX1 -X1+X1
LX3 -6
BX7 X5+X3
TJP (/CPP/SPL1,CPP,B6) RETURN
SPL1 SX2 B5+X3 RESET LWA OF LIBRARY
ZR X3,SPL4 IF END OF SEARCH
AX3 1
SA1 B5+X3 SAMPLE DIRECTORY ENTRY
BX5 X4*X1
IX5 X7-X5
LX5 18 POSITION SIGN BIT
NG X5,SPL1 IF PROGRAM .LT. SAMPLE
SB5 A1+B1 RESET FWA OF SEARCH INTERVAL
SX3 B5 RESET LENGTH
IX3 X2-X3
NZ X5,SPL1 IF PROGRAM NOT FOUND
LX7 -54
* ENTER HERE TO BUILD THE LOAD PARAMETERS FOR AN OVERLAY.
* (X1) = PLD ENTRY.
* (X4) = 77777700 ... 00B.
* (X7) = FIRST CHARACTER OF OVERLAY NAME.
* (B6) = RETURN ADDRESS.
*
* NOTE. (X5) WILL NOT BE CHANGED.
SPL1.1 BX1 -X4*X1
SX3 B1
SX7 X7-1R7
LX3 41
ZR X7,SPL5 IF *7XX* OVERLAY
* SET *RT* PARAMETER.
BX7 -X3*X1 CLEAR CM/MS BIT
SB5 -B6 SET (B5) POSITIVE IF CPP
SX2 214B SET *RT* PARAMETER POSSIBILITIES
BX3 X3*X1
ZR X3,SPL2 IF MS RESIDENT OVERLAY
LX1 -24 GET *RPL* ADDRESS
SB5 A1
SA1 X1-400000B
AX2 3 SET NEW *RT* PARAMETER
BX3 -X4*X1
SA1 B5 RESTORE THE *PLD* ADDRESS
AX3 40 ONE = 16-BIT PROGRAM
SB5 X3
AX2 B5 SET NEW *RT* PARAMETER
SPL2 MX3 -4
BX1 -X4*X1 ENSURE (X1) .GT. 0
BX2 -X3*X2 *RT* = 14/10/01/00
LX2 42
PL B5,SPL3 IF CONCURRENT PP OR CM RESIDENT
AX1 23-17
SX3 X1 SET LEADING ZEROS IF 12-BIT OVERLAY
SPL3 BX2 X3*X2
BX7 X7+X2
TJP (/CPP/SPL1,CPP,/PROBE/SPL,PROBE,B6) RETURN
SPL4 SA1 PSTP READ SFP ENTRY
SX3 1
AX1 12
SA1 X1-2
LX3 41
SPL5 IX7 X1+X3 SET *RT* PARAMETER
BX7 -X3*X7
TJP (/CPP/SPL1,CPP,/PROBE/SPL,PROBE,B6) RETURN
SPR SPACE 4,20
** SPR - SET CPU PRIORITY.
*
* ENTRY (B3) = RETURN ADDRESS.
* (B7) = CONTROL POINT ADDRESS.
* (X3) = *CWQW*.
* (X5) = NEW CPU PRIORITY.
* (A3) = ADDRESS OF *CWQW*.
*
* EXIT NEW CPU PRIORITY SET AND CPU SLICE RESTARTED.
* TO CALLER VIA *RCC* IF JOB IN *W* STATUS.
* TO CALLER VIA */NVE/SVS* IF JOB ACTIVE IN CPU AND
* *NVE* PRESENT.
*
* USES X - ALL.
* A - 1, 2, 3, 6, 7.
* B - 4, 6.
SPR BSS 0 ENTRY
SA4 TPRC+X5 GET SERVICE CYCLE FOR NEW PRIORITY
SA1 B7+STSW DETERMINE CPU STATUS
LX5 3
UX3,B4 X3 UNPACK CPU PRIORITY AND PARAMETERS
SB4 X5 SET PRIORITY WITHOUT PRIORITY FLAGS
SX6 B1
PX3 B4,X3 SET NEW CPU PRIORITY IN *CWQW*
LX6 47-0
MX7 6
BX6 X3+X6 SET EXTENDED CPU SLICE INCOMPLETE FLAG
BX7 X7*X4
SA6 A3 UPDATE *CWQW*
SA7 A3+B1 SET SERVICE CYCLE AND CLEAR ACCUMULATORS
ERRNZ CSAW-CWQW-1
MX4 3
BX1 X4*X1
LX1 3
SX4 X1-WCPS
ZR X1,RB3 IF NULL STATUS
PL X4,SPR1 IF *W* STATUS OR GREATER
* SET PRIORITY OF ACTIVE JOB. A CPU SWITCH IS REQUESTED TO
* FORCE SELECTION OF THE HIGHEST PRIORITY JOB.
SA2 X1+TSCL-1 GET CPU PRIORITY OF ACTIVE JOB
SA3 X1+CSWL-1
SB4 B4+3 SET ACTIVE SLICE AND RECALL FLAGS
UX6 X6
PX6 B4,X6
SA6 A6 REWRITE *CWQW* WITH FLAGS
UX2 X2
PX6 B4,X2 SET *TSCL* CPU PRIORITY AND FLAGS
MX7 1
BX7 X3+X7
SA7 A3 REQUEST CPU SWITCH
SA6 A2 UPDATE *TSCL*
SB6 B3 SET *SVS* RETURN ADDRESS
MX0 -12
TJP (/NVE/SVS1,NVE,/MONITOR/RB3)
SPR1 NZ X4,RB3 IF NOT *W* STATUS
SB6 B7+ SET EXCHANGE PACKAGE ADDRESS
EQ RCC REORDER WAIT QUEUE
SRU SPACE 4,30
** SRU - CALCULATE SRU MULTIPLIERS CPM AND IOM.
*
* SRU = M1(CP + M2*IO + M3(CP+IO)CM +
* M4(CP+IO)EC + MM*MP + AUC) + A1
*
* = M1(1 + M3*CM + M4*EC)CP + M1(M2 + M3*CM + M4*EC)IO +
* M1*MM*MP + M1*AUC + A1
*
* = (M1 + M1*M3*CM + M1*M4*EC)CP +
* (M1*M2 + M1*M3*CM + M1*M4*EC)IO +
* M1*MM*MP + M1*AUC + A1
*
* = CPM*CP + IOM*IO + M1M*MP + M1*AUC + A1.
*
* CP = (S0)*CP0 + (S1)*CP1
* IO = S2*MS + S3*MT + S4*PF
* CM = (CM FL + 777B) / 1000B (WORDS)
* EC = (ECS FL) / 1000B
* MP = MAP ACCUMULATOR
* AUC = AUC ACCUMULATOR
* A1 = ADDER ACCUMULATOR (MAINTAINED IN MICROUNITS * 10)
*
* ENTRY (B4) = EXIT ADDRESS.
*
* USES X - 0, 1, 2, 3, 4, 6, 7.
* B - 3.
* A - 1, 3, 4, 6.
*
* CALLS CPT
SRU SA3 B7+ECSW ECS FL
SA4 B7+FLSW
MX2 -12
BX0 -X2*X4
LX4 12
BX4 -X2*X4 ADD NEGATIVE FIELD LENGTH
IX4 X4+X0
SA1 B7+MP1W M1*M3 AND M1*M4
TLX3 0,UESC ADJUST EM FL
MX7 -3
BX3 -X2*X3
LX1 18
MX2 -18
IX4 X4-X7 ROUND CM FL/100B WITH 7B
BX6 -X2*X1
AX4 3 CM = (CM FL/100B + 7B) / 10B
LX1 18
IX6 X6*X4 M1*M3*CM
BX7 -X2*X1
ERRNZ MP2W-MP1W-1 CODE DEPENDS ON CONTIGUOUS WORDS
SA4 A1+B1 M1*1000 AND M1*M2
IX7 X7*X3 M1*M4*EC
LX4 18
IX6 X6+X7 M1*M3*CM + M1*M4*EC
BX3 -X2*X4
LX4 18
IX7 X3+X6 M1*1000 + M1*M3*CM + M1*M4*EC (CPM)
BX4 -X2*X4
IX4 X4+X6 M1*M2 + M1*M3*CM + M1*M4*EC (IOM)
LX7 30
SX6 B4 SAVE EXIT ADDRESS
SA6 SRUA
IX4 X7+X4 30/CPM AND 30/IOM
SB3 SRU1
TJP (/NVE/CPT,NVE,/CME/CPT,CME,/MONITOR/CP76,CP176,/MONITOR
,/CPT)
SRU1 SA1 SRUA
SB4 X1
SA1 A4+B1
MX2 1
BX2 X2*X1
BX6 X2+X4
SA6 A1
JP B4 EXIT
SRUA CON 0
STL SPACE 4,15
** STL - SET CPU TIME LIMIT.
*
* ENTRY (X3)= TIME LIMIT IN MILLISECONDS.
* IF (X3) .LT. 0, TIME LIMIT IS UNLIMITED.
* (B7)= CONTROL POINT ADDRESS.
* (B3)= EXIT ADDRESS.
*
* EXIT (X7) = 0.
*
* USES X - 1, 2, 6, 7.
* B - 4.
* A - 2, 6.
*
* CALLS MSB.
STL SA2 B7+SRUW ENTRY
MX1 1
BX6 -X1*X3
LX1 58-59
BX7 -X1*X2 CLEAR TIME LIMIT
SA7 A2+
NG X3,STL1 IF UNLIMITED REQUEST
SB4 STL1 SET *MSB* RETURN ADDRESS
SA2 CPTC MILLISECONDS TO QUARTER NANOUNITS
EQ /PROGRAM/MSB MULTIPLY 60 BIT INTEGER
STL1 SA6 B7+CPLW
SX7 B0+ CLEAR OUTPUT REGISTER
JP B3 RETURN
SXR SPACE 4,10
** SXR - SET *X* STATUS WITH RECALL CRITERION.
*
* ENTRY (X0) = RECALL CRITERION.
* (B7) = CONTROL POINT ADDRESS.
*
* EXIT TO *MTRX* IF CONTROL POINT NOT ACTIVE.
* TO *BNJ* BEGIN NEW JOB.
*
* USES X - ALL.
* A - 1, 2, 3, 6, 7.
SXR SA1 B7+STSW GET JOB STATUS
SA2 RQRL
SA3 B7+CWQW
SX6 1
NG X1,MTRX IF *W* OR *I* STATUS
LX6 46-0
AX1 57
BX6 -X6*X3 CLEAR RECALL NOT REQUIRED FLAG
ZR X1,MTRX IF NULL STATUS
SA6 B7+CWQW UPDATE *CWQW*
MX4 -12
LX0 12
* FIND POSITION IN *RQ*. CODE IS REPLICATED FOR PERFORMANCE
* REASONS.
SXR1 BX7 -X4*X2
SA3 X7
IX6 X3-X0
BX5 -X4*X3
PL X6,SXR2 IF POSITION REACHED
SA2 X5
IX6 X2-X0
NG X6,SXR1 IF POSITION NOT REACHED
BX7 X5
SA2 A3
SXR2 SX3 B7+CRCW ADDRESS OF NEW ENTRY
BX7 X7+X0
SA7 X3
BX2 X4*X2
BX6 X2+X3
SX7 XCPS
SA6 A2
EQ BNJ BEGIN NEW JOB
SXS SPACE 4
** SXS - SET *X* STATUS.
*
* ENTRY (B7) = CONTROL POINT ADDRESS.
*
* EXIT TO SXR.
SXS SA1 RTCL GET CURRENT TIME
SA2 MSCL EXTRACT RECALL TIME DELAY
MX0 -36
BX1 -X0*X1
MX0 -12
LX2 -36
BX2 -X0*X2
SX0 PTMF SET RECALL CRITERION
IX1 X1+X2
LX0 36
BX0 X0+X1
EQ SXR SET *X* STATUS WITH RECALL CRITERION
TSM SPACE 4,15
** TSM - TERMINATE STORAGE MOVE.
*
* EXIT (SMRL) = 0.
* TO *BNJ1* (VIA *UMT* AND *JAV*).
* TO *CRA5* IF FIELD LENGTH SWAP.
*
* USES X - 0, 1, 2, 4, 5, 6.
* A - 1, 4, 6.
* B - 3, 6.
*
* CALLS BNJ, JAV, RCC, SCA.
TSM SA1 SMPXP+STSW CLEAR CPU STATUS ON PSEUDO-CP
MX2 -57
BX6 -X2*X1 SET NULL STATUS
SA6 A1+
SB3 TSM1
EQ SCA CONVERT CP/PCP ADDRESS
TSM1 SA4 A2 READ *SMRL*
LX4 59-37
TNG X4,(/ECS/TSM4,EEC,/MONITOR/TSM2) IF ECS ERROR ON MOVE
TSM2 LX4 37-36
ERRNZ ICPS-6 CODE DEPENDS ON VALUE
MX5 2
TNG X4,(/ECS/TSM8,EEC,/MONITOR/TSM3) IF USER ECS ERROR
TSM3 LX4 59-47+36-59
SB3 TSM4 *RCC* RETURN ADDRESS
AX4 57
ZR X4,TSM4 IF STATUS PREVIOUS NULL
SX4 X4+1
SB6 B7+ EXCHANGE PACKAGE ADDRESS
NZ X4,RCC IF PREVIOUSLY ACTIVE STATUS
SA1 B7+STSW
BX6 X1+X5 SET *I* STATUS
SA6 A1
* CPU STATUS IS RESTORED BEFORE *SMRL* IS CLEARED SO THAT ANY
* PP PROGRAMS SENSING CPU STATUS WILL NOT MISS IT.
TSM4 SA2 TSMA CHECK BLOCK MOVE STATUS
SB4 BNJ1
NZ X2,TSM6 IF FIELD LENGTH SWAP
TB5 SCA
GT B7,B5,TSM5 IF PSEUDO-CONTROL POINT
SB4 JAV SET *UMT* EXIT ADDRESS
TSM5 SB3 BNJ1 SET *JAV* EXIT ADDRESS
EQ UMT UPDATE MEMORY CONTROL TABLE
TSM6 SA1 SMRL GET MOVE PARAMETERS
BX0 X2
SX4 X1 EXTRACT MEMORY TYPE FLAG
AX4 12-1
MX5 -12
ERRNZ FLSW+2-ECSW CODE DEPENDS ON VALUE
SX6 X4+FLSW
SA1 X6+B7 READ FL CONTROL WORD
SX2 B7
BX5 -X5*X1 EXTRACT FIELD LENGTH
AX4 1
AX2 7-1
TB5 X4,MCT SET BASE MCT ADDRESS
AX1 48
SA4 X2+B5 READ REQUESTOR-S MCT ENTRY
IX1 X1+X5
LX0 1 CONVERT MCT ORDINAL TO INDEX
IX7 X4+X1 ADJUST REQUESTOR-S HOLE SIZE
SA4 TSMB GET PRE-MOVE HOLE POINT HOLE SIZE
SA3 X0+B5 READ HOLE POINT MCT ENTRY
MX5 12
IX6 X3-X4 ADJUST HOLE POINT HOLE SIZE
SA7 X2+B5
IX4 X4-X1
AX2 1
MX7 -24
BX3 X7*X3
LX5 -12
BX3 X3+X4
EQ CRA5 CHANGE MEMORY TABLE LINKAGE
TSMA CON 0 HOLE POINT NUMBER IF BLOCK MOVE
TSMB CON 0 PRE-MOVE HOLE POINT HOLE SIZE
TITLE CPU REQUEST PROCESSOR.
CPR SPACE 4
*** CPU PROGRAM REQUESTS.
*
*
* CPU PROGRAM REQUESTS ARE PASSED THROUGH RELATIVE
* LOCATION 1. THE FORMAT IS AS FOLLOWS -
*
*T 18/ NAME,6/ A,36/ ARG
*
* NAME REQUEST NAME
* A 20B IF AUTO RECALL DESIRED
* ARG ARGUMENTS
*
*
* IF THE REQUEST IS NOT ONE OF THE FOLLOWING, AND THE
* NAME OF THE REQUEST BEGINS WITH AN ALPHA CHARACTER,
* THE REQUEST IS ASSUMED TO BE THE NAME OF A PP PROGRAM, AND
* THIS PROGRAM IS ASSIGNED TO AN AVAILABLE PP.
*
* IF THE REQUEST IS NOT OF THE ABOVE FORMAT, THE JOB IS
* ABORTED WITH A *MONITOR CALL ERROR.*.
CPR SPACE 4
** CPR - PROCESS CPU REQUEST.
*
* ENTRY (X2) = RA.
* (X5) = (RA+1).
* (A2) = ADDRESS OF RA IN EXCHANGE PACKAGE.
* (B3) = ADDRESS OF WORD IN CPUMTR CONTAINING RA.
* (B7) = CONTROL POINT ADDRESS.
CPR SA1 A2+B1 GET FL
BX4 X5
MX0 -12
LX4 18
AX1 36
SX7 X4-3RRCL
SB4 X1 SET FL
NZ X7,CPR2 IF NOT *RCL*
* PROCESS *RCL* IN LINE DUE TO FREQUENCY OF USE.
LX4 59-40-18
SX3 B1
IX2 X2+X3 RA+1
NG X4,CPR1 IF AUTO RECALL
EWX7 X2 CLEAR RA+1
EQ SXS SET *X* STATUS
CPR1 SX3 X5-1 RECALL ADDRESS - 1
SA1 B7+STSW CHECK ACTIVITY
MX6 -4
SB5 X5
LX6 4
IX4 X2+X3 ADDRESS OF WORD RECALLED ON
BX7 -X6*X1
LX6 48-4
GE B5,B4,CPE IF ILLEGAL ADDRESS
LE B5,B1,CPE IF ILLEGAL ADDRESS
BX6 -X6*X1
ERX1 X4 CHECK WORD RECALLED ON
BX7 X7+X6
MX6 -18
R= X0,PCBF PROCESS COMPLETION BIT
LX0 36
LX1 59-0
BX0 X0+X4
SA4 B7+SSCW CHECK FOR SUBSYSTEM CONNECTIONS
ZR X7,CPR1.2 IF NO ACTIVITY
PL X1,SXR IF BUSY, SET *X* STATUS, RECALL CONDITION
CPR1.1 BX7 X7-X7
EWX7 X2 CLEAR RA+1
EQ MTRX RETURN
CPR1.2 NG X1,CPR1.1 IF COMPLETION BIT SET
SA1 B7+DBAW GET K-DISPLAY BUFFER ADDRESSES
SA2 B7+JCIW CHECK SUBSYSTEM ID
MX3 -12
BX7 -X6*X5
LX3 24
BX3 -X3*X2
NZ X3,SXR IF SUBSYSTEM
NZ X4,SXS IF SUBSYSTEM CONNECTIONS
BX3 -X6*X1 CHECK K-DISPLAY BUFFERS
LX6 18
BX6 -X6*X1
LX1 59-58
BX3 X3-X7
LX6 -18
BX6 X6-X7
SX7 RCET
NG X1,SEF IF K-DISPLAY STATUS NOT TO BE RETURNED
ZR X3,SXR IF K-DISPLAY ADDRESS MATCHES
ZR X6,SXR IF K-DISPLAY ADDRESS MATCHES
EQ SEF SET ERROR FLAG
CPR2 SX6 X4-3RTIM
SA3 CMCL CHECK STORAGE MOVE REQUEST
ZR X6,TIM IF *TIM*
SX7 B7
AX3 48
AX7 7
BX7 X7-X3
SA3 B7+STSW CHECK SUBCP ACTIVE
ZR X7,SXS IF STORAGE MOVE REQUESTED
LX3 59-56
BX7 -X0*X4
CPR3 TNG X3,(/MONITOR/BCE,SUBCP,/MONITOR/CPR3)
SB5 X4-3RMSG
ZR X7,CPE IF LAST TWO CHARACTERS OF PP CALL ZERO
SX7 B1+
LX7 41-0
BX5 -X7*X5 CLEAR BIT 41 IN RA+1 CALL
* IDENTIFY REQUEST BY TREE SEARCH.
* EXIT TO PROCESSOR WITH
* (X0) = -7777B
* (X1) = FL
* (X2) = RA
* (X4) = REQUEST WORD SHIFTED 18
* (X5) = REQUEST WORD
* (B3) = ADDRESS OF MEMORY WORD CONTAINING RA.
* (B4) = FL
* (B7) = CONTROL POINT ADDRESS
ZR B5,MSG IF *MSG*
SX7 X4-3RCIO
PL B5,CPR5 IF ABOVE *MSG*
ZR X7,CIO IF *CIO*
PL X7,CPR4 IF ABOVE *CIO*
SB6 X4-3RABT
ZR B6,ABT IF *ABT*
SX6 X4-3RAAA
PL X6,APJ IF LEGAL PROGRAM NAME
EQ CPE *MONITOR CALL ERROR.*
CPR4 SX6 X4-3RLDR
ZR X6,LDR IF *LDR*
SX7 X4-3RCPM
PL X6,LDV IF ABOVE *LDR*
SX6 X4-3REND
ZR X7,CPM IF *CPM*
SX7 X4-3REJT
ZR X6,END IF *END*
ZR X7,EJT IF *EJT*
SX7 X4-3RCLO
NZ X7,APJ IF NOT *CLO*
EQ CLO CONVERT *CLO* TO *CIO*
CPR5 SX7 X4-3RRFL
PL X6,CPR6 IF ABOVE *TIM*
NG X7,PFL IF BELOW *RFL*
SX6 X4-3RRSB
ZR X7,RFL IF *RFL*
ZR X6,RSB IF *RSB*
SX7 X4-3RSPC
ZR X7,SPC IF *SPC*
PL X6,SIC IF ABOVE *RSB*
SX6 X4-3RRPV
ZR X6,RPV IF *RPV*
EQ APJ
CPR6 SX7 X4-3RWCL
SX6 X4-3RXJP
ZR X7,WCL IF *WCL*
SX7 X4-3RXJR
TZR X6,(/MONITOR/XJP,SUBCP,/MONITOR/APJ) IF *XJP*
ZR X7,XJR IF *XJR*
SX6 X4-3R0AA
PL X6,CPE IF ILLEGAL REQUEST
EQ APJ ASSIGN PPU JOB
AAR SPACE 4,10
** AAR - ASSIGN AUTO RECALL PP REQUEST.
*
* ENTRY (X5) = PP REQUEST.
* (B7) = CONTROL POINT.
AAR SB4 B0+ SET LIBRARY SEARCH NEEDED
AAR1 SB6 AAR2 *CAL* RETURN ADDRESS - NO LIMIT
SB3 SXS *CAL* RETURN ADDRESS - ACTIVITY LIMIT
EQ CAL CHECK ACTIVITY LIMIT
AAR2 MX0 1 FORCE AUTO-RECALL
SX7 B0+ CLEAR RA+1
LX0 41-59
SA2 RA1 ADDRESS OF RA+1
EWX7 X2 CLEAR (RA+1)
BX6 X0+X5
SA7 APQA
SB3 SIS *APQ* RETURN ADDRESS
EQ APQ ASSIGN PP
APJ SPACE 4,15
** APJ - ASSIGN PPU JOB.
*
* ENTRY (X5) = PPU REQUEST WORD.
* (B7) = CONTROL POINT ADDRESS.
*
* EXIT TO *APQ* TO ASSIGN PP.
* TO *SXS* TO SET X STATUS IF ACTIVITY LIMIT.
*
* USES X - ALL.
* B - 3, 4, 6.
* A - 1, 2, 7.
*
* CALLS CAL.
APJ BX7 X7-X7 CLEAR PP PARAMETER WORD
SB4 B0 SET LIBRARY SEARCH NEEDED
SA7 APQA
APJ0 SA1 B7+JCIW CHECK FOR SUBSYSTEM OR NON-ROLLABLE JOB
SX3 B1
LX1 0-21
BX4 X3*X1 *DIS* FLAG
LX3 40-0
BX6 X3*X5 CHECK FOR AUTO RECALL
LX1 -24-0+21
MX2 -12
BX2 -X2*X1 SUBSYSTEM IDENTIFICATION
NZ X6,APJ0.1 IF PP CALL WITH AUTO RECALL
BX6 X2+X4
NZ X6,APJ2 IF SYSTEM JOB
BX5 X5+X3 FORCE AUTO RECALL
APJ0.1 SA1 B7+STSW GET JOB ACTIVITY
MX6 -8
SX2 X2-LSSI-1
LX1 -4
BX6 -X6*X1 RECALL/TAPE ACTIVITY COUNT
PL X2,APJ0.2 IF SUBSYSTEM
LX1 12+4
MX2 -5
BX2 -X2*X1 PP COUNT
IX6 X6+X2
IX6 X6-X4 ALLOW FOR *DIS*
APJ0.2 NZ X6,SXS IF PP OR TAPE ACTIVITY
* ASSIGN PPU JOB.
APJ1 MX0 1 EXTRACT AUTO RECALL FLAG
LX0 40-59
BX0 X0*X5
LX0 41-40
SA2 RA1 ADDRESS OF RA+1
SX7 B0+ CLEAR RA+1
BX6 X0+X5 MAP AUTO RECALL TO BIT 41
EWX7 X2 CLEAR (RA+1)
SB3 SIS *APQ* RETURN ADDRESS
TNZ X0,(/DCP/APQ,DCPC,/MONITOR/APQ) IF AUTO-RECALL
SB3 MTRX
TJP (/DCP/APQ,DCPC,/MONITOR/APQ) ASSIGN PP
* AVOID FORCED AUTO RECALL
APJ2 SB6 APJ1 *CAL* RETURN ADDRESS - NO LIMIT
SB3 SXS *CAL* RETURN ADDRESS - ACTIVITY LIMIT
EQ CAL CHECK ACTIVITY LIMIT
AFL SPACE 4,20
** AFL - ASSIGN FIELD LENGTH.
*
* ENTRY (X1) = CURRENT FIELD LENGTH.
* (X2) = REQUESTED FIELD LENGTH.
* (X5) = *1MA* CALL TO BE ISSUED IF NEEDED.
* (B3) = ADDRESS OF MEMORY WORD CONTAINING RA.
* (B5) = STATUS RESPONSE ADDRESS.
* (B7) = CONTROL POINT ADDRESS.
* (A5) = RA+1.
*
* EXIT TO MTRX.
*
* USES X - 0, 1, 2, 3, 4, 6, 7.
* A - 2, 3, 4, 6, 7.
* B - 4, 5, 6.
*
* CALLS APJ, SFL.
AFL SA3 B7+ECSW GET ECS CONTROL WORD
MX7 -17 SET FIELD LENGTH
BX0 -X7*X2
MX4 -12 GET ECS FIELD LENGTH
SB6 B2 SET EXCHANGE PACKAGE ADDRESS
BX4 -X4*X3
BX6 X1 RETAIN CURRENT FL
ZR X0,AFL3 IF EMPTY REQUEST
SX3 X0-MCMX
ZR X4,AFL1 IF NO ECS ASSIGNED
PL X3,AFL1 IF FL .GE. MCMX
SX0 MCMX SET FL TO MINIMUM ALLOWED WITH ECS
* CHECK DIRECTION OF REQUEST.
AFL1 SX1 X0+77B ROUND UP REQUEST
NG X1,CPE IF REQUEST TOO LARGE
AX1 6
LX1 6
IX0 X1-X6 CHECK REQUEST
LX2 59-17
ZR X0,AFL3 IF NO MEMORY CHANGE
SB4 LA1MA SET *1MA* LOAD PARAMETER INDEX
PL X0,APJ1 IF MEMORY INCREASE CALL *1MA*
* CHECK NO-REDUCE STATUS.
SA4 B7+STSW CHECK ACTIVITY
SA3 AM
BX4 X3*X4
MX7 -12
ZR X4,AFL2 IF NO PP ACTIVITY
SA4 B7+JCIW CHECK FOR SUBSYSTEM OR NON-ROLLABLE JOB
LX4 -24
BX7 -X7*X4
LX4 0-21+24 CHECK FOR *DIS* JOB
SX3 B1
BX4 X3*X4
BX4 X4+X7
ZR X4,SXS IF NOT SYSTEM JOB
AFL2 SA3 B7+LB1W READ LOADER CONTROL
LX3 59-53
BX4 -X3+X2
TX7 B7+200B,-SCA CHECK CONTROL POINT
AX4 60
BX0 X4*X0
PL X4,AFL3 IF NO CHANGE IN MEMORY
BX6 X1 SET NEW FIELD LENGTH
ZR X7,APJ1 IF LAST CONTROL POINT CALL *1MA*
SA3 SSTL
LX3 59-58
PL X3,APJ1 IF MEMORY CLEARING ENABLED
AFL3 BX7 X7-X7 CLEAR (RA+1)
SA3 B3+B1
EWX7 X3
ZR B5,SFL SET FIELD LENGTH IF NO STATUS RESPONSE
SX4 B5
SA3 B3
IX4 X4+X3
ERX3 X4 CHECK FOR CMM CLEAR JOB STEP STATUS
LX6 30
SX7 B1
LX3 59-3
BX6 X6+X7 STORE STATUS RESPONSE
SB5 B0
EWX6 X4
PL X3,SFL IF NOT CMM CLEAR
SA3 B7+DBAW
LX7 54
BX6 -X7*X3
SA6 A3
EQ SFL SET FIELD LENGTH
CIO SPACE 4
** CIO - CALL CIO.
*
* ENTRY (X7) = 0.
CIO SB6 CIO1 *CAL* RETURN ADDRESS - NO LIMIT
SB3 SXS *CAL* RETURN ADDRESS - ACTIVITY LIMIT
EQ CAL CHECK ACTIVITY LIMIT
CIO1 SA7 /CPUCIO/MB
SX0 B1 MOVE AUTO RECALL BIT FROM BIT 40 TO 41
LX0 40
SA2 RA1 ADDRESS OF (RA+1)
BX0 X0*X5 EXTRACT AUTO RECALL BIT
BX5 -X0*X5
LX0 41-40
SB3 A2-B1 RESET ADDRESS OF WORD CONTAINING RA
BX6 X0+X5
SA6 A7-B1 STORE REQUEST WORD
ERRNZ /CPUCIO/IR-/CPUCIO/MB+1 CODE REQUIRES CONTIGUOUS
EWX7 X2 CLEAR (RA+1)
TEQ (/PROBE/CIO,PROBE,/CPUCIO/CPC)
CLO SPACE 4,10
** CLO - CLOSE. (CONVERT CALL TO *CIO*)
*
* ENTRY (X7) = 0.
CLO MX2 42
SX3 3RCIO
BX4 X2*X4
BX5 X4+X3
LX5 42
EQ CIO PROCESS AS *CIO* REQUEST
CPE SPACE 4
** CPE - PROCESS CPU CALL ERROR.
CPE SX7 PCET SET ERROR FLAG = *MONITOR CALL ERROR.*
EQ SEF
ABT SPACE 4
*** *ABT*.
* ABORT JOB.
*
*T 18/ *ABT*,42/
ABT SX7 CPET SET CPU ABORT FLAG
JP SEF
CPM SPACE 4
*** *CPM*.
* RESIDENT CPM FUNCTIONS.
*
* ENTRY (X7) = 0.
*
*T 18/ *CPM*,6/,12/ FN,6/,18/ PAR
* FN FUNCTION NUMBER.
* PAR PARAMETER.
CPM SA2 CPMA READ VALID FUNCTION WORD
LX4 -24-18 EXTRACT FUNCTION
SX3 X5
BX4 -X0*X4
SB4 X4
IX4 X3-X1 CHECK PARAMETER PAST FL
AX2 X2,B4
CX6 X2
LX6 X6,B1 INDEX * 2
LX2 59
SB4 X6
BX4 X2*X4
SB5 -B4
BX6 -X4+X3
SA2 B3 ADDRESS OF RA
SB4 LACPM SET *CPM* LOAD PARAMETER INDEX
NG X6,APJ0 IF BAD PARAMETER OR NON-CPUMTR FUNCTION
IX3 X2+X3 ABSOLUTE PARAMETER ADDRESS
SA2 B3+B1
EWX7 X2 CLEAR RA+1
MX2 -18
JP CPMB+B5 JUMP TO PROCESSOR
* EXIT TO PROCESSOR WITH -
* (X0) = -7777B.
* (X1) = FL.
* (X2) = -777777B.
* (X3) = PARAMETER ADDRESS.
* (X7) = 0.
* (B3) = ADDRESS OF MEMORY WORD CONTAINING RA.
* (B7) = CONTROL POINT ADDRESS.
* NOTE - FUNCTIONS 73B AND ABOVE MUST BE PROCESSED BY THE PPU
* CPM PROCESSOR.
*
* SET BIT INDICATES VALID CENTRAL FUNCTION.
* THESE FUNCTIONS MUST BE IN REVERSE ORDER.
CPMA BSS 0
POS 65B+1
VFD 1/1
POS 64B+1
VFD 1/1
POS 63B+1
VFD 1/1
POS 62B+1
VFD 1/1
POS 61B+1
VFD 1/1
POS 55B+1
VFD 1/1
POS 51B+1
VFD 1/1
POS 50B+1
VFD 1/1
POS 45B+1
VFD 1/1
POS 43B+1
VFD 1/1
POS 37B+1
VFD 1/1
POS 33B+1
VFD 1/1
POS 32B+1
VFD 1/1
POS 25B+1
VFD 1/1
POS 24B+1
VFD 1/1
POS 16B+1
VFD 1/1
BSS 0 FORCE UPPER
* EACH FUNCTION MUST OCCUPY TWO WORDS OF CODE AND MUST BE IN
* ORDER OF OCCURENCE.
* FUNCTION 16.
+ SA1 B7+3 READ EXIT MODE
LX1 12
BX6 -X0*X1
EWX6 X3
JP MTRX EXIT
* FUNCTION 24.
+ SA1 B7+JCRW READ JOB CONTROL WORD
BX6 X1
EWX6 X3
JP MTRX EXIT
* FUNCTION 25.
ERX1 X3
BX6 X1
SA6 B7+JCRW
JP MTRX EXIT
* FUNCTION 32.
+ SA1 B7+UIDW RETURN USER NUMBER
BX6 X2*X1
EWX6 X3
JP MTRX EXIT
* FUNCTION 33.
+ SA1 B7+FLCW READ FIELD LENGTH CONTROL WORD
BX6 X1
EWX6 X3
JP MTRX EXIT
* FUNCTION 37.
+ SA1 B7+TXSW READ TELEX SUB-SYSTEM
MX6 -6
LX1 6
BX6 -X6*X1
EWX6 X3
JP MTRX
* FUNCTION 43.
+ SA1 B7+SEPW READ SPECIAL ENTRY POINT WORD
SX2 B1
SB6 X1
ZR B6,CPM1 IF NO PARAMETER BLOCK
EQ CPM4 RESTORE (RA+1)
* FUNCTION 45.
+ SA1 B7+LB1W READ FIRST LOADER CONTROL WORD
BX6 X1
EWX6 X3
JP MTRX EXIT
* FUNCTION 50.
+ SA1 MMFL READ MACHINE ID WORD
LX1 12
BX6 -X0*X1
EWX6 X3
JP MTRX EXIT
* FUNCTION 51.
+ SX3 B1 FORCE AUTO RECALL
BX7 X5 RESET RA+1 REQUEST
SA2 RA1
LX3 40
EWX7 X2
EQ CPM1.3 EXIT
* FUNCTION 55.
+ SA1 B7+ELCW READ ECS FL CONTROL WORD
TLX1 0,UESC
BX6 X1
EWX6 X3
JP MTRX EXIT
* FUNCTION 61.
+ SA4 B7+LOFW READ LIST POINTER
LX2 24 POSITION MASK
SX7 B1
BX4 -X2*X4
EQ CPM3 SET COMPLETE BIT
* FUNCTION 62.
ERX4 X3
LX4 -30
BX4 -X2*X4
IX1 X4-X1 CHECK LIST BASE ADDRESS WITHIN FL
NG X1,CPM2 IF LIST WITHIN FL
EQ CPM4 ASSIGN PPU
* FUNCTION 63.
SA4 B7+EOJW READ END-OF-JOB CONTROL WORD
MX6 -6
LX4 6 RETURN TERMINATION STATUS
BX6 -X6*X4
EQ CPM3.1 CONTINUE
* FUNCTION 64.
SA4 B7+SEPW CHECK SSJ=
SA2 B7+JCIW CHECK FOR SUBSYSTEM
LX4 59-50
AX2 -24
EQ CPM3.2 CONTINUE
* FUNCTION 65.
+ SA1 B7+SEPW
LX1 59-50
PL X1,CPM4 IF NOT SSJ=
EQ CPM3.5 SET/CLEAR UTL= ENTRY POINT
CPMB BSS 0
* EXIT FOR FUNCTION 43.
CPM1 LX2 50-0 BIT MASK
SB6 X5
SB6 B6-1
GT B6,CPM1.1 IF DISABLE/ENABLE SSJ=
BX6 -X2*X1 CLEAR SSJ=
LX2 55-50
BX6 -X2*X6 CLEAR LDR=
LX2 36-55
BX6 -X2*X6 CLEAR ENABLE SSJ=
SA6 A1
NG B6,MTRX IF ZERO PARAMETER
LX1 59-48
LX2 59-36
NG X1,MTRX IF SSM= ENTRY POINT
SA1 B7+DBAW
BX6 -X2*X1
SA6 A1
JP MTRX EXIT
CPM1.1 SB6 B6-B1
GT B6,CPM1.2 IF ENABLE SSJ=
BX6 X2*X1 EXTRACT SSJ=
BX1 -X2*X1 CLEAR SSJ=
LX2 55-50
BX1 -X2*X1 CLEAR LDR=
LX2 36-55
BX1 -X2*X1 CLEAR ENABLE SSJ=
LX6 36-50
BX6 X6+X1 SET ENABLE SSJ=
SA6 A1
JP MTRX EXIT
CPM1.2 SB6 B6-1
GT B6,CPM4 IF INCORRECT REQUEST
BX6 X1
LX6 59-36
PL X6,CPM4 IF INCORRECT REQUEST
BX6 X2+X1 SET SSJ=
LX2 36-50
BX6 -X2*X6 CLEAR ENABLE SSJ=
SA6 A1
JP MTRX EXIT
* EXIT FOR FUNCTION 51.
CPM1.3 BX5 X5+X3
EQ APJ1 ASSIGN PPU
* EXIT FOR FUNCTIONS 61 AND 62.
CPM2 LX2 24 POSITION MASK
SA1 B7+LOFW READ LIST POINTER
LX4 24
BX1 X2*X1 CLEAR OLD LIST ADDRESS
SX7 B1
BX6 X1+X4
SA6 A1
CPM3 LX4 6 RE-POSITION LIST ADDRESS
BX7 X4+X7 SET COMPLETE BIT
EWX7 X3
EQ MTRX EXIT
* EXIT FOR FUNCTION 63.
CPM3.1 SA4 B7+TFSW
LX4 12
BX4 -X0*X4 EJT ORDINAL
CX1 X4,EJT CONVERT EJT ORDINAL TO OFFSET
TA4 X1+SCHE,EJT READ EJT WORD
SX7 300B
LX4 6-33
BX4 X7*X4 JOB TERMINATION STATUS
BX6 X4+X6 ADD TO REPLY
EWX6 X3
JP MTRX EXIT
* EXIT FOR FUNCTION 64.
CPM3.2 NG X4,CPM3.3 IF SSJ=
BX2 -X0*X2
SX2 X2-LSSI
NG X2,CPM4 IF NOT SUBSYSTEM
CPM3.3 BX2 X3 CHECK PARAMETER BLOCK WITHIN FL
SX4 4 PARAMETER BLOCK LENGTH
IX3 X3+X4
SA4 B3 GET RA ADDRESS
IX4 X1+X4
IX4 X4-X3
SX1 B1
NG X4,CPM4 IF PARAMETER BLOCK PAST FL
SB3 CPM3.4 SET EXIT ADDRESS
BX5 X2 SAVE PARAMETER BLOCK ADDRESS
IX2 X2+X1 SKIP STATUS WORD
EQ IAA INCREMENT AUC ACCUMULATOR
CPM3.4 SX6 B5 SET ERROR CODE
LX6 9
EWX6 X5
EQ MTRX EXIT
* EXIT FOR FUNCTION 65.
CPM3.5 BX2 -X2*X5 GET SET/CLEAR FLAG
MX3 1
LX2 5-0
LX3 5-59
BX1 -X3*X1 CLEAR OLD UTL= VALUE
BX6 X1+X2 MERGE NEW UTL= VALUE
LX6 50-59 RE-POSITION *SEPW*
SA6 A1 UPDATE *SEPW*
EQ MTRX EXIT
* RESTORE (RA+1).
CPM4 BX7 X5
SA1 B3+B1 GET RA+1 ADDRESS
EWX7 X1
JP APJ0 ASSIGN PPU
EJT SPACE 4,10
*** *EJT*.
* EXECUTING JOB TABLE UPDATE FUNCTIONS.
*
* EXIT JOB ENABLED, OR *1MA* CALL MADE.
*
* ERROR TO *CPE* IF ABORT REQUIRED.
* ERROR CODE RETURNED TO CALLER IF NO ABORT REQUIRED.
*
* USES X - 0, 1, 2, 3, 4, 6, 7.
* A - 1, 2, 3, 4, 6, 7.
* B - 4, 6.
*
* CALLS SCD.
*
*T RA+1 18/*EJT*,6/AR,18/0,18/ADDR
* ADDR = RELATIVE ADDRESS OF PARAMETER BLOCK.
*
*ADDR 24/ JSN,12/ FLAGS,6/ PPI,8/ ERR,9/ FCN,1/C
* 42/ NAME,6/ ERF,12/ EJTO
* 3/RES,3/JAL,6/ OT,6/ RC,18/ MSG BUF,24/ RES
* 60/ REC WD 1
* 60/ REC WD 2
* 12/ INST,12/ TN,36/ CDC RES
* 42/ TNAME, 18/ RESERVED
*
* JSN = JOB SEQUENCE NUMBER.
* FLAGS = DTEJ, RCEJ - BIT 0 = CHANGE SERVICE CLASS.
* ENEJ - BIT 0 - TERMINAL CONTROL DISABLED.
* RTEJ - BIT 0 = SELECT EJT ENTRIES BY ORIGIN TYPE.
* BIT 1 = DEFAULT TIMEOUT (CLEAR = 0 TIMEOUT).
* PPI = PREPROCESSOR INDEX.
* ERR = ERROR RETURN (0 ON CALL).
* FCN = FUNCTION CODE.
* C = COMPLETE BIT (0 ON CALL).
* NAME = ENEJ - ENTRY POINT NAME.
* DTEJ, RCEJ, RSEJ - USER NAME.
* ERF = ERROR FLAG TO SET.
* EJTO = EXECUTING JOB TABLE ORDINAL.
* RES = RESERVED FOR CDC.
* JAL = JOB ACCESS LEVEL LIMIT (RETURNED ON *DTEJ*; 0 ON CALL).
* OT = ORIGIN TYPE.
* RC = REASON CODE.
* MSG BUF = RELATIVE ADDRESS OF BUFFER TO RETURN *MS1W*.
* REC WD 1 = RECOVERY WORD 1 (NFL WORD RC1N - SEE *PPCOM*).
* REC WD 2 = RECOVERY WORD 2 (NFL WORD RC2N - SEE *PPCOM*).
* INST = RESERVED FOR INSTALLATIONS.
* TN = TERMINAL NUMBER.
* CDC RES = RESERVED FOR CDC.
* TNAME = TERMINAL NAME (RETURNED BY *DTEJ* AND *TJEJ*;
* SPECIFIED ON CALL FOR *RCEJ*).
*
* NOTE - ANY CHANGES TO THIS PARAMETER BLOCK SHOULD ALSO
* BE DOCUMENTED IN *IAFEX* AND *1MA*.
EJT BSS 0 ENTRY
SA3 B7+JCIW CHECK SUBSYSTEM IDENTIFICATION
AX3 24
BX3 -X0*X3
ZR X3,CPE IF NOT SUBSYSTEM
SB6 X5 VALIDATE PARAMETER BLOCK ADDRESS
LE B6,B1,CPE IF ADDRESS INVALID
SX3 B6+EJPB
IX4 X1-X3
NG X4,CPE IF BEYOND FL
SX3 B6
IX6 X2+X3
SX3 B1
SA6 T1 SAVE PARAMETER BLOCK FWA
ERX4 X6 GET FIRST WORD OF PARAMETER BLOCK
IX6 X6+X3
SA6 A6+B1
ERRNZ T2-T1-1 ADDRESSES MUST BE CONSECUTIVE
MX6 -10 EXTRACT FUNCTION CODE
BX6 -X6*X4
LX6 59-0
NG X6,CPE IF COMPLETE BIT ALREADY SET
SX7 X6-MXEJ
PL X7,CPE IF INVALID REQUEST CODE
ZR X6,CPE IF INVALID REQUEST CODE
SX7 X6-RCEJ
ZR X7,EJT1 IF RECOVERY REQUEST
* VALIDATE EJT ORDINAL AND JSN.
R= X2,IEER ILLEGAL EJT ORDINAL ERROR CODE
SA1 A6 READ SECOND WORD OF PARAMETER BLOCK
ERX1 X1
TX7 EJTM MAXIMUM EJT ORDINAL
BX1 -X0*X1 REQUEST EJTO
IX7 X7-X1
NG X7,EJT7 IF EJTO OUT OF RANGE
MX0 24
BX7 X0*X4 REQUEST JSN
SX3 X6-RTEJ
BX7 X7+X1
NZ X3,EJT0.1 IF NOT *RTEJ*
ZR X7,EJT1 IF *RTEJ* BY ORIGIN TYPE
EJT0.1 ZR X1,EJT7 IF EJT ORDINAL = 0
BX7 X0*X7 ISOLATE REQUEST JSN
CX3 X1,EJT CONVERT EJT ORDINAL TO OFFSET
TA3 X3+JSNE,EJT
BX0 X0*X3 JSN FROM ENTRY
BX1 X0-X7 COMPARE JSN-S
ZR X0,EJT7 IF FREE EJT ENTRY
R= X2,JFER JOB NOT FOUND ERROR CODE
NZ X1,EJT7 IF JSN MISMATCH
R= X2,RTER RETRY ERROR CODE
SX7 X6-SAEJ
ZR X7,EJT1 IF SET ABORT REQUEST
* CHECK INTERLOCK AND JOB ADVANCE.
SX1 B1
BX0 X1*X3
BX7 X1+X3 SET ENTRY INTERLOCK
LX1 6-0 CHECK JOB ADVANCE
BX1 X1*X3
BX1 X1+X0
NZ X1,EJT7 IF JOB ADVANCE OR INTERLOCK SET
SX1 X6-ENEJ
ZR X1,EJT2 IF ENABLE JOB REQUEST
SX4 X6-FJEJ
MX1 -6
BX3 -X1*X3
SB3 EJT0.2 *CAL* *ACB* RETURN ADDRESS
SB6 ACB *CAL* RETURN ADDRESS - NO LIMIT
BX1 X1-X1 PRESET NO BUFFER AVAILABLE
BX0 X2 SAVE ERROR CODE
NZ X4,CAL IF NOT FREEZE JOB REQUEST
SX3 X3-SIJS*2
NZ X3,CAL IF NOT SWAP-IN JOB STATUS
EQ EJT7 RETURN RETRY ERROR CODE
EJT0.2 BX2 X0 RESTORE ERROR CODE
ZR X1,EJT7 IF NO BUFFER ASSIGNED
SA7 A3 SET ENTRY INTERLOCK
BX7 X1 COMMUNICATIONS BUFFER ADDRESS
EQ EJT1.2 CALL *1MA*
* MAKE *1MA* CALL FOR OTHER FUNCTIONS.
EJT1 SB3 EJT1.1 *CAL* *ACB* RETURN ADDRESS
SB6 ACB *CAL* RETURN ADDRESS - NO LIMIT
BX1 X1-X1 PRESET NO BUFFER AVAILABLE
BX0 X2 SAVE ERROR CODE
EQ CAL CHECK ACTIVITY LIMIT
EJT1.1 BX2 X0 RESTORE ERROR CODE
ZR X1,EJT7 IF NO BUFFER ASSIGNED
BX7 X1 COMMUNICATIONS BUFFER ADDRESS
EJT1.2 SA4 T1 ABSOLUTE ADDRESS OF BLOCK
SA7 APQA SET BUFFER ADDRESS FOR *APQ*
ERX4 X4 FIRST WORD OF PARAMETER BLOCK
BX6 X4
SA4 T2
SA6 X1+B1 SET WORD IN BUFFER
ERX1 X4
SX3 B1
IX4 X4+X3
ERX2 X4
BX6 X1
BX7 X2
SA6 A6+B1
SA7 A6+B1
SX4 B1 TRANSFER AUTO RECALL BIT
LX4 40-0
SX3 X5 GET ADDR
BX5 X4*X5
SA4 EJTA SET UP CALL
BX4 X4+X3 MERGE ADDR
SB4 LA1MA SET PROGRAM TO CALL
SA2 RA1
LX5 1
BX7 X7-X7
BX6 X4+X5 INSERT AUTO-RECALL FLAG
EWX7 X2 CLEAR RA+1
SB3 MTRX *APQ* RETURN ADDRESS
ZR X5,APQ IF NOT AUTO-RECALL
SB3 SIS *APQ* RETURN ADDRESS
EQ APQ ASSIGN PP
* ENEJ - ENABLE JOB FOR SCHEDULING.
EJT2 MX6 -6 VALIDATE JOB STATUS
SA1 T2 READ SECOND PARAMETER BLOCK WORD ADDRESS
BX6 -X6*X3
R= X2,NDER JOB NOT DISABLED ERROR CODE
SX0 X6-IOJS*2
ZR X0,EJT3 IF AWAITING INTERACTIVE I/O
SX0 X6-DOJS*2
ZR X0,EJT3 IF DISABLED
ERX3 X1
LX6 12 SAVE JOB STATUS
BX6 X6+X3
EWX6 X1 REWRITE PARAMETER BLOCK WORD
EQ EJT7 PROCESS ERROR
EJT3 ERX1 X1
MX0 42
BX2 X0*X1
SX0 B0
ZR X2,EJT5 IF NO ENTRY POINT NAME
SB6 EJT4 SET REENTRY ADDRESS
EQ SCD SEARCH CENTRAL DIRECTORY
* IF THE SPECIFIED ENTRY POINT IS NOT FOUND, IT IS ASSUMED
* THAT THE REQUEST IS FOR A LOCAL FILE LOAD. IN THIS CASE
* THE FL FOR *LDR=* IS USED.
EJT4 SA1 TPPI GET FL FOR *LDR=*
SX0 X1+
ZR X7,EJT5 IF ENTRY POINT NOT FOUND
* CALCULATE FL FROM FOUND ENTRY POINT.
SA1 X7 GET FL FIELD
MX0 10
LX0 58
BX0 X0*X1
LX0 12
EJT5 SA4 T1 CHECK PPI FIELD
ERX4 X4
MX2 -6
LX4 42
BX1 -X2*X4
SX7 MCMX/100B
MX6 -12
ZR X1,EJT6 IF NO PPI SPECIFIED
SB6 X1-TPPIL
R= X2,IPER INVALID PPI ERROR CODE
GT B6,EJT7 IF PPI OUT OF RANGE
SA1 X1+TPPI GET PREPROCESSOR FIELD LENGTH/100B
SX1 X1
IX2 X0-X1
PL X2,EJT6 IF ENTRY POINT FIELD LENGTH IS LARGER
BX0 X1 MOVE LARGER FL
EJT6 SA2 A3+SCLE-JSNE GET USER-S NFL
BX3 -X6*X2 CURRENT FL
LX6 12
BX6 -X6*X2
ZR X6,EJT6.1 IF ECS NOT ASSIGNED
IX6 X3-X7
IX3 X0-X7
PL X6,EJT6.1 IF CURRENT FL .GE. *MCMX*
PL X3,EJT6.1 IF FL .GE. *MCMX*
BX0 X7 SET FL TO *MCMX*
EJT6.1 IX7 X2+X0 ADD IN SELECTED FL
SA7 A2
* CALCULATE ENTRY TIME.
AX2 54
CX1 X2,JCB CONVERT JCB ORDINAL TO OFFSET
TA1 X1+EXQT,JCB
MX3 -12
BX2 -X3*X1 INITIAL EXECUTION PRIORITY
NZ X0,EJT6.2 IF JOB STEP INITATION
* IF JOB STEP INITATION AFTER I/O, USE INTERACTIVE JOB PRIORITY
* (TP). OTHERWISE USE INITIAL PRIORITY (IP).
SA2 A1+MCMT-EXQT
AX2 36
BX2 -X3*X2
EJT6.2 AX1 12
BX6 -X3*X1 WEIGHTING FACTOR (SHIFT COUNT)
SB6 X6
AX1 24
BX1 -X3*X1 LOWER BOUND SCHEDULING PRIORITY
IX2 X2-X1
SA1 RTCL CURRENT TIME
LX6 X2,B6
AX1 36
IX1 X1-X6 ENTRY TIME
SA2 A3+B1 CLEAR SCHEDULE FIELD
MX0 30
BX7 X0*X2
BX7 X1+X7 MERGE ENTRY TIME
SA7 A2
R= X1,ROJS*2
SX2 B0
SA3 A3 CHANGE JOB STATUS
MX0 54
BX7 X0*X3
BX7 X7+X1
SA7 A3 ENABLE JOB
EJT7 SA3 T1 PARAMETER BLOCK ADDRESS
ERX4 X3 FIRST WORD OF PARAMETER BLOCK
SX6 B1 SET PARAMETER BLOCK COMPLETE
LX2 10-0
BX4 X4+X6
SA1 RA1 READ ADDRESS OF RA+1
BX7 X7-X7
BX6 X4+X2 SET ERROR CODE
EWX7 X1
EWX6 X3
EQ SJS START JOB SCHEDULER
EJTA VFD 18/3L1MA,6/0,12/5,24/0
END SPACE 4
*** *END*.
* END JOB.
*
*T 18/ *END*,42/
END EQU SNS SET NULL STATUS
LDR SPACE 4,10
*** *LDR*.
* REQUEST OVERLAY LOAD.
*
*T 18/ *LDR*,24/,18/ ADDR
* REQUEST OVERLAY LOAD AS SPECIFIED BY (ADDR).
LDR BSS 0 ENTRY
SB4 LALDR SET *LDR* LOAD PARAMETER INDEX
EQ AAR1 ASSIGN AS AUTO-RECALL REQUEST
LDV SPACE 4,10
*** *LDV*.
* REQUEST LOADER ACTION.
*
*T 18/ *LDV*,6/,36/ 0
* REQUEST AUTO LOAD OF RELOCATABLE FILE, NAME IN (64B).
*
*T 18/ *LDV*,24/,18/ ADDR
* REQUEST OVERLAY LOAD AS SPECIFIED BY (ADDR).
LDV BSS 0 ENTRY
SX6 X4-3RLOD
SX7 X4-3RMEM
ZR X6,LOD IF *LOD*
SX6 X4-3RLDX
ZR X7,MEM IF *MEM*
SX7 X4-3RLDV
ZR X6,LDX IF *LDX*
NZ X7,APJ IF NOT *LDV*
* PROCESS *LDV* REQUEST.
SB5 X5
ZR B5,LOD IF RELOCATABLE
SX1 B1 SET AUTO RECALL
SX6 3RLDR&3RLDV CHANGE CALL TO *LDR*
LX6 42
BX2 X5-X6
LX1 40
BX5 X2+X1
SB4 LALDR SET *LDR* LOAD PARAMETER INDEX
EQ APJ1 ASSIGN PP
LDX SPACE 4,10
*** *LDX*.
* REQUEST OVERLAY LOAD.
*
*T 18/ *LDX*,6/ R,18/,18/ ADDR
* REQUEST OVERLAY LOAD AS SPECIFIED BY (ADDR).
* AUTORECALL IS NOT FORCED FOR SUBSYSTEMS.
LDX BSS 0 ENTRY
SX6 3RLDR&3RLDX CHANGE CALL TO *LDR*
LX6 42
BX5 X5-X6
SB4 LALDR SET *LDR* LOAD PARAMETER INDEX
EQ APJ0 ASSIGN PP
LOD SPACE 4,10
*** *LOD*.
* REQUEST AUTO LOAD OF RELOCATABLE FILE, NAME IN (64B).
*
*T 18/ *LOD*,6/,36/ 0
LOD BSS 0 ENTRY
SA4 LODA ENTER *LDR* REQUEST WORDS
LX1 18 POSITION FIELD LENGTH
SA2 A4+B1
BX5 X4
LX6 X2
MX7 2
SA4 B2 READ P, A0, B0
LX7 42-59 (X7) = 140BS36
SA3 B3+B0 ADDRESS OF RA
SX2 X5
IX3 X3+X2
SA2 B2+5 READ FLX
EWX6 X3
SX6 B1
IX3 X6+X3
EWX7 X3
MX3 42
LX3 18
BX4 X3*X4
AX2 36
TLX2 (6,ESM170,0)
BX6 X4+X1 STORE UPDATED (A0)
LX7 X2
SA6 B2
SA7 B2+10B STORE (X0) ECS FIELD LENGTH
SB4 LALDR SET *LDR* LOAD PARAMETER INDEX
EQ APJ1 ASSIGN PP
LODA BSS 0
CON 0LLDR+1S40+60B
CON 0LLDR=+100B
MEM SPACE 4,40
*** *MEM*.
* REQUEST MEMORY.
*
*T 18/ *MEM*,6/ ,18/ TYPE,18/ ADDR
* TYPE 0 IF CM, ABORT IF NOT AVAILABLE
* 1 IF ECS, ABORT IF NOT AVAILABLE
* 2 IF CM, DO NOT ABORT IF NOT AVAILABLE
* 3 IF ECS, DO NOT ABORT IF NOT AVAILABLE
* ADDR ADDRESS OF REQUEST WORD
*T ADDR 30/ VAL,24/,1/R,1/C,1/,1/0
*
* R = CLEAR *CMM* STATUS.
* C = THIS IS A *CMM* TYPE REQUEST.
* TYPE CM.
* IF VAL .GT. 0 THEN
* VAL = 12/,1/N,17/FL
* N = NO-REDUCE OVERRIDE.
* FL = CM FIELD LENGTH.
* TYPE ECS.
* IF VAL .GT. 0 THEN
* VAL = ECS FIELD LENGTH.
* IF VAL .EQ. -0 RELEASE ALL ECS FIELD LENGTH.
*
* TYPE CM OR ECS.
* IF VAL .EQ. 0 RETURN CURRENT FIELD LENGTH.
* IF VAL .EQ. -1 RETURN MAXIMUM FIELD LENGTH (MFL).
*
* RESPONSE.
*T ADDR 30/ FL OR MFL,30/1
*
* * MONITOR CALL ERROR.* IS RETURNED FOR THE FOLLOWING-
* 1) ILLEGAL ADDRESS.
* 2) CLEAR *CMM* STATUS WITH (R) = 1 AND (C) = 0.
* 3) CLEAR *CMM* STATUS WITH (R) = 1 AND (C) = 1 AND
* *CMM* JOB STEP STATUS NOT SET.
*
* A CMM ERROR WILL BE ISSUED BY *1MA* IF JOB STEP CMM
* STATUS IS SET AND A MEMORY CHANGE REQUEST IS ISSUED THAT
* DOES NOT HAVE THE (C) BIT SET.
MEM MX6 -23
SB5 X5 SET REQUEST ADDRESS
SA3 MP
GE B5,B4,CPE IF ADDRESS .GE. FL
LE B5,B1,CPE IF ADDRESS .LT. 2
SA2 B3 GET RA ADDRESS
BX0 -X6*X5 EXTRACT *1MA* PARAMETERS
SX6 X5
IX2 X6+X2
SX6 B1
ERX2 X2 READ REQUEST WORD
LX6 18
IX5 X0+X6 INCREMENT TYPE FIELD
MX4 -2
AX2 2 EXTRACT REQUEST TYPE
BX4 -X4*X2
AX2 28
* (B6) = *CMM* FIELD OF REQUEST WORD - 1.
SB6 X4-1
AX7 X2,B1
LX0 59-18
SA4 B7+DBAW
LX6 54-18
EQ B6,B1,CPE IF *CMM* FIELD = 2 ABORT
PL X0,MEM1 IF NOT ECS
LX6 55-54
PL X2,MEM1 IF NOT (RELEASE ALL ECS OR MFL REQUEST)
NZ X2,MEM1 IF MFL REQUEST
SX7 B1+ INDICATE NON STATUS ECS REQUEST
MEM1 BX5 X5+X3 COMPLETE *1MA* REQUEST
BX3 X6*X4 EXTRACT CMM JOB STEP STATUS
SB4 LA1MA SET *1MA* LOAD PARAMETER INDEX
LE B6,B1,MEM4 IF CMM FIELD .NE. 3
* REQUEST TO CLEAR CMM FLAG. THE CLEAR WILL BE DONE IN CPUMTR
* ONLY IF IT IS NOT POSSIBLE FOR THE REQUEST TO BE
* REQUEUED AND REPROCESSED.
ZR X3,CPE IF JOB STEP CMM FLAG NOT SET ON CLEAR
NG X0,APJ1 IF ECS STATUS REQUEST
NZ X7,AFL IF NOT STATUS REQUEST
BX6 -X6*X4 CLEAR CMM JOB STEP STATUS
SA6 A4+
* RETURN CM STATUS.
MEM2 SX3 B1
PL X7,MEM3 IF NOT MFL REQUEST
MX6 12
SA4 B7+FLCW
BX1 X6*X4
LX1 -12-30
MEM3 LX1 30 STORE RESPONSE
BX7 X7-X7
BX6 X1+X3
SA2 B3 RA ADDRESS
SA1 B3+B1 RA + 1 ADDRESS
SX3 B5
IX2 X3+X2
EWX7 X1 CLEAR RA+1
EWX6 X2 STORE RESPONSE
EQ MTRX EXIT
* PROCESS CMM REQUEST FIELD = 0, 1.
MEM4 NZ B6,MEM6 IF CMM FIELD = 0
BX6 X4+X6 SET CMM JOB STEP STATUS
SA6 A4
MEM5 NG X0,APJ1 IF ECS REQUEST
ZR X7,MEM2 IF STATUS REQUEST
EQ AFL ASSIGN FIELD LENGTH
MEM6 ZR X3,MEM5 IF CMM JOB STEP STATUS CLEAR
ZR X7,MEM5 IF STATUS REQUEST
MX1 36 ABORT WITH CMM ERROR
BX5 X1*X5
EQ APJ0 ASSIGN PP
MSG SPACE 4,20
*** *MSG*.
* SEND MESSSAGE TO SYSTEM.
*
*T, 18/ *MSG*,6/ R,12/ MO,6/ AL,18/ ADDR
* MO MESSAGE OPTION
* AL ADDRESS LOCATION (0 - USER FL, 40B - NEGATIVE FL).
* ADDR ADDRESS OF MESSAGE
*
* MO MESSAGE WRITTEN TO
* 0 MASTER DAYFILE, JOB DAYFILE, AND CONTROL POINT
* MESSAGE BUFFER
* 1 CONSOLE LINE 1
* 2 CONSOLE LINE 2
* 3 JOB DAYFILE AND CONTROL POINT MESSAGE BUFFER
* 4 ERROR LOG (SYSTEM ORIGIN / SSJ= ONLY)
* 5 ACCOUNT FILE (SYSTEM ORIGIN / SSJ= ONLY)
* 6 MASTER DAYFILE (COMMON PRODUCTS COMPATIBILITY)
* 7 JOB DAYFILE (COMMON PRODUCTS COMPATIBILITY)
* 10B INTERNAL TO *CPUMTR*
* 11B MAINTENANCE LOG (SYSTEM ORIGIN / SSJ= ONLY)
* 12B ACCOUNT FILE WITH JSN (SYOT/SSJ= ONLY)
* 13B JOB DAYFILE ONLY
*
* NOTES AN ILLEGAL MESSAGE OPTION WILL CAUSE MO = 1
* TO BE SELECTED.
MSG LX4 18
BX6 X5 SAVE REQUEST
SA6 MSGB
BX3 X5
SB5 X5 CHECK MESSAGE ADDRESS
LX3 59-23
BX4 -X0*X4 EXTRACT MESSAGE OPTION
SB6 B5-CSBN-1
MX6 12
PL X3,MSG1 IF NOT CONTROL STATEMENT MESSAGE
SX7 B5-MS1W
NZ X7,MSG0 IF NOT *MS1W*
SX7 B7 USE CPA ADDRESS AS RA
SA7 B3
SB4 200B SET FL TO LENGTH OF CPA
EQ MSG1 ISSUE MESSAGE
MSG0 SA1 B3 SET RA TO BEGINNING OF BUFFER
SX7 CSBN+2
IX7 X1-X7
SA7 B3
PL B6,CPE IF NOT IN CONTROL STATEMENT BUFFER
SB4 CSBN-INSN+7 SET LENGTH OF BUFFER
SB5 B6-B1 CHANGE NFL ADDRESS TO BUFFER INDEX
SB5 -B5
MSG1 GE B5,B4,CPE IF ILLEGAL MESSAGE ADDRESS
SB6 B4-5
LE B5,B1,CPE IF ILLEGAL MESSAGE ADDRESS
SA1 B3
SX2 B5
IX1 X1+X2
ERX2 X1 READ FIRST WORD OF MESSAGE
BX7 X6*X2
LX6 X2
SX5 B1+
ZR X2,MSG2 IF NULL MESSAGE
NZ X7,MSG2 IF MESSAGE PRESENT
BX7 X2+X5 SET OPERATION COMPLETE
AX2 30
SB5 X2
GE B5,B4,CPE IF ILLEGAL MESSAGE ADDRESS
EWX7 X1
LE B5,B1,CPE IF ILLEGAL MESSAGE ADDRESS
SA1 B3
SX2 B5
IX1 X1+X2
ERX2 X1 READ FIRST WORD OF MESSAGE
BX6 X2
MSG2 GT B5,B6,CPE IF MESSAGE ADDRESS + 5 .GT. FL
SB6 X4-TMSGL
PL B6,TMSG+1 IF ILLEGAL OPTION ASSUME 1
JP TMSG+TMSGL+B6
TMSG BSS 0 MESSAGE PROCESSOR TABLE
+ EQ MSG7 PREPROCESS MASTER DAYFILE MESSAGE
+ SA6 B7+MS1W SET MESSAGE IN LINE 1 OF CONTROL POINT
EQ MSG3
+ SA6 B7+MS2W SET MESSAGE IN LINE 2 OF CONTROL POINT
EQ MSG4
+ EQ MSG7 PREPROCESS JOB DAYFILE MESSAGE
+ EQ MSG5 PREPROCESS ERROR LOG MESSAGE
+ EQ MSG5 PREPROCESS ACCOUNT FILE MESSAGE
+ SX4 0
EQ MSG6 CHANGE MESSAGE OPTION TO MASTER DAYFILE
+ SX4 CPON/10000B
EQ MSG6 CHANGE MESSAGE OPTION TO JOB DAYFILE
+ EQ MSG7 PREPROCESS JOB DAYFILE MESSAGE
SX4 BMLN/10000B
EQ MSG4.0 PREPROCESS MAINTENANCE LOG MESSAGE
+ SX4 AJNN/10000B
EQ MSG4.1 PREPROCESS ACCOUNT MESSAGE WITH JSN
+ SX4 CDON/10000B
EQ MSG6 CHANGE MESSAGE OPTION FOR *DFMM*
TMSGL EQU *-TMSG
* FIRST CONSOLE MESSAGE.
MSG3 IX1 X1+X5
ERX3 X1
IX1 X1+X5
ERX2 X1
LX7 X3
BX6 X2
SA7 A6+B1
SA6 A7+B1
* SECOND CONSOLE MESSAGE.
MSG4 IX1 X1+X5
ERX3 X1
IX1 X1+X5
ERX2 X1
LX7 X3
BX6 X0*X2 TERMINATE MESSAGE
SA7 A6+B1
BX7 X0-X0
SA6 A7+B1
EQ MTRP CLEAR RA+1
* ENTER HERE TO PREPROCESS MAINTENANCE LOG MESSAGE (MO = 11B).
MSG4.0 SB6 B0
AX6 48
* ENTER HERE TO CHANGE MESSAGE OPTION (MO = 12B).
MSG4.1 SA1 RA1 READ REQUEST
LX0 24
ERX5 X1
BX5 X0*X5 REMOVE CURRENT MESSAGE OPTION
LX4 24
BX7 X5+X4 INSERT NEW OPTION
MX0 -12
EWX7 X1 RESET REQUEST
BX5 X7
* ENTER HERE TO CHECK JOB ORIGIN AND SSJ (MO = 4, 5).
MSG5 SA3 B7+TFSW GET JOB EJT ORDINAL
MX1 -12
LX3 12
BX3 -X1*X3
MX4 -4
CX2 X3,EJT CONVERT EJT ORDINAL TO OFFSET
+ ZR X3,* IF NO EJT ORDINAL
TA3 X2+SCLE,EJT GET JOB ORIGIN
LX3 -48
BX3 -X4*X3
SX3 X3-SYOT
ZR X3,MSG8 IF SYSTEM ORIGIN JOB
SA1 B7+SEPW
BX7 X7-X7
LX1 59-50
NG X1,MSG8 IF SSJ JOB
ZR B6,MTRX IF MO = BINARY MAINTENANCE LOG
SX4 CPON/10000B
* ENTER HERE TO CHANGE MESSAGE OPTION (MO = 6, 7, 13B).
MSG6 LX0 24
SA1 RA1 READ REQUEST
ERX5 X1
BX5 X0*X5 REMOVE CURRENT MESSAGE OPTION
LX4 24
BX5 X5+X4 INSERT NEW OPTION
MX0 -12
BX7 X5
EWX7 X1 RESET REQUEST
* ENTER HERE TO CHECK MESSAGE LIMIT EXCEEDED (MO = 0, 3).
MSG7 SA1 B7+ACLW
LX1 12
AX1 48
NZ X1,MSG8 IF MESSAGE LIMIT NOT EXCEEDED
NG X1,MSG8 IF UNLIMITED USER
SX7 MLET MESSAGE LIMIT ERROR
JP SEF SET ERROR FLAG
MSG8 SA2 B3 RA
SX4 B5 SAVE RELATIVE FWA
ZR B6,MSG11 IF BINARY MESSAGE
SB6 B5+MCML-2
SX4 B5-1 SET MESSAGE ADDR-1
SX0 -5 PRESET MASK INDEX FOR CODED MESSAGE
SA3 MSGA
* DETERMINE WORD COUNT OF CODED MESSAGE.
MSG9 SX1 B5
IX1 X2+X1
ERX1 X1 READ NEXT WORD
SB5 B5+B1 ADVANCE MESSAGE ADDRESS
EQ B5,B6,MSG10 IF MAXIMUM MESSAGE LENGTH
GT B5,B4,CPE IF ILLEGAL ADDRESS
ZR X1,MSG10 IF EOM
BX6 X3*X1 EXTRACT LOW ORDER BITS FROM EACH BYTE
BX7 -X3*X1
IX6 X6+X3 NON-ZERO CHARACTER PAIRS PRODUCE CARRY
LX7 -11
NO
IX6 X6+X7 COMPENSATE FOR *5:* (DISPLAY CODE 4000B)
BX7 -X3*X6
BX6 -X3-X7 CHECK FOR 5 NON-ZERO BYTES
ZR X6,MSG9 IF WORD HAS NO EOM BYTE
PL X7,MSG10 IF EOM IN BYTE 0
+ LX7 12
SX0 X0+B1 ADVANCE INDEX FOR EOM MASK
NG X7,* IF EOM BYTE NOT REACHED
MSG10 SB6 X4+B1 FWA
SX6 B5-B6 SET MESSAGE LENGTH
EQ MSG14 GO ISSUE MESSAGE TO DAYFILE
* CHECK LENGTH OF BINARY MESSAGE.
MSG11 PL X6,MSG13 IF MESSAGE LENGTH .GE. 0
MSG12 SX6 MBML-2 SET MAXIMUM MESSAGE LENGTH
MSG13 SB6 X6-MBML+1
PL B6,MSG12 IF INVALID MESSAGE LENGTH
SB5 B5+X6
SB6 B5+B1
GE B6,B4,CPE IF EOM BEYOND FL
SX1 B5
BX0 X0-X0 DEFINE MASK INDEX
IX1 X1+X2
ERX1 X1 READ LAST WORD
MSG14 IX4 X4+X2 ABSOLUTE FWA
SA5 RA1
MX2 1 SET *MSG* FLAG
ERX5 X5 READ REQUEST
JP DFM2 ISSUE MESSAGE TO DAYFILE
MSGA DATA 37773777377737773777B
MSGB BSS 1 ORIGINAL *MSG* REQUEST
PFL SPACE 4
*** *PFL*.
* SET (P) AND CHANGE FIELD LENGTH.
*
*T 18/ *PFL*,6/,18/ P,18/ FL
* P NEW (P)
* FL NEW FIELD LENGTH
PFL SX7 X4-3ROPE
SB5 X4-3RPFL
ZR X7,CLO IF *OPE*, CONVERT TO *CIO*
NZ B5,APJ IF NOT *PFL*
* PROCESS *PFL* REQUEST.
MX2 18
SA3 B2 READ EXCHANGE PACKAGE
LX2 -6
BX6 -X2*X3 CLEAR (P)
LX5 18
BX4 X2*X5 EXTRACT NEW (P)
BX5 -X2*X5 REFORMAT *PFL* REQUEST TO *RFL* REQUEST
BX6 X4+X6 MERGE NEW (P)
LX5 -18
SA6 B2 STORE EXCHANGE PACKAGE
EQ RFL
RCL SPACE 4,10
*** *RCL*.
* PLACE PROGRAM ON RECALL.
*
* ENTRY (X7) = 0.
*
*T 18/ *RCL*,1/ ,1/0,40/
* PLACE PROGRAM ON RECALL UNTIL SYSTEM RECALL DELAY HAS
* EXPIRED.
*
*T 18/ *RCL*,1/ ,1/1,22/,18/ STATUS
* PLACE PROGRAM ON RECALL UNTIL BIT 0 OF (STATUS) IS SET.
* JOBS WILL BE CHECKED FOR PENDING *RCLP* BY *MTR* PP RECALL.
*
* EXIT TO *SXR* IF *RCLP*.
* TO *SXS* IF *RCL*.
* TO *CPE* IF BAD ADDRESS ON *RCLP*.
* TO *MTRX* IF *RCLP* REQUEST COMPLETE.
* PROCESSED INLINE IN *CPR* DUE TO USAGE.
RFL SPACE 4,10
*** *RFL*.
* REQUEST FIELD LENGTH.
*
*T 18/ *RFL*,6/,18/ ADDR,1/N,17/ FL
* ADDR ADDRESS FOR STATUS RESPONSE
* N NO-REDUCE OVERRIDE
* FL FIELD LENGTH
*
* IF FL = 0, CURRENT FIELD LENGTH WILL BE RETURNED
*
* RESPONSE.
*T ADDR 12/ 0,18/ FL,30/ 1
RFL MX6 -18 EXTRACT FL
SA4 MP READ *1MA* CALL
BX2 -X6*X5
SA3 B7+DBAW CHECK IF CMM JOB STEP STATUS SET
AX5 18
SB5 X5 SET STATUS ADDRESS
LX3 59-54
BX5 X4
GT B5,B4,CPE IF ADDRESS .GE. FL
ZR X2,RFL1 IF STATUS REQUEST
NG X3,RFL2 IF CMM JOB STATUS SET
RFL1 BX5 X5+X2
ZR B5,AFL IF NO STATUS REQUEST
* CONVERT *RFL* TO *MEM* REQUEST.
LX2 30
SX5 B5
BX6 X2
LE B5,B1,CPE IF ADDRESS .LT. 2
SA2 B3+
IX2 X2+X5
EWX6 X2
EQ MEM
RFL2 SB4 LA1MA SET *1MA* LOAD PARAMETER INDEX
EQ APJ1 ASSIGN PP
RPV SPACE 4,10
*** *RPV.*
* REPRIEVE CENTRAL PROGRAM.
*
* THIS REQUEST IS TRAPPED IN ORDER TO FORCE AUTO RECALL.
* THIS ENSURES PROPER INTERLOCKING OF THE CONTROL POINT
* AREA WHILE ALLOWING FOR EXISTING PROGRAMS THAT MAY
* CALL *RPV* WITHOUT AUTO RECALL.
RPV EQU AAR ASSIGN *RPV* AS AUTO RECALL REQUEST
RSB SPACE 4,50
*** *RSB*.
* READ SUB-SYSTEM PROGRAM BLOCK.
*
*T 18/ *RSB*,1/ ,1/R,4/ ,6/0,12/ SID,18/ STAT
* R = 1 IF AUTO RECALL SELECTED.
* SID = SUBSYSTEM IDENTIFICATION.
* IF SID = 0, THEN BLOCK IF READ FROM CORE MEMORY OR
* RELATIVE TO CALLERS CONTROL POINT.
* STAT = ADDRESS OF STATUS WORD IN FORMAT -
*
*T STAT 12/0,12/ WC,18/ ADDR,18/ BUFF
* WC = NUMBER OF WORDS TO BE READ.
* ADDR = ADDRESS TO READ FROM IN SUB-SYSTEM.
* BUFF = ADDRESS OF BUFFER TO RECEIVE DATA.
*
*
* A BLOCK OF DATA OF LENGTH WC WHERE WC < 101B WILL BE
* TRANSFERRED FROM SUBSYSTEM WITH IDENTIFICATION SID.
* BEGINNING AT LOCATION ADDR TO A BUFFER IN THE CALLING
* PROGRAM THAT BEGINS AT LOCATION BUFF. IF ADDR IS NEGATIVE,
* THE TRANSFER WILL BE FROM THE SUBSYSTEM-S NFL.
*
*
* WHEN SID = 0, THE CONTENTS OF BUFF DETERMINE WHETHER THE
* READ IS FROM CENTRAL MEMORY RESIDENT OR IS RELATIVE TO
* THE CALLER-S CONTROL POINT. IF BIT 59 OF BUFF IS ONE,
* THE READ IS FROM CMR, AND ADDR IS THE ABSOLUTE ADDRESS
* AT WHICH TO BEGIN THE READ. IF BIT 59 OF BUFF IS ZERO,
* THEN THE READ IS RELATIVE TO THE CALLER-S CONTROL POINT
* AND IS EITHER A SELECTIVE OR A BLOCK READ.
*
*T BUFF 1/C, 23/ 0, 18/ B, 18/ CPAW
* C = 1, IF CMR READ.
* C = 0, IF CONTROL POINT READ.
* B = 0, SELECTIVE READ.
* B = 1, BLOCK READ.
* CPAW = CONTROL POINT AREA WORD TO READ.
*
* IF THE READ IS SELECTIVE, BUFF CONTAINS A LIST OF ADDRESSES
* TO READ. THE LIST TERMINATES AT WC OR WITH A ZERO ENTRY.
* THE WORD READ IS STORED IN THE BUFF LOCATION CONTAINING ITS
* ADDRESS. B CAN ONLY BE SPECIFIED IN (BUFF+0).
* IF THE READ IS A BLOCK READ, WC WORDS, BEGINNING WITH THE
* ADDRESS SUPPLIED (CPAW), ARE READ AND STORED IN BUFF.
*
*
* THE CALLING PROGRAM MUST HAVE EITHER A SSJ= ENTRY POINT OR A
* SUBSYSTEM IDENTIFICATION.
*
*
* RESPONSE
*T STAT 12/ REPLY,12/ WC,18/ ADDR,18/ BUFF
* REPLY = 4000 TRANSFER SUCCESSFULLY COMPLETED.
* 2000 SUB-SYSTEM NOT PRESENT.
RSB BSS 0 ENTRY
SA2 B7+JCIW CHECK SUBSYSTEM IDENTIFICATION
SA4 B7+SEPW CHECK FOR SSJ=
AX2 24
BX2 -X0*X2
SX2 X2-LSSI-1
LX4 59-50
BX4 -X2+X4
PL X4,APJ IF CALL CONDITIONS NOT MET
SB5 X5
LX5 -18
LE B5,B1,CPE IF *STAT* .LE. 1
GE B5,B4,CPE IF *STAT* .GE. FL
SX1 X5 (X1) = SUBSYSTEM IDENTIFICATION
SA3 B3 RA
SX4 B5 RELATIVE STATUS ADDRESS
IX3 X3+X4 RA + STAT
BX7 X3
ERX3 X3 READ (STAT)
SA7 T1 SAVE STATUS ADDRESS
SB5 X3 (B5) = *BUFF*
AX3 18
LE B5,B1,CPE IF *BUFF* .LE. 1
SX4 X3 (X4) = *ADDR*
AX3 18
SB6 B5+X3 BUFF + WC
PX5 X6 PRESET NOT PRESENT STATUS
LE B6,B5,CPE IF WC .LT. 1
GE B6,B4,CPE IF BUFF + WC .GE. FL
SB6 100B
SB4 X3 (B4) = WC
SA2 B3 RA
SX6 B5 BUFF
IX6 X2+X6
SA6 T2 SAVE BUFFER ADDRESS
GT B4,B6,CPE IF WC .GT. 100
SB3 RSB2 *RSC* RETURN ADDRESS
NZ X1,RSC IF SUB-SYSTEM READ
SA2 FLSW SET FL TO CMR SIZE
MX3 0 SET RA TO ZERO FOR LOW CORE UPDATE
BX6 -X0*X2
SA1 T2 GET BUFFER ADDRESS
ERX1 X1
LX6 6
SX6 X6+B1 SET FL TO SIZE OF CMR+1
NG X1,RSB2.1 IF LOW CORE READ
SX4 X1
LX1 59-18
SB6 -200B
SX3 B7+ SET RA TO START OF CP AREA
SX6 B1-B6 SET *FL* TO LENGTH OF CP AREA + 1
NG X1,RSB2.1 IF BLOCK READ OF CONTROL POINT AREA
LX1 18-59
MX5 1 COMPLETION STATUS
* SELECTIVE READ OF CONTROL POINT AREA.
RSB1 SX1 X1+
NG X1,CPE IF ADDRESS OUT OF RANGE
SX7 X1+B6
PL X7,CPE IF ILLEGAL CONTROL POINT AREA ADDRESS
SA4 B7+X1 READ CONTROL POINT AREA WORD
BX6 X4
SA1 T2 GET BUFFER ADDRESS
EWX6 X1
LE B4,B1,RSB3 IF TRANSFER COMPLETE
SX7 B1
IX7 X7+X1
ERX1 X7 READ NEW ADDRESS
SA7 T2 SAVE
SB4 B4-B1
NZ X1,RSB1 IF CONTINUING SELECTIVE READ
EQ RSB3
* RSC EXIT ADDRESSES.
VFD 12/RSB3-RSB2,18/CPE,12/SXS-RSB2,18/SXS
* READ SUBSYSTEM FL OR NFL.
RSB2 SA2 A2-STSW+FLSW GET NFL
AX2 48 NFL/100B
LX2 6 NFL
IX3 X3-X2 SET RA TO RA-NFL
IX4 X4+X2 BIAS *ADDR* BY NFL
IX6 X6+X2 SET FL TO FL+NFL
* PERFORM BLOCK READ.
RSB2.1 SX7 X4+B4 ADDR + WC
NG X4,CPE IF ADDR .LT. ZERO
SX4 X4
IX6 X7-X6
MX5 1 SET COMPLETION STATUS
PL X6,CPE IF ADDR + WC .GE. FL
IX0 X4+X3 FWA OF SUBSYSTEM READ
SA1 T2 BUFF
IX1 X0-X1 DIFF
SB6 RSB3 SET *MSM* *MSR* RETURN
TJP (/CME/MSR,CME,/MONITOR/MSM,CMUMTR,/MONITOR/MSR)
* RETURN COMPLETION STATUS.
RSB3 SA3 T1 STAT ADDRESS
ERX4 X3 READ STAT
BX6 X5+X4
MX7 0
EWX6 X3 STORE STATUS
JP MTRP EXIT TO STORE OUTPUT REGISTER
SIC SPACE 4,40
*** *SIC*.
* SEND INTER-CONTROL POINT BLOCK TO SUBSYSTEM PROGRAM.
*
* CONTROL IS ALSO TRANSFERRED HERE FOR SYSTEM CONTROL POINT
* FUNCTIONS *SSC* AND *SSF*.
*
*T 18/ *SIC*,1/ ,1/R,4/ ,18/ BUFF,18/ STAT
* R= 1 IF AUTO RECALL SELECTED.
* BUFF= ADDRESS OF BUFFER TO BE TRANSFERRED TO SUBSYSTEM.
* STAT= ADDRESS OF STATUS WORD IN FORMAT -
*
*T STAT 18/ BN,12/ SID,30/ 0
* BN = BUFFER NUMBER (0 OR 1) OF SUBSYSTEM TO TRANSFER TO.
* SID = DESTINATION SUBSYSTEM IDENTIFICATION.
*
* A BLOCK STARTING AT BUFF WILL BE TRANSFERRED TO THE INDICATED
* SUBSYSTEM. BLOCK LENGTH IS SPECIFIED IN BITS 0-17 OF THE
* FIRST WORD OF THE BLOCK (BUFF). LENGTH INCLUDES THIS FIRST
* WORD. THE LENGTH OF THE BLOCK MUST BE LESS THAN 101B WORDS.
* THE CALLER MUST BE A SUBSYSTEM OR HAVE AN SSJ= ENTRY POINT.
*
* RESPONSE.
*T STAT 18/ BN,12/ SID,30/ REPLY
* REPLY= 1 IF TRANSFER COMPLETED SUCCESSFULLY.
* 3 IF DESTINATION SUBSYSTEM IS NOT PRESENT IN THE
* SYSTEM.
* 5 IF SUBSYSTEM BUFFER IS FULL, SUBSYSTEM BEING MOVED,
* OR SUBSYSTEM JOB IS ADVANCING.
* 7 IF BLOCK LENGTH AS SPECIFIED IN THE FIRST WORD IS
* LARGER THAN THAT PERMITTED BY THE SUBSYSTEM.
* 11 IF DESTINATION BUFFER IS UNDEFINED BY SUBSYSTEM.
*
* IF AUTO-RECALL IS SELECTED AND CONDITION 5 ABOVE IS PRESENT,
* THE CALLING PROGRAM IS PLACED IN RECALL STATUS UNTIL THE
* CONDITION ENDS.
SIC SX6 X4-3RSIC
TNZ X6,(/MONITOR/SSC,SCP,/MONITOR/APJ) IF NOT SIC
* PROCESS *SIC* REQUEST.
SA2 B7+JCIW CHECK FOR SUBSYSTEM
SA4 B7+SEPW CHECK *SSJ=*
AX2 24
LX4 59-50
BX2 -X0*X2 SUBSYSTEM ID
BX4 -X4
SX2 X2-LSSI-1
SB5 X5+ SET *STAT* ADDRESS
BX2 X4*X2
LX5 -18
NG X2,APJ IF CALLER NOT SUBSYSTEM OR SSJ= PROGRAM
LE B5,B1,CPE IF *STAT* .LE. 1
GE B5,B4,CPE IF *STAT* .GE. FL
SB6 X5 SET *BUFF* ADDRESS
SA4 B3 RA
SX3 B5 STATUS ADDRESS
IX7 X3+X4
ERX3 X7 READ (STAT)
SX5 X5
SA7 T1 SAVE STATUS ADDRESS
LE B6,B1,CPE IF *BUFF* .LE. 1
GE B6,B4,CPE IF *BUFF* .GE. FL
AX3 30
BX1 -X0*X3 (X1) = SUBSYSTEM IDENTIFICATION
IX7 X4+X5
ERX4 X7 READ (BUFF)
SA7 T2
AX3 12
SB6 B6+X4 LWA + 1 OF *BUFF*
GE B6,B4,CPE IF BUFF + WC .GE. FL
SB4 X4+ WORD COUNT
LT B4,B1,CPE IF WC .LT. 1
SB5 100B
BX5 X4 SAVE FIRST WORD OF TRANSFER
SX7 B1
SB3 SIC1 *RSC* RETURN ADDRESS
BX7 X7*X3 CHECK BUFFER NUMBER
BX3 X3-X7
GT B4,B5,CPE IF WORD COUNT .GT. 100B
SX4 ICAN
ZR X3,RSC IF BUFFER NUMBER .GT. 1
EQ CPE PROCESS CALL ERROR
* *RSC* EXIT ADDRESSES.
VFD 12/SIC7-SIC1,18/CPE,12/SIC8-SIC1,18/SIC8
SIC1 IX1 X3-X4 BUFFER POINTER WORD ABSOLUTE ADDRESS
ERX1 X1 READ BUFFER POINTERS
SB5 X6+ (B5) = SUBSYSTEM FL
MX0 -6
NZ X7,SIC2 IF BUFFER 1
LX1 -24
SIC2 SB3 X1 BUFFER RELATIVE ADDRESS
AX1 18
ZR B3,SIC5 IF BUFFER UNDEFINED
BX1 -X0*X1
SB6 X1+B1 BUFER LENGTH
GT B4,B6,SIC6 IF BLOCK TOO LONG FOR BUFFER
SB6 B3+B4 BUFFER ADDRESS + WC
GT B6,B5,SIC7 IF BUFFER OUTSIDE OF FL
SX1 B3 BUFFER FWA
IX7 X1+X3 BUFFER ABSOLUTE ADDRESS
SA7 T3 SAVE SUBSYSTEM BUFFER ADDRESS
ERX2 X7 READ SUBSYSTEM BUFFER
NZ X2,SIC8 IF BUFFER FULL
SB4 B4-B1
SX0 B1
IX7 X7+X0 SUBSYSTEM BUFFER + 1
SA1 T2 BUFFER FWA
IX0 X1+X0 FWA TO MOVE FROM
IX1 X0-X7 DIFFERENCE OF ADDRESSES
SB6 SIC3 *MSM* *MSR* RETURN ADDRESS
TJP (/CME/MSR,CME,/MONITOR/MSM,CMUMTR,/MONITOR/MSR)
SIC3 BX7 X5 STORE FIRST WORD
SX6 B1 COMPLETION STATUS
SA4 T3
TIC DCPC INVALIDATE CACHE ON OTHER CPU, IF PRESENT
EWX7 X4
* RETURN COMPLETION STATUS.
SIC4 SA3 T1
ERX4 X3 REREAD STATUS WORD
MX0 30
BX4 X0*X4
MX7 0
BX6 X4+X6
EWX6 X3
EQ MTRP EXIT TO CLEAR RA+1
* PROCESS DESTINATION BUFFER UNDEFINED BY SUBSYSTEM. (11)
SIC5 SX6 11B
EQ SIC4
* PROCESS BLOCK TOO LARGE FOR SUBSYSTEM BUFFER. (7)
SIC6 SX6 7
EQ SIC4
* PROCESS SUBSYSTEM NOT PRESENT IN SYSTEM. (3)
SIC7 SX6 3
EQ SIC4
* PROCESS SUBSYSTEM MOVING, ADVANCING OR BUFFER FULL.
SIC8 SA5 RA1 RA+1 ADDRESS
ERX5 X5 CHECK FOR AUTO RECALL
LX5 59-40
SX6 5
PL X5,SIC4 IF AUTO RECALL NOT SPECIFIED
EQ SXS PLACE CALLER IN AUTO RECALL
SPC SPACE 4,10
*** *SPC*.
* PROCESS SPECIAL PP REQUEST. VALID ONLY FROM SYSTEM JOB.
*
*T 18/ *SPC*, 24/, 18/ ADDR
* ADDR ADDRESS OF PPU REQUEST
SPC SA1 B7+JCIW
SB5 X5
AX1 24
LE B5,B1,CPE IF ADDRESS .LE. 1
GE B5,B4,CPE IF ADDRESS PAST FL
BX3 -X0*X1
SA4 B3 READ PP REQUEST
SX6 X5
IX2 X6+X4
ERX4 X2
BX6 X4
LX4 18
ZR X3,APJ IF NOT SYSTEM JOB
SX5 X4-3R1ZZ-1
SX4 X4-3RAAA
BX4 -X4*X5
PL X4,CPE IF ILLEGAL PROGRAM NAME
SA5 B3+B1 CLEAR (RA+1)
EWX7 X5
SB6 SPC1 *CAL* RETURN ADDRESS - NO LIMIT
BX5 X2 SAVE ADDRESS OF REQUEST
SB3 MTRX *CAL* RETURN ADDRESS - ACTIVITY LIMIT
EQ CAL CHECK ACTIVITY LIMIT
SPC1 EWX7 X5 CLEAR REQUEST WORD
SB4 B0 SET LIBRARY SEARCH NEEDED
SA7 APQA
LX6 18
SX4 X6-3RCIO
LX6 -18
TNZ X4,(/DCP/APQ,DCPC,/MONITOR/APQ) IF NOT *CIO*
SA6 /CPUCIO/IR
SA7 /CPUCIO/MB
EQ /CPUCIO/CPC PROCESS *CIO* REQUEST
TIM SPACE 4,45
*** *TIM*.
* REQUEST SYSTEM TIME.
*
*T 18/ *TIM*,6/,12/ OP,6/,18/ ADDR
* OP TIME OPTION
* ADDR ADDRESS FOR RESPONSE
*
*
* OP RESPONSE
*
* 0 ACCUMULATED CPU TIME
*T ADDR 3/2,45/ SECONDS,12/ MILISEC.
*
* 1 DATE
*T ADDR 60/ * YY/MM/DD.*
*
* 2 CLOCK
*T ADDR 60/ * HH.MM.SS.*
*
* 3 JULIAN DATE
*T ADDR 24/ 0,36/ * YYDDD*
*
* 4 SCOPE FORMAT REAL TIME
*T ADDR 24/0, 36/ SECONDS*4096
*
* 5 REAL TIME
*T ADDR 24/ SECONDS,36/ MILLISECONDS
*
* 6 PACKED DATE/TIME
*T ADDR 24/ 0,6/ Y-70,6/ MM,6/ DD,6/ HH,6/ MM,6/ SS
*
* 7 ACCUMULATED SRUS
*T ADDR 12/ 2000B,12/ 0,36/ MILLI-UNITS
*
* 11 ACCUMULATED CYBER 176 CPU CLOCK CYCLE COUNT FOR JOB.
*T ADDR 12/ TYPE,48/ CLOCK CYCLE COUNT
* TYPE = 2000B, IF CLOCK CYCLE COUNT IS AVAILABLE.
* TYPE = 6000B, IF CLOCK CYCLE COUNT IS NOT AVAILABLE.
*
* 12 ACCUMULATED CYBER 176 CPU CLOCK CYCLE COUNT SINCE
* DEADSTART.
*T ADDR 12/ TYPE,48/ CLOCK CYCLE COUNT
* TYPE = 2000B, IF CLOCK CYCLE COUNT IS AVAILABLE.
* TYPE = 6000B, IF CLOCK CYCLE COUNT IS NOT AVAILABLE.
*
* 13 DATE WITH 4-DIGIT YEAR
*T ADDR 60/ *YYYY/MM/DD*
*
* 14 JULIAN DATE WITH 4-DIGIT YEAR
*T ADDR 18/ 0,42/ *YYYYDDD*
*
* 15 JULIAN DATE WITH *ISO* CENTURY CHARACTER
*T ADDR 24/ 0,36/ *CYYDDD*
* C = * * FOR 19YY YEARS, *0* FOR 20YY YEARS.
TIM SB5 X5 CHECK RESPONSE ADDRESS
LE B5,B1,CPE IF ILLEGAL ADDRESS
AX5 24
GE B5,B4,CPE IF ADDRESS OUT OF RANGE
BX4 -X0*X5 SET OPTION
SB6 X4-TTIML
PL B6,TTIM IF UNIDENTIFIED, ASSUME 0
JP TTIM+TTIML+B6
TTIM BSS 0
* OPTION 0 - ACCUMLATED CPU TIME.
+ SB3 TIM3 UPDATE CPU TIME
TJP (/NVE/CPT,NVE,/CME/CPT,CME,/MONITOR/CP76,CP176,/MONITOR
,/CPT)
* OPTION 1 - DATE.
+ SA1 DTEL DATE
EQ TIM1
* OPTION 2 - CLOCK.
+ SA1 TIML CLOCK
EQ TIM1
* OPTION 3 - JULIAN DATE.
+ SA1 JDAL JULIAN DATE
JP TIM1
* OPTION 4 - SCOPE FORMAT REAL TIME.
+ SA1 RTCL REAL TIME CLOCK
JP TIM2
* OPTION 5 - REAL TIME.
+ SA1 RTCL REAL TIME CLOCK
EQ TIM1
* OPTION 6 - PACKED DATE/TIME.
+ SA1 PDTL PACKED DATE
EQ TIM1
* OPTION 7 - ACCUMULATED SRUS.
+ SB3 TIM5 UPDATE CPU TIME AND SRU ACCUMULATOR
TJP (/NVE/CPT,NVE,/CME/CPT,CME,/MONITOR/CP76,CP176,/MONITOR
,/CPT)
* OPTION 10 - UNIDENTIFIED OPTION.
+ EQ TTIM+0 UNIDENTIFIED OPTION, ASSUME OPTION = 0
* OPTION 11 - ACCUMULATED CLOCK CYCLE COUNT FOR JOB.
+ SB3 TIM7 ACCUMULATED JOB CLOCK CYCLE COUNT
TEQ (/MONITOR/CP76,CP176,/MONITOR/TIM6)
* OPTION 12 - ACCUMULATED CLOCK CYCLE COUNT SINCE DEADSTART.
+ SB3 TIM8 *CPT* RETURN ADDRESS
TEQ (/MONITOR/CP76,CP176,/MONITOR/TIM6) COMPUTE CP TIME
* OPTION 13 - DATE WITH 4-DIGIT YEAR.
+ SA1 DTEL DATE
EQ TIM12 EXPAND TO 4-DIGIT YEAR
* OPTION 14 - JULIAN DATE WITH 4-DIGIT YEAR.
+ SA1 JDAL JULIAN DATE
JP TIM14 EXPAND TO 4-DIGIT YEAR
* OPTION 15 - JULIAN DATE WITH *ISO* CENTURY CHARACTER.
+ SA1 JDAL JULIAN DATE
JP TIM10 ADD *ISO* CENTURY CHARACTER
TTIML EQU *-TTIM
TIM1 SA2 RA1 RA+1
SX7 B5-B1 REQUEST ADDRESS-1
BX6 X1 STORE REQUEST
IX3 X2+X7
BX7 X7-X7
EWX6 X3 STORE VALUE REQUESTED
EWX7 X2 CLEAR RA+1
EQ MTRX EXIT
* CONVERT REAL TIME (SCOPE FORMAT).
TIM2 MX2 -36 EXTRACT MILLISECONDS
SA3 TH+1 =1000.P
BX6 -X2*X1
NX2 X3 NORMALIZE DIVISOR
LX6 12 MILLISECONDS*4096
PX7 X6
FX3 X7/X2 MILLISECONDS*4096/1000.P
UX6 X3,B4 UNPACK RESULT
LX1 X6,B4
EQ TIM1 STORE RESULT
* CONVERT CPU/REAL TIME.
TIM3 SB4 TIM4 SET *DSB* RETURN ADDRESS
SA2 CPTB CONVERT QUARTER NANOUNITS TO MILLIUNITS
EQ /PROGRAM/MSB MULTIPLY 60 BIT INTEGER
TIM4 SA2 TH =.001P48+1
PX1 X6
DX6 X2*X1 EXTRACT MILLISECONDS
FX7 X2*X1 EXTRACT SECONDS
SA3 TH+1 =1000.P
UX5 X7
FX4 X3*X6 SCALE MILLISECONDS
LX5 12 MERGE MILLISECONDS, SECONDS
BX1 X5+X4
EQ TIM1
* SCALE SRUS TO MILLI-UNITS.
TIM5 SA2 TTH =.0001P48+1
SA1 B7+SRUW SRU ACCUMULATOR
MX7 -42
BX7 -X7*X1
PX1 X7
FX1 X2*X1 SCALE
EQ TIM1 STORE REQUEST
* CYBER 176 CPU CLOCK COUNT UNAVAILABLE.
TIM6 MX1 2 INDICATE CLOCK COUNT UNAVAILABLE
SB3 A5-B1 RESET (B3)
EQ TIM1 STORE RESULT
* ADD *ISO* CENTURY CHARACTER TO *JDATE*.
TIM10 LX1 30
BX1 X0*X1
SX6 1R SPACE MARKS YEAR AS 19YY
NG X1,TIM11 IF YEAR IS 50 OR GREATER
SX6 1R0 ZERO MARKS YEAR AS 20YY
TIM11 BX1 X1+X6
LX1 30
EQ TIM1 STORE RESULT
* EXPAND *DATE* FROM * YY/MM/DD.* TO *YYYY/MM/DD*.
TIM12 LX1 6
BX1 X0*X1
SX6 2R19
NG X1,TIM13 IF YEAR IS 50 OR GREATER
SX6 2R20
TIM13 BX1 X1+X6
LX1 48
EQ TIM1 STORE RESULT
* EXPAND *JDATE* FROM *YYDDD* TO *YYYYDDD*.
TIM14 LX1 30
BX1 X0*X1
SX6 2R19
NG X1,TIM15 IF YEAR IS 50 OR GREATER
SX6 2R20
TIM15 BX1 X1+X6
LX1 30
EQ TIM1 STORE RESULT
WCL SPACE 4,15
*** *WCL*.
* PLACE PROGRAM ON TIMED RECALL.
*
* ENTRY (X7) = 0.
*
*T 18/ *WCL*,30/0,12/ DELAY
* PLACE PROGRAM ON RECALL UNTIL *DELAY* MILLISECONDS
* HAVE EXPIRED.
*
* *DELAY* MUST BE IN THE RANGE OF 10D TO 4095D
* MILLISECONDS. A VALUE .LT. 10D DEFAULTS TO 10D AND
* A VALUE .GT. 4095D DEFAULTS TO 4095D. ONLY JOBS
* WITH *SYOT* OR *SSJ=* ARE ALLOWED TO SPECIFY A VALUE
* OF *DELAY* THAT IS LESS THAN THE SYSTEM DEFAULT.
WCL MX0 -18 VALIDATE *DELAY*
BX3 -X0*X5
SX1 4095D
SX4 B1 CLEAR RA+1
IX2 X2+X4
EWX7 X2
IX2 X3-X1 CHECK FOR *DELAY* ABOVE UPPER LIMIT
MX0 -12
NG X2,WCL1 IF .LT. UPPER LIMIT
SX3 X1 SET UPPER LIMIT
WCL1 SX2 X3-10D CHECK FOR *DELAY* .LT. LOWER LIMIT
PL X2,WCL2 IF .GT. LOWER LIMIT
SX3 10D SET LOWER LIMIT
* VALIDATE CALLER IF *DELAY* .LT. SYSTEM DEFAULT.
WCL2 SA1 MSCL GET SYSTEM DEFAULT RECALL DELAY
LX1 24
BX1 -X0*X1
IX2 X3-X1
PL X2,WCL3 IF *DELAY* .GE. SYSTEM DEFAULT
SA2 B7+SEPW GET SPECIAL ENTRY POINT WORD
LX2 59-50
NG X2,WCL3 IF *SSJ=* JOB
SA2 B7+JOTW CHECK JOB ORIGIN TYPE
AX2 12
BX2 -X0*X2
ERRNG SYOT CODE DEPENDS ON VALUE
ZR X2,WCL3 IF SYSTEM ORIGIN
SX3 X1+ SET DELAY TO SYSTEM DEFAULT
WCL3 SA1 RTCL GET CURRENT TIME
MX0 -36
BX1 -X0*X1
SX0 PTMF SET RECALL CRITERION
IX1 X1+X3
LX0 36
BX0 X0+X1
EQ SXR SET *X* STATUS WITH RECALL CRITERION
XJR SPACE 4,15
*** *XJR*
* PROCESS EXCHANGE JUMP REQUEST.
*
* ENTRY
*
*T 18/ *XJR*,6/,12/ FN,6/,18/ ADDR
* FN FUNCTION CODE
* ADDR ADDRESS OF EXCHANGE PACKAGE.
* FN 0 = START JOB WITH EXCHANGE PACKAGE AT *ADDR*.
* 1 = SAVE CURRENT PACKAGE AT *ADDR*.
XJR SB5 X5 EXTRACT ADDRESS
LX5 -24
SB6 B5+20B
LE B5,B1,CPE IF ILLEGAL ADDRESS
SA1 XJRA
GE B6,B4,CPE IF ILLEGAL ADDRESS
GE B5,B4,CPE IF ILLEGAL ADDRESS
BX6 -X0*X5
AX2 X6,B1
NZ X2,CPE IF ILLEGAL FUNCTION
SA3 B3+B1
MX4 -36
EWX7 X3 CLEAR (RA+1)
ZR X6,XJR2 IF FUNCTION 0
* SAVE EXCHANGE PACKAGE FUNCTION 1.
SA2 B2 FIRST WORD OF EXCHANGE PACKAGE
UX1 X1 UNPACK REGISTER REPLACE BITS
SX0 B2 CONTROL POINT ADDRESS
SX6 B1
IX3 X3-X6 RA
SX7 B5 RELATIVE ADDRESS OF XP
IX7 X3+X7 ABS ADDRESS
IX7 X0-X7 DIFFERENCE OF MOVE
XJR1 BX6 X2
LX1 1
IX2 X0-X7
EWX6 X2 STORE EXCHANGE PACKAGE
SX2 B1+
IX0 X0+X2
ERX2 X0 READ NEXT WORD TO MOVE
PL X1,XJR1 IF FULL WORD TO MOVE
SB6 X1
IX3 X0-X7
ERX3 X3 READ EXCHANGE PACKAGE
NG B6,XJR3 IF END OF COPY
BX2 -X4*X2 REPLACE REGISTERS
BX3 X4*X3
IX2 X3+X2
EQ XJR1 CONTINUE REGISTER COPY
* STORE EXCHANGE PACKAGE - FUNCTION 0.
XJR2 SA2 B3 RA
SX0 B5 RELATIVE ADDRESS
IX0 X0+X2 ABS ADDRESS
SX2 B2 CONTROL POINT ADDRESS
IX7 X0-X2 DIFFERENCE OF MOVE
ERX2 X0 READ FIRST WORD
EQ XJR1 COPY EXCHANGE PACKAGE
XJR3 SX7 B0
MX0 -12
EQ MTRX EXIT MONITOR
XJRA CON 37600200000000000002B BIT SET FOR REGISTER REPLACE
TITLE PPU MONITOR REQUEST PROCESSOR.
** PMN - PPU MONITOR REQUEST PROCESSOR.
*
* ENTRY (X0) = REQUEST.
*
* ENTERED AT *PMN1* FROM */ISD/PMR*.
* ENTERED AT *PMN4* FROM */ISD/PMR* AND */DCP/PCX*.
PMN RC X5 READ CPU CLOCK IF 180 MACHINE
SX7 B0+
PX6 B0,X5 PRESET AS RA+1 PROCESS
SA7 PPXL CLEAR *PP EXCHANGE PENDING*
SA6 CL+CMST+A0 SET CALL TYPE AND BASE TIME
TNO /CME/RTC,CME UPDATE REAL TIME CLOCK FROM CPU CLOCK
* ENTRY FROM /ISD/MNR.
PMN1 NZ X0,PMN2 IF NOT *CCPF* REQUEST
ERRNZ CCPF CODE DEPENDS ON VALUE
* PROCESS *CCPF* FUNCTION - RA+1 CALL DETECTED BY *MTR*.
SA1 CPAL+A0 SET ACTIVE CP ADDRESS
AX1 24
SA2 B2+B1 CHECK ACTIVE RA
AX2 36
SB7 X1
ZR X2,MTRX IF RA=0, EXIT
TA5 20B,SP SET DUMMY RA
BX6 X2 RA ADDRESS
SX7 B1
IX7 X2+X7 RA+1 ADDRESS
ERX5 X7 READ (RA+1)
SA7 RA1 STORE RA+1
SA6 A7-B1 STORE RA
SB3 A7-B1 RA
NZ X5,CPR PROCESS CPU REQUEST IF PRESENT
EQ MTRX EXIT
* OTHER REQUESTS.
PMN2 SX1 X0-MXPF
PL X1,PMN4 IF PPU REQUEST
SA3 TPMN-1+X0 SET REQUEST PROCESSOR
SX7 X0+2000B SET FUNCTION
LX7 48
BX6 X7+X5
SA6 CL+CMST+A0 SET FUNCTION AND BASE TIME
MX7 24
BX2 -X7*X0
AX2 24
SB6 X3
SB7 X2 SET CP ADDRESS/PARAMETER
BX7 X7-X7
* EXIT TO PROCESSOR WITH-
* (X0) = REQUEST.
* (X2) = CP ADDRESS/PARAMETER.
* (X7) = 0.
* (B6) = PROCESSOR ADDRESS.
* (B7) = CP ADDRESS/PARAMETER.
TJP (/PROBE/PMN,PROBE,B6) PROCESS REQUEST
* PROCESS PPU REQUEST.
* ENTRY FROM */ISD/MNR* AND */DCP/PCX*.
* (X0) = OUTPUT REGISTER ADDRESS.
* (X5) = MONITOR MODE ENTRY TIME IF 180 MACHINE.
PMN4 BX3 X5 SET START TIME FOR *PPR*
SA5 X0+ READ OUTPUT REGISTER
UX1,B4 X5 UNPACK FUNCTION CODE AND PARAMETERS
SB4 B4+1777B
EQ PPR0.1 PROCESS PPU REQUEST
CSWF SPACE 4,10
** CSWF - SWITCH CPU.
*
* ENTRY
*T, X0 42/,18/ CSWF
*
* EXIT TO *BNJ1* IF CPU TO BE SWITCHED.
PMN CSWF
SA1 TSCL+A0
SA2 RTCL
SA3 CSWL+A0
MX6 -36
BX1 -X6*X1
BX2 -X6*X2
NG X3,BNJ1 IF CPU SWITCH REQUESTED
IX2 X2-X1
PL X2,BNJ1 IF RECALL SLICE EXPIRED
EQ MTRX EXIT
ARTF SPACE 4
** ARTF - ADVANCE RUNNING TIME.
*
* ENTRY
*T X0 42/,18/ ARTF
*
* EXIT NONE.
PMN ARTF
ART SB3 ART1 SET *CPT* RETURN ADDRESS
SB6 B0+
TJP (/NVE/CPT,NVE,/CME/CPT,CME,/MONITOR/CP76,CP176,/MONITOR
,/CPT)
ART1 SA3 RTCL
SA2 JSCL
MX7 -24
SB4 MTRX
AX3 36
BX2 -X7*X2
SB6 B2
SB7 X1+
IX4 X3-X2
AX1 18
NG X4,ART3 IF NOT TIME TO CALL *1SJ*
SB4 SJS
ART3 ZR X1,CJS IF USER JOB EXECUTING
JP B4
CSTF SPACE 4,10
** CSLF - CHECK SUBCP TIME LIMIT.
*
* ENTRY
*T,X0 42/,18/ CSLF.
*
* EXIT NONE.
PMN CSLF
SA1 ACPL+A0
MX7 -36
BX1 -X7*X1
ZR X1,MTRX IF NO SUBCP
SA3 RTCL
BX3 -X7*X3
IX3 X3-X1
NG X3,MTRX IF NO TIME LIMIT
SA1 CPAL+A0 SET ACTIVE CP ADDRESS
SX7 TLET TIME LIMIT
AX1 24
SB7 X1 SET CPA ADDRESS
EQ SEF SET ERROR FLAG
EPRF SPACE 4,10
** EPRF - ENTER PROGRAM MODE REQUEST.
*
* ENTRY
*T, X0 24/,12/ PR,6/,18/ EPRF
* PR PROGRAM MODE REQUEST NUMBER AS DEFINED IN COMSMTR.
*
* EXIT REQUEST BIT SET IN *PR*.
PMN EPRF
TZR B7,(/MONITOR/EPR1,SMXF,/MONITOR/EPR3) IF *MSTF*
ERRNZ MSTF
PX0 X7 POSITION REQUEST BIT
AX0 X0,B7
SB3 B7-MECF
NZ B3,EPR IF NOT *MECF*
TSX6 (EEMC-1+300B,ESM170,EEMC-1+100B)
TX2 MECS SET MAXIMUM MEMORY
TLX2 (6,ESM170,0)
TX1 MECNF
BX2 X1+X2
LX2 3
TEQ (/MONITOR/EPR2,SMXF,/MONITOR/EPR3) PROCESS *MECF*
* MODIFY STORAGE MOVE EXCHANGE PACKAGE IF EXTERNAL
* USER ECS IS DEFINED ON AN 865/875 MAINFRAME.
* FOR *MSTF*, CM COPY FLAG SET AND FLE = MACHINE CM FL.
* FOR *MECF*, CM COPY FLAG CLEAR AND FLE = MACHINE ECS FL.
EPR1 TSX6 (EEMC-1+700B,ESM170,EEMC-1+500B)
TX2 MCMS SET MAXIMUM MEMORY
EPR2 TLX2 (36-18,ESM170,36+6-18)
SX1 SMIN SET XP A5 = *SMIN*
LX6 48
BX7 X1+X2
SA6 SMPXP+3
LX7 18
SA7 SMPXP+5
EPR3 SB3 EPR4 SET RETURN ADDRESS
SX7 B7+1 SAVE REQUEST
SA7 SMPR
EQ SCA CONVERT CP/PCP ADDRESS
EPR4 SA2 A2 REREAD *SMRL*
SX6 B7
SA6 SMPXP+7 SET CP/PCP ADDRESS IN MOVE XP
BX7 X2
MX0 -12
AX2 24 POSITION BLOCK MOVE STATUS
SX5 X7
BX6 -X0*X2 EXTRACT HOLE POINT NUMBER
AX7 48
SA6 TSMA
ZR X6,EPR6 IF NOT FIELD LENGTH SWAP
MX7 -24
AX5 12
LX6 1
TB5 X5,MCT MCT BASE ADDRESS
SA3 B5+X6 READ HOLE POINT MCT ENTRY
SX6 B1
BX7 -X7*X3 HOLE
TA3 DMMS,SDA
SA7 TSMB SAVE PRE-MOVE HOLE SIZE
SB3 EPR5 SET *SCA* RETURN ADDRESS
IX6 X3+X6 INCREMENT DIRECT MOVE COUNT
LX5 1
ERRNZ FLSW+2-ECSW CODE DEPENDS ON VALUE
SA6 A3
SX2 X2
SB6 X5+FLSW SET FL CONTROL WORD ADDRESS
SA3 B6+B7
AX3 12 POSITION RA/RAX
SX5 X3
EQ SCP SET CP/PCP ADDRESS OF HOLE
EPR5 SA4 B6+B7 CALCULATE FWA OF HOLE
AX3 48-12
BX1 -X0*X4 EXTRACT FL/FLX
AX4 12
IX3 X5-X3 RA/RAX - NFL OF REQUESTOR
SX4 X4
IX4 X4+X1 HOLE BEGINS AT RA/RAX + FL/FLX
IX7 X4-X3
EPR6 SA7 SMIN SAVE MOVE INCREMENT
TB7 SCA
SB6 SMPXP STORAGE MOVE EXCHANGE PACKAGE
SB3 MTRX *RCC* RETURN ADDRESS
EQ RCC RECALL CPU
RCLF SPACE 4,15
** RCLF - RECALL CPU FOR SPECIFIED CONTROL POINT.
*
* NOTE ANY ADDITIONAL PROGRAMS IN *X* STATUS RECALL WHOSE
* TIME HAS EXPIRED AND WHICH DIRECTLY FOLLOW THE
* REQUESTED CONTROL POINT WILL ALSO BE RECALLED.
*
* ENTRY
*T X0 24/,12/ CPA,6/,18/RCLF
* CPA = CONTROL POINT ADDRESS.
PMN RCLF
RCL SA1 B7+CWQW CHECK RECALL STATUS
SA5 B7+CRCW GET *X* STATUS *RQ* LINK
SB3 RCL1 SET *RCC* RETURN ADDRESS
SB6 B7 SET EXCHANGE PACKAGE ADDRESS
LX1 59-46
PL X1,RCC IF TO RECALL JOB
EQ MTRX EXIT
RCL1 MX0 -7
BX1 -X0*X5
SA3 RTCL
SX2 X1-CRCW
NZ X2,MTRX IF NO LINK TO *RQ* ENTRY
SA4 MSCL
MX0 -12
LX4 12
BX1 -X0*X5 EXTRACT ADDRESS OF NEXT RECALL ENTRY
BX6 -X0*X4 EXTRACT RECALL DELAY REDUCTION LIMIT
SX4 7600B
SA2 X1
MX0 -36
BX3 -X0*X3 EXTRACT REAL TIME
AX2 12
IX3 X3+X6 REAL TIME + DELAY REDUCTION LIMIT
BX6 -X0*X2 EXTRACT RECALL TIME
BX1 X4*X5 EXTRACT CP ADDRESS
IX6 X3-X6 ADJUSTED REAL TIME - RECALL TIME
NG X6,MTRX IF TIME NOT EXPIRED
SB7 X1+
EQ RCL LOOP TO RECALL NEXT JOB
MFLF SPACE 4,15
** MFLF - MODIFY FL.
*
* ENTRY
*T, X0 12/ MI, 6/ FL, 6/ ST, 12/ PN, 12/, 12/ MFLF
* MI MEMORY INCREMENT.
* FL FL SELECTION.
* 0 = NFL CHANGE.
* 4 = FL CHANGE.
* 10 = MACHINE FL CHANGE (*MABL*, *ACML*, LAST CP MCT).
* 11 = MACHINE FL CHANGE (LAST CP MCT ONLY)
* ST STORAGE MEDIUM.
* 0 = CM TYPE.
* 1 = XM TYPE.
* PN CP/PCP NUMBER.
PMN MFLF
BX6 X0
LX6 59-39
NG X6,MFL3 IF MACHINE FL CHANGE
SB4 MFL1 SET RETURN FROM *CPA*
SX3 77B
SB3 CPA SET RETURN FROM *SCP*
EQ SCP SET CP/PCP ADDRESS
MFL1 AX2 36 POSITION PARAMETERS
AX0 48
SA1 ACML GET AVAILABLE FL WORD
SB5 B1+
BX7 -X0
BX3 X3*X2 EXTRACT STORAGE MEDIUM
LX7 12 POSITION INCREMENT FOR XM UPDATE
NZ X3,MFL2 IF XM
LX7 24 POSITION INCREMENT FOR CM UPDATE
MFL2 IX7 X1+X7 UPDATE AVAILABLE CM/XM
SA7 A1
TNZ X3,(/UEC/MFX,UEC,/MONITOR/HNG) IF XM
MX5 -12
BX1 -X5*X2 EXTRACT TYPE OF FL
LX0 6
AX1 6
NZ X1,SFL1 IF NOT NFL CHANGE
SA2 B7+FLSW
LX0 48-6 POSITION INCREMENT FOR *FLSW*
SA1 A2+B1
IX7 X2+X0 ADJUST NFL
LX0 12+12
TA3 X6,MCT READ MCT ENTRY
IX1 X1+X0
AX3 48-1 INDEX TO BACKWARD LINK
LX0 12
IX6 X1-X0 ADJUST RA - NFL
SA7 A2
LX0 -24 POSITION INCREMENT FOR MCT
AX7 12
SA6 A1 UPDATE *FLSW* + 1
TA3 X3,MCT
SB4 MTRX SET RETURN FROM *CRA*
IX6 X3-X0 ADJUST UNASSIGNED CM BELOW CP/PCP
SA6 A3
NG X0,CRA6 IF NFL DECREASE
MX3 -24
BX3 -X3*X7 RA/100
BX1 -X5*X0 INCREMENT / 100
AX7 36
LX1 6 INCREMENT (AMOUNT TO CLEAR)
BX2 -X5*X7 NFL/100
IX2 X3-X2
LX2 6 FWA OF NFL
SB3 CRA6 SET RETURN FROM *CSM*
TEQ (/CME/CSM,CME,/0CME/CSM) CLEAR STORAGE
* PROCESS CHANGE IN MACHINE FL (SPECIAL *VER* REQUEST).
MFL3 BX2 X0 GET MEMORY INCREMENT/DECREMENT
AX2 48
BX2 -X2
LX6 59-36-59+39
NG X6,MFL4 IF *MABL*/*ACML* NOT TO BE UPDATED
SA1 MABL ADJUST MACHINE FL
LX2 12
IX6 X1+X2
SA6 A1+
LX2 24
SA1 ACML ADJUST AVAILABLE CM
IX6 X1+X2
SA6 A1+
SX2 B0+ CLEAR UNASSIGNED MEMORY AT LAST CP
MFL4 TX6 -1,SC GET MCT INDEX FOR LAST CP
LX6 1
TA1 X6,MCT CHANGE UNASSIGNED MEMORY VALUE FOR LAST CP
MX6 48
BX1 X6*X1
BX2 -X6*X2
BX6 X1+X2
SA6 A1+
EQ MTRX EXIT
MRAF SPACE 4,10
** MRAF - MODIFY RA.
*
* ENTRY
*T, X0 12/ MI, 12/ ST, 12/ PN, 12/, 12/ MRAF
* MI MEMORY INCREMENT.
* ST STORAGE MEDIUM.
* 0 = CM TYPE
* 1 = XM TYPE
* PN CP/PCP NUMBER.
PMN MRAF
SB3 MRA1
EQ SCP SET CP/PCP ADDRESS
MRA1 AX0 36 POSITION PARAMETERS
MX3 -12
SB4 MTRX SET EXIT ADDRESS
BX3 -X3*X0
AX0 12 POSITION INCREMENT
TNZ X3,(/UEC/MRX,UEC,/MONITOR/HNG) IF XM REQUEST
SA2 B7+FLSW READ FL CONTROL WORD
BX5 X0
SA1 B7+B1 READ EXCHANGE PACKAGE
LX2 -RSHF
IX7 X2+X0 UPDATE RA
MX6 -RMSK
BX6 -X6*X7 NEW RA
MX3 -36
LX6 36+6 POSITION NEW RA FOR XP
BX1 -X3*X1
LX7 RSHF REPOSITION *FLSW*
SA3 A2+B1
LX5 24 POSITION INCREMENT
BX6 X6+X1
SB5 B0
+ SA7 A2 UPDATE CONTROL POINT AREA
IX7 X3+X5
SA6 A1 MODIFY EXCHANGE PACKAGE
SA7 A3
EQ UMT1 UPDATE MEMORY CONTROL TABLE
MSCF SPACE 4
** MSCF - MONITOR STEP CONTROL.
*
* ENTRY
*T, X0 30/,12/ P,18/ MSCF
*
* P PARAMETER.
* O = SET MONITOR STEP.
* 1 = CLEAR MONITOR STEP.
PMN MSCF
SA1 MSCA+B7
GT B7,B1,* IF NOT VALID PARAMETER
NO
BX6 X1
SA6 PPR
EQ MTRX EXIT
MSCA EQ MSC2 DISABLE PPU *MXN* PROCESSOR
MSC1 SA5 A5 ENABLE PPU *MXN* PROCESSOR
RC X3
SX6 B0
UX1,B4 X5
EQ PPR0 PROCESS REQUEST
* ENTERED FROM *PPR* WHEN STEP IS SET.
MSC2 TX7 A5,-SP
PL X7,MSC1 IF PSEUDO PP
SA5 A5 INDICATE THAT CPU EXCHANGE HAS OCCURRED
SX1 B1
LX1 57
BX7 X1+X5
SA7 A5
EQ MTRX DONT PROCESS REQUEST
PRQF SPACE 4,10
** PRQF - PROCESS RECALL REQUEST.
*
* ENTRY
*T, X0 12/,12/,12/ AD,6/,18/ PRQF
* AD ADDRESS OF REQUEST TO RECALL.
PMN PRQF
SA1 RQ+TAQR
AX1 18
MX2 -12
SX7 X1+
SA3 B7+
PRQ1 SA1 X7 FIND NEXT ENTRY IN QUEUE
BX7 -X2*X1
SB6 X7+
ZR X7,MTRX IF ENTRY NOT IN QUEUE
NE B6,B7,PRQ1 IF NOT THIS ENTRY
SA4 B7+RECW-RCCW READ RECALL REQUEST
AX0 24+7 SET CP ADDRESS
MX6 -5
BX7 X2*X1 REPLACE LINK IN ENTRY POINTING TO RECALL
BX0 -X6*X0
LX0 7
BX3 -X2*X3
BX7 X7+X3
SB7 X0
SA7 A1+
SA1 B7+STSW ADD FREE ENTRY TO CONTROL POINT
SA3 B6+ CHECK RECALL CRITERION
SX0 A4-B7
LX3 12
BX3 -X2*X3
MX2 -4
SX3 X3-PTRF
SX0 X0-RECW+1-20B
NZ X3,PRQ2 IF ROLLOUT NOT INHIBITED
SX0 X0-400B
PRQ2 BX7 -X2*X1
BX1 X2*X1 CLEAR OLD NEXT FREE ENTRY
MX6 0 CLEAR RECALLED REQUEST
SA7 B6
SA6 A4+
SA3 A4+REPW-RECW GET PARAMETER WORD
SA6 A3
IX7 X1+X0
BX6 X4
SA7 A1 UPDATE STSW
BX7 X3
LX4 18
SA7 APQA SET PARAMETER WORD
SX3 X4-3R1AJ
SB3 MTRX *APQ* RETURN ADDRESS
ZR X3,PRQ3 IF *1AJ*
SX4 X4-3RCIO
SB4 B0+ SET LIBRARY TO BE SEARCHED
TA5 1,FP SET *MTR*-S OUTPUT REGISTER ADDRESS
NZ X4,APQ IF NOT *CIO*
TA5 10B,SP SET FAKE RA+1
SA6 /CPUCIO/IR
SA7 /CPUCIO/MB
SA1 SMRL CHECK IF CONTROL POINT MOVING
MX4 -12
BX3 -X4*X1
LX3 7
SB5 X3
NE B5,B7,/CPUCIO/CPC IF CONTROL POINT NOT MOVING
SB5 MVPR MOVE IN PROGRESS
EQ /CPUCIO/RCR REQUEUE *CIO* CALL
* CHECK FOR NO ACTIVITY IF *1AJ* IS COMING OUT OF RECALL.
PRQ3 SA1 B7+STSW GET CONTROL POINT ACTIVITY
SA7 AQRA SAVE PARAMETER WORD IF REQUEUE NEEDED
MX0 -12
LX1 12
BX7 -X0*X1 PP AND CPU ACTIVITY
LX1 59-24-12
NG X1,PRQ4 IF ROLLOUT SET
SA2 B7+JCIW GET DIS FLAG
SX0 B1
LX2 0-21
BX2 X0*X2
IX7 X7-X2
PRQ4 LX1 24-59-8
MX0 -4
BX1 -X0*X1 PP-S IN RECALL
IX7 X1+X7
NZ X7,REC2 IF ACTIVITY, RECALL REQUEST
SA2 B7+TFSW GET JOB EJT ORDINAL
MX1 -12
LX2 12
BX2 -X1*X2
CX3 X2,EJT CONVERT EJT ORDINAL TO OFFSET
+ ZR X2,* IF NO EJT ORDINAL
TA2 X3+JSNE,EJT GET EJT ENTRY
SX1 B1
BX3 X1*X2 CHECK JOB INTERLOCK
NZ X3,REC2 IF JOB INTERLOCK ALREADY SET
BX7 X2+X1 SET JOB INTERLOCK
LX1 6-0
BX7 X7+X1 SET JOB ADVANCE FLAG
SA7 A2
R= B4,LA1AJ SET *1AJ* LOAD PARAMETERS
EQ APQ ASSIGN *1AJ*
TCSF SPACE 4,10
** TCSF - SWITCH CPU ON TIMESLICE.
*
* ENTRY
*T, X0 42/,18/ TCSF
*
* EXIT TO *BNJ1* IF CPU TO BE SWITCHED.
PMN TCSF,.CSWF
PCXF SPACE 4
** PCXF - PROCESS CPU EXCHANGE REQUEST.
*
* ENTRY
*T X0 42/,18/ PCXF
*
* EXIT NONE.
PMN PCXF,(/DCP/PCX,DCP,/MONITOR/HNG)
ARMF SPACE 4
** ARMF - ADVANCE RUNNING TIME AND MULTI-MAINFRAME PROCESSING.
* *ARMF* IS CALLED ONCE EVERY SECOND BY PPU MONITOR
* TO DO THE FOLLOWING.
* 1) STATUS FLAG REGISTER BITS.
* 2) WRITE REAL TIME CLOCK TO ECS.
* 3) DETERMINE STATUS OF OTHER MAINFRAMES BY INTEROGATING
* THEIR ECS CLOCKS. (DONE EVERY 2 SECONDS)
*
* ENTRY
*T X0 24/,12/ S,6/,18/ ARMF
* (B7) = S = 0 IF MAINFRAMES NOT TO BE STATUSED.
*
* EXIT
* EXITS TO ART.
PMN ARMF,(/MMF/ARM,MMF,/MONITOR/HNG)
UCCF SPACE 4
** UCCF - UPDATE CTI CLOCK.
*
* ENTRY
*T X0 42/,18/ UCCF
PMN UCCF
* ENTER HERE FROM *ADTF* PROCESSOR.
UCC1 SA5 INWL CHECK CTI CLOCK UPDATE ACTIVE FLAG
MX2 1
LX5 59-3
NG X5,MTRX IF *1MA* ALREADY CALLED
* SET CTI CLOCK UPDATE ACTIVE FLAG AND CALL *1MA*.
TB7 SCA SET SYSTEM CONTROL POINT
BX7 X2+X5
SB3 MTRX SET EXIT ADDRESS
LX7 3-59
SA1 UCCA SET PP CALL
BX6 X1
SA7 A5 SET CTI CLOCK UPDATE ACTIVE FLAG
SB4 LA1MA SET INDEX INTO *TAPQ* TABLE
EQ APQ ASSIGN PP
UCCA VFD 18/0L1MA,6/0,12/6,24/0
CRAF SPACE 4,10
** CRAF - CHANGE RA.
*
* ENTRY
*T, X0 12/ HN, 12/ ST, 12/ PN, 6/ PF, 18/ CRAF
* HN HOLE POINT NUMBER.
* ST STORAGE MEDIUM.
* 0 = CM TYPE
* 1 = XM TYPE
* PN CONTROL POINT NUMBER.
* PF = UPPER 6 BITS OF *RSTM* FLAG BYTE.
PMN CRAF
SB6 B7+0 SAVE CP/PCP NUMBER
SB3 CRA1
EQ SCP SET CP/PCP ADDRESS
CRA1 AX0 22-0
MX7 -2
BX7 -X7*X0 PSEUDO-ROLLIN, PSEUDO-ROLLOUT FLAGS
AX0 36-1-22+0 POSITION STORAGE TYPE
ERRNZ FLSW+2-ECSW CODE DEPENDS ON VALUE
MX5 -12
BX4 -X5*X0
SB5 B7+
AX0 12+1
SX4 X4+FLSW
BX2 X0 SET CP/PCP NUMBER FOR *SCP*
SB3 CRA2 *SCP* EXIT ADDRESS
EQ SCP GET CPA/PCPA ADDRESS
CRA2 SA3 B7+X4 READ FL CONTROL WORD
BX2 -X5*X3 FL
BX0 X6
LX3 -12
SB4 MTRX SET EXIT ADDRESS
BX6 X3
SX1 X3
ZR X7,CRA3 IF JOB INITIATION/ROLLIN FROM MASS STORAGE
LX6 12
LX3 -48+12
SA6 B5+X4 MOVE FL CONTROL WORD
BX2 -X5*X3 NFL (0 IF RAE UPDATE)
SA3 A3+1 SAVE *FLSW*+1
SB3 A6+1
SB5 B7
BX2 -X2 -NFL (-0 IF RAE UPDATE)
CRA3 IX6 X1+X2 ADJUST RA
LX6 12
SA6 B5+X4
LX4 59-2
ERRNZ ECSW-25B CODE DEPENDS ON VALUE
ERRNZ FLSW-23B CODE DEPENDS ON VALUE
SX1 4000B
NG X4,CRA4 IF EM REQUEST
BX6 X6+X1 BUILD *FLSW*+1
LX6 12
SA6 A6+1
ZR X7,CRA4 IF JOB INITIATION/ROLLIN FROM MASS STORAGE
BX7 X3
SA7 B3 MOVE OTHER *FLSW*+1
CRA4 AX4 59 SIGN EXTEND MEMORY TYPE FLAG
SX3 1
MX5 12 SET LINK BYTE MASK
BX6 X3*X4
SX2 B6
TB5 X6,MCT
* STEP 1. MCT ENTRY FOR CP/PCP BELOW HOLE - CHANGE FORWARD
* LINK TO REQUESTING CP AND CLEAR UNASSIGNED MEMORY.
SA3 X0+B5 GET MCT ENTRY
MX7 -24
LX5 -12
BX6 X7*X3 REMOVE UNASSIGNED MEMORY
CRA5 LX2 36
BX6 -X5*X6
BX6 X6+X2 CHANGE FORWARD LINK
SA6 A3
* STEP 2. MCT ENTRY FOR CP/PCP ABOVE HOLE - CHANGE BACKWARD
* LINK TO REQUESTING CP.
BX4 X5*X3 OLD FORWARD LINK
AX4 36-1
SA1 X4+B5 GET MCT ENTRY
LX5 12
BX1 -X5*X1 REMOVE BACKWARD LINK
LX2 12
BX6 X2+X1 BACKWARD LINK TO REQUESTING CP
SA6 A1
* STEP 3. MCT ENTRY FOR REQUESTING CP - CHANGE BACKWARD LINK
* TO CP/PCP OF STEP 1, CHANGE FORWARD LINK TO CP/PCP
* OF STEP 2 AND SET UNASSIGNED MEMORY FROM HOLE.
LX2 12+1
BX3 -X7*X3 UNASSIGNED MEMORY FROM HOLE
LX0 48-1
BX3 X0+X3 CHANGE BACKWARD LINK
SA2 X2+B5
LX4 36-1
BX6 X3+X4 CHANGE FORWARD LINK
SA6 A2
* STEP 4. MCT ENTRY BELOW REQUESTING CP - CHANGE FORWARD
* LINK TO CP ABOVE REQUESTOR AND ACCUMULATE ANY
* UNASSIGNED MEMORY PREVIOUSLY ABOVE REQUESTOR.
BX3 X5*X2 EXTRACT REQUESTOR-S BACKWARD LINK
AX3 48-1
BX1 -X5*X2 REMOVE BACKWARD LINK
SA4 X3+B5
LX5 -12 POSITION MASK
BX4 -X5*X4
IX6 X4+X1 ADD FORWARD LINK AND UNASSIGNED MEMORY
SA6 A4
* STEP 5. MCT ENTRY ABOVE REQUESTING CP - CHANGE BACKWARD
* LINK TO CP BELOW REQUESTOR.
BX2 X5*X2 EXTRACT REQUESTOR-S FORWARD LINK
AX2 36-1
LX5 12 REPOSITION MASK
SA4 X2+B5
BX4 -X5*X4 REMOVE OLD LINK
LX3 48-1
BX6 X3+X4 SET NEW BACKWARD LINK
SA6 A4
CRA6 SX7 0 INDICATE FUNCTION COMPLETE
SA7 SMRL
JP B4 EXIT
ADTF SPACE 4,10
** ADTF - ADVANCE DATE AND TIME.
*
* ENTRY
*T, X0 12/ BA,24/,12/ 0,12/ ADTF
*
* BA = 0 IF CALLED TO ADVANCE DATE AND TIME.
* = BUFFER ADDRESS IF CALLED TO ENTER DATE AND TIME.
*
* EXIT NONE.
PMN ADTF
MX5 -12
LX0 -48
BX0 -X5*X0 BUFFER ADDRESS IF ENTER DATE/TIME CALL
SA1 X0
ZR X0,ADT2 IF CALLED TO ADVANCE DATE/TIME
* ENTER DATE AND TIME.
SA2 A1+B1
BX6 X1
BX7 X2
SA6 JDAL UPDATE *JDAL*
ERRNZ PDTL-JDAL-1 CODE DEPENDS ON VALUES
SA7 A6+B1 UPDATE *PDTL*
SA1 A2+B1
BX6 X1
SA2 A1+B1
ERRNZ TIML-PDTL-1 CODE DEPENDS ON VALUES
SA6 A7+B1 UPDATE *TIML*
BX7 X2
ERRNZ DTEL-TIML-1 CODE DEPENDS ON VALUES
SA7 A6+B1 UPDATE *DTEL*
SA1 A2+B1
LX1 -48
BX6 -X5*X1
ZR X6,ADT1 IF NO DAY LIMIT UPDATE REQUIRED
SA6 ADTA UPDATE DAY LIMIT
ADT1 BX7 X7-X7
SA1 MABL
LX1 59-47
SA7 X0 CLEAR *DSD* INTERLOCK
NG X1,MTRX IF NOT CYBER 180
LX1 59-42-59+47
PL X1,MTRX IF NOT CYBER 180
EQ UCC1 CHECK FOR CTI CLOCK UPDATE REQUIRED
* ADVANCE DATE AND TIME IN *PDTL*.
ADT2 SA1 JDAL
ERRNZ PDTL-JDAL-1 CODE DEPENDS ON VALUES
SA2 A1+B1 READ *PDTL*
LX2 -6 LEAVE SECONDS UNCHANGED
MX7 -6
BX2 X7*X2 RESET MINUTES
LX2 -6
SX0 B1
SB4 6
SB3 12
IX2 X2+X0 ADVANCE HOURS
BX4 -X7*X2
SX4 X4-24D
NG X4,ADT6 IF NOT END OF DAY
SA4 ADTA
BX2 X7*X2 RESET HOUR = 0
SB3 B3+B4
LX2 -18+12
IX2 X2+X0 ADVANCE DAY IN *PDTL*
BX6 -X7*X2
BX6 X4-X6
NZ X6,ADT3 IF NOT END OF MONTH
BX2 X7*X2
IX2 X2+X0 RESET DAY = 1
SB3 B3+B4
LX2 -24+18
IX2 X2+X0 ADVANCE MONTH IN *PDTL*
BX4 -X7*X2
SA3 X4+TDLM SET NEW DAY LIMIT
SX6 X3+1
SA6 A4+
SX4 X4-13D
NG X4,ADT3 IF NOT END OF YEAR
BX2 X7*X2
IX2 X2+X0 RESET MONTH = 1
SB3 B3+6
LX2 -30+24
IX2 X2+X0 ADVANCE YEAR
SX6 28 RESET FEBRUARY *TDLM* ENTRY
MX4 -18
BX1 X4*X1
SX4 3R000
BX1 X1+X4 RESET JULIAN DAY
SX4 3
BX4 X4*X2
SX4 X4-2 CORRECT PACKED DATE TO NEAREST LEAP YEAR
NZ X4,ADT2.1 IF NOT LEAP YEAR
SX6 X6+B1 ADJUST FOR LEAP YEAR
ADT2.1 SA6 TDLM+2
* ADVANCE JULIAN DAY.
ADT3 SX6 1R0
SB5 B0+
ADT4 IX1 X1+X0
BX4 -X7*X1
SX4 X4-45B
NG X4,ADT5 IF NOT DIGIT OVERFLOW
BX1 X7*X1
BX1 X1+X6 RESET DIGIT TO DISPLAY CODE 0
LX1 -6
SB5 B5+B4
EQ ADT4 INCREMENT NEXT DIGIT
ADT5 LX1 X1,B5 RESTORE *JDAL* POSITION
MX4 -18
BX4 -X4*X1
SX4 X4-3R001
NZ X4,ADT6 IF NO NEED TO ADVANCE JULIAN YEAR
SB5 B5-18
PL B5,ADT6 IF JULIAN YEAR ALREADY ADVANCED
LX1 -18
SB5 18
EQ ADT4 ADVANCE YEAR
* CONSTRUCT *TIML*.
ADT6 LX6 X2,B3 RESTORE *PDTL* POSITION
SA6 A2 UPDATE *PDTL*
BX4 X6
BX6 X1
SA6 A1+ UPDATE *JDAL*
LX4 -12
BX3 -X7*X4 HOUR FROM *PDTL*
ERRNZ TIML-PDTL-1 CODE DEPENDS ON VALUES
SA2 A2+B1 READ *TIML*
SX1 2R00
LX2 -24
BX2 X5*X2 RESET MINUTES IN *TIML*
BX2 X2+X1
LX2 -42+24
BX2 X5*X2 CLEAR HOUR FIELD OF *TIML*
SB3 -1 CONVERT OCTAL HOUR TO DECIMAL DISPLAY CODE
SB5 X3+ OCTAL HOUR
ADT7 SB4 B5
SB3 B3+B1
SB5 B4-10D
PL B5,ADT7 IF CONVERSION TO DECIMAL INCOMPLETE
SX6 B3 LEFT DIGIT VALUE
LX6 6
SX3 B4+ RIGHT DIGIT VALUE
BX3 X6+X3 COMBINE DIGIT VALUES
IX3 X3+X1 CONVERT TO DISPLAY CODE
BX6 X2+X3 MERGE DISPLAY CODE HOURS INTO *TIML*
LX6 42
SA6 A2+ UPDATE *TIML*
* CONSTRUCT *DTEL*.
ERRNZ DTEL-TIML-1 CODE DEPENDS ON VALUES
SA2 A6+B1 READ *DTEL*
LX2 12
SB6 3
ADT8 LX2 -18
BX2 X5*X2 CLEAR 12 BIT FIELD
LX4 -6 POSITION *PDTL*
BX3 -X7*X4 *PDTL* 6 BIT VALUE
NE B6,B1,ADT9 IF NOT CONVERTING YEAR
SX3 X3+70D BIAS YEAR BY 1970
ADT9 SB3 -1 CONVERT OCTAL VALUE TO DECIMAL DISPLAY
SB5 X3+ OCTAL VALUE
ADT10 SB4 B5
SB3 B3+B1
SB5 B4-10D
PL B5,ADT10 IF CONVERSION TO DECIMAL INCOMPLETE
SX6 B3-10D
ZR X6,ADT11 IF CENTURY ROLLOVER
SX6 B3 LEFT DIGIT VALUE
LX6 6
ADT11 SX3 B4 RIGHT DIGIT VALUE
BX3 X6+X3 COMBINE DIGIT VALUES
IX3 X3+X1 CONVERT DIGITS TO DISPLAY CODE
BX2 X2+X3 MERGE DATA INTO *DTEL*
SB6 B6-B1
NZ B6,ADT8 IF NOT DONE BUILDING *DTEL*
LX2 42
BX6 X2
SA6 A2 UPDATE *DTEL*
EQ MTRX EXIT
ADTA CON 0 DAY LIMIT
** TABLE OF DAY LIMITS.
TDLM EQU *-1
LOC 1
CON 31 JANUARY
CON 28 FEBRUARY
* CON 29 (LEAP YEAR)
CON 31 MARCH
CON 30 APRIL
CON 31 MAY
CON 30 JUNE
CON 31 JULY
CON 31 AUGUST
CON 30 SEPTEMBER
CON 31 OCTOBER
CON 30 NOVEMBER
CON 31 DECEMBER
CON 31 JANUARY (FOR END OF YEAR)
LOC *O
SKCF SPACE 4,10
** SKCF - SET K DISPLAY COMPLETE BIT.
*
* ENTRY
*T, X0 17/,1/S,6/,12/ CPA,12/,12/ SKCF
*
* S SCREEN FLAG.
* 0 = LEFT SCREEN.
* 1 = RIGHT SCREEN.
* CPA CONTROL POINT ADDRESS.
PMN SKCF
SA1 B7+TFSW GET EJT ORDINAL
SA3 SMRL
MX7 -12
AX2 7 SET CP NUMBER
LX1 12
BX3 -X7*X3 MOVING CP NUMBER
BX1 -X7*X1 EJT ORDINAL
BX3 X3-X2
ZR X1,MTRX IF NO JOB AT CP
ZR X3,MTRX IF CP MOVING
CX3 X1,EJT CONVERT EJT ORDINAL TO OFFSET
LX0 59-42
SA2 B7+DBAW GET K DISPLAY CONTROL
TA1 X3+JSNE,EJT GET JOB ADVANCE STATUS
SA3 B7+FLSW GET RA AND FL
MX6 -18
LX4 X2,B1
LX1 59-6
BX7 -X7*X3
AX3 RSHF
LX7 6 FL
NG X4,MTRX IF RETURN STATUS NOT SELECTED
NG X1,MTRX IF JOB ADVANCE SET
MX4 -RMSK
PL X0,SKC1 IF PROCESSING LEFT SCREEN
LX2 -18
SKC1 BX3 -X4*X3
BX2 -X6*X2 STATUS WORD RELATIVE ADDRESS
LX3 6 RA
IX7 X2-X7
ZR X2,MTRX IF SCREEN NOT ACTIVE
PL X7,MTRX IF ADDRESS BEYOND FL
IX2 X3+X2 STATUS WORD ABSOLUTE ADDRESS
SA3 B7+CWQW
ERX1 X2 READ STATUS WORD
SX6 1
LX3 59-46
BX6 X1+X6 SET COMPLETE BIT
TIC DCPC INVALIDATE CACHE ON OTHER CPU, IF PRESENT
EWX6 X2 WRITE STATUS WORD
NG X3,MTRX IF NOT TO RECALL CPU
SB6 B7 SET EXCHANGE PACKAGE ADDRESS
SB3 MTRX SET *RCC* EXIT ADDRESS
EQ RCC RECALL CPU
CPA SPACE 4,15
** CPA - CHECK CPU ACTIVITY.
*
* ENTRY (B4) = EXIT ADDRESS.
* (B7) = CONTROL POINT ADDRESS.
*
* EXIT (X2) = ORIGINAL (X0).
* (B3) = ADDRESS OF CP USING CURRENT CPU.
* (B6) = ADDRESS OF EXCHANGE PACKAGE.
*
* USES X - 1, 2.
* A - 1.
* B - 3, 5, 6.
CPA BSS 0 ENTRY
SA1 CPAL+A0 GET CPU ASSIGNMENT DATA
SB6 B2
AX1 24 SET CP ADDRESS
SB3 X1
BX2 X0 SAVE (X0)
ZR B7,RB4 IF CMR STORAGE REQUEST
SB5 A0-CPAL-1
EQ B3,B7,RB4 IF JOB EXECUTING IN THIS CPU
SB6 B7
SA1 B0-B5
AX1 24 SET CP ADDRESS
SB5 X1
NE B5,B7,RB4 IF JOB NOT RUNNING IN OTHER CPU
EQ MTRX EXIT
SCA SPACE 4,10
** SCA - SET CP/PCP ADDRESS FROM *SMRL*.
*
* ENTRY (B3) = EXIT ADDRESS.
*
* EXIT (A2) = *SMRL*.
*
* USES X - 1, 2.
* A - 2.
SCA BSS 0 ENTRY
SA2 SMRL GET STORAGE MOVE REQUEST
MX1 -12
BX2 -X1*X2 EXTRACT CP/PCP NUMBER
* EQ SCP
SCP SPACE 4,15
** SCP - SET CP/PCP ADDRESS.
*
* ENTRY (X2) = CP/PCP NUMBER.
* (B3) = EXIT ADDRESS.
*
* EXIT (X2) = CP/PCP ADDRESS.
* (X6) = MCT INDEX FOR CP/PCP.
* (B7) = CP/PCP ADDRESS.
* (A6) = *UMTA*.
* (UMTA) = MCT INDEX FOR CP/PCP.
*
* USES X - 1, 2, 6.
* A - 6.
* B - 7.
SCP BSS 0 ENTRY
LX6 B1,X2 SAVE MCT INDEX
NO
SA6 UMTA
TB7 X2,-SC SUBTRACT SYSTEM CP NUMBER
TX1 PCPA
GE B7,B1,SCP1 IF PSEUDO CONTROL POINT
SB7 X2+B1
BX1 X1-X1 REAL CP BASE ADDRESS
SCP1 SX2 B7-B1
LX2 7
IX2 X1+X2 FORM ABSOLUTE ADDRESS
SB7 X2
JP B3 EXIT
UMT SPACE 4,15
** UMT - UPDATE MEMORY CONTROL TABLE.
*
* ENTRY (X0) = INCREMENT.
* (B4) = EXIT ADDRESS.
* (B5) = 0 IF CHANGING CM.
* = 1 IF CHANGING XM.
* (UMTA) = MCT INDEX FOR CP/PCP.
*
* EXIT (SMRL) = 0.
*
* USES X - 0, 2, 3, 6, 7.
* A - 2, 3, 6, 7.
* B - 5.
UMT BSS 0 ENTRY
SA3 SMRL GET MOVE PARAMETERS
SX6 X3
BX0 X3 MOVE INCREMENT
AX6 12
AX0 48
SB5 X6+ SET MEMORY TYPE
* ALTERNATE ENTRY POINT WITH PARAMETERS SET.
UMT1 SA2 UMTA GET MCT INDEX
TB5 B5,MCT
SA3 X2+B5
IX7 X3-X0 ADJUST UNASSIGNED FL ABOVE CP/PCP
AX3 48-1
SA2 X3+B5 ADJUST UNASSIGNED FL BELOW CP/PCP
SA7 A3
IX6 X2+X0 UPDATE MCT ENTRY FOR CP/PCP MOVED
BX7 X7-X7
SA6 A2 UPDATE BACKWARD LINK
SA7 SMRL
JP B4 EXIT
UMTA CON 0 MCT INDEX FOR CP/PCP
TITLE PPU REQUEST PROCESSOR.
PPR SPACE 4
** PPU REQUEST PROCESSOR REGISTER USAGE.
*
*
* (A5) = OUTPUT REGISTER ADDRESS.
PPR SPACE 4
** PPR - PPU REQUEST PROCESSOR.
*
* ENTRY (OR) = REQUEST.
PPR SA5 A5 READ OUTPUT REGISTER
RC X3 GET MONITOR MODE START TIME IF 180 MACHINE
SX6 B0
UX1,B4 X5 UNPACK FUNCTION CODE AND PARAMETERS
* ENTRY FROM *MSCF* PROCESSOR.
PPR0 SA6 PPXL CLEAR *PP EXCHANGE PENDING*
SB4 B4+1777B
* ENTRY FROM *PMN* AND */BUFIO/MNR*.
PPR0.1 PX6 B4,X3
SX7 B4-MXFM
SA6 CL+CMST+A0 SET FUNCTION AND BASE TIME
SA3 X7+TPPR+MXFM-CPUM READ PROCESSOR CONTROL WORD
PL X7,HNG IF ILLEGAL REQUEST
SB6 X3+
TNG X3,(/PROBE/PPR,PROBE,/MONITOR/RB6) IF FAST EXIT
TX2 A5-1,-FP
BX7 X7-X7
LX2 PPXES-PPCES
TA2 X2+ACPP,FPX
LX6 X3,B1 CHECK CPU SELECTION
SB7 X2 SET CP ADDRESS
TNG X6,(/DCP/CPS,DCP,/MONITOR/HNG) IF CPU SELECTION
TJP (/PROBE/PPR,PROBE,B6) EXIT TO FUNCTION PROCESSOR
** EXIT TO PROCESSOR WITH -
*
* IF FAST EXIT (*FEX*) SELECTED - X2, X7, AND B7 ARE NOT SET.
*
* (X1) = BITS 0 - 47 OF OUTPUT REGISTER.
* (X2) = *ACPP*.
* (X3) = PROCESSOR CONTROL WORD.
* (X5) = OUTPUT REGISTER.
* (X7) = 0.
* (A2) = *ACPP* ADDRESS.
* (B6) = PROCESSOR ADDRESS.
* (B7) = CONTROL POINT ADDRESS.
PPRX SPACE 4
* EXIT TO STORE OUTPUT REGISTER.
PPR1 EQU MTRC
PPRX EQU MTRX
ABTM SPACE 4
*** ABTM - ABORT CONTROL POINT.
*
* ENTRY
*T, OR 12/ ABTM,12/,12/,12/,12/
*
* EXIT
*T, IR 60/ 0
*T, OR 60/ 0
*
* * PP HUNG.* WILL OCCUR IF ATTEMPT IS MADE TO ABORT THE SYSTEM
* CONTROL POINT OR AN UNOCCUPIED USER CONTROL POINT.
PPR ABTM,,,DCP
SX5 PPET ERROR FLAG = *PPU ABORT.*
SB6 B0 SET ABORT FLAG
LX5 36
SB5 B1 FLAG *CEFM* CALL
EQ CEF1 CHANGE ERROR FLAG
ACTM SPACE 4,35
*** ACTM - ACCOUNTING FUNCTIONS.
*
* ENTRY
*T, OR 12/ ACTM,12/ FN,36/ -
*
* FN = 0 (ABCS) - CLEAR SRU ACCUMULATORS.
* FN = 1 (ABBF) - ACCOUNT BLOCK BEGIN.
* FN = 2 (ABSF) - COMPUTE SRU MULTIPLIERS CPM AND IOM.
* FN = 3 (ABCF) - ACCOUNT BLOCK CHANGE/END.
* FN = 4 (ABEF) - COMPUTE/CONVERT ELAPSED SRUS.
* FN = 5 (ABVF) - CONVERT ACCUMULATORS.
* FN = 6 (ABIF) - INCREMENT ACCUMULATOR.
* FN = 7 (ABUS) - GET RAW CP TIME - USAGE PRICING.
* FN = 10 (ABOF) - CONVERT OTHER ACCUMULATORS.
*
*
* 0 ABCS - CLEAR SRU ACCUMULATORS.
*
* ENTRY
*T, OR 12/ ACTM,12/ ABCS,36/
*
* EXIT
*T, OR 60/ 0
*
* FUNCTION
* CLEARS SRU ACCUMULATORS IN CPA WORDS *SRJW* AND *SRUW*.
*
*
* 1 ABBF - ACCOUNT BLOCK BEGIN.
*
* ENTRY
*T, OR 12/ ACTM,12/ ABBF,36/ -
*T, MB 12/ M1,12/ M2,12/ M3,12/ M4,12/ ADDER
*
* EXIT
*T, OR 60/ 0
*
* FUNCTION
* BEGIN ACCOUNT BLOCK BY INSERTING NEW MULTIPLIERS IN CONTROL
* POINT AREA AND APPLYING THE INITIAL ADDER TO THE SRU
* ACCUMULATOR. THE MULTIPLIERS CPM AND IOM ARE CALCULATED.
*
*
* 2 ABSF - COMPUTE SRU MULTIPLIERS CPM AND IOM.
*
* ENTRY
*T, OR 12/ ACTM,12/ ABSF,36/ -
*
* EXIT
*T, OR 60/ 0
*
* FUNCTION
* THE MULTIPLIERS CPM AND IOM ARE CALCULATED USING THE
* CURRENT CM AND ECS FIELD LENGTHS.
*
*
* 3 ABCF - ACCOUNT BLOCK CHANGE/END.
*
* ENTRY
*T, OR 12/ ACTM,12/ ABCF,36/ -
*T, MB 12/ M1,12/ M2,12/ M3,12/ M4,12/ ADDER
*
* EXIT
*T, OR 60/ 0
*
* FUNCTION
* CHANGE/END ACCOUNT BLOCK BY CLEARING SRU ACCUMULATORS,
* REPLACING MULTIPLIERS IN CONTROL POINT AREA AND APPLYING THE
* ADDER TO THE SRU ACCUMULATOR. THE MULTIPLIERS CPM AND IOM
* ARE CALCULATED.
*
*
* 4 ABEF - COMPUTE/CONVERT ELAPSED SRUS.
*
* ENTRY
*T, OR 12/ ACTM,12/ ABEF,36/ -
*T, MB+0 60/ OLD SRU ACCUMULATOR
*T, MB+1 60/ NEW SRU ACCUMULATOR
*
* EXIT
*T, OR 60/ 0
*T, MB 60/ ELAPSED SRUS IN F10.3 FORMAT
*
* FUNCTION
* ELAPSED SRUS (NEW-OLD) ARE CONVERTED AND PROGRAM MODE IS
* ENTERED FOR THE CONVERSION BY *RDC*. IF ELAPSED SRUS
* ARE LESS THAN OR EQUAL TO *MDSR*, ZERO IS RETURNED.
*
*
* 5 ABVF - CONVERT ACCUMULATORS.
*
* ENTRY
*T, OR 12/ ACTM,12/ ABVF,36/ -
*T, MB+0 60/ SRUW CONTROL POINT AREA WORD
*T, MB+1 60/ CPTW CONTROL POINT AREA WORD
*T, MB+2 60/ IOAW CONTROL POINT AREA WORD
*T, MB+3 60/ MP1W CONTROL POINT AREA WORD
*
* EXIT
*T, OR 60/ 0
*T, MB+0 60/ SRU ACCUMULATOR IN F10.3 FORMAT
*T, MB+1 60/ CP ACCUMULATOR IN F10.3 FORMAT
*T, MB+2 60/ MS ACCUMULATOR IN F10.3 FORMAT
*T, MB+3 60/ MT ACCUMULATOR IN F10.3 FORMAT
*T, MB+4 60/ PF ACCUMULATOR IN F10.3 FORMAT
*T, MB+5 60/ AD ACCUMULATOR IN F10.3 FORMAT
*
* FUNCTION
* THE ACCUMULATORS ARE UNPACKED AND STORED 1 PER WORD IN (MB)
* AND PROGRAM MODE IS ENTERED FOR CONVERSION BY *RDC*. IF
* TOTAL SRUS ARE LESS THAN OR EQUAL TO *MCSR*, *MCSR* IS
* RETURNED AS THE SRU ACCUMULATOR.
*
*
* 6 ABIF - INCREMENT ACCUMULATOR.
*
* ENTRY
*T, OR 12/ ACTM,12/ ABIF,30/ ,3/OP,3/CT
*T, MB+0 30/ ,30/INCREMENT TO APPLY
*T, MB+1 60/ ACCUMULATOR VALUE
*
* OP = OPERATION FLAG (0 = ADD, 1 = SUBTRACT)
* CT = REQUEST COUNT (1-3)
*
* EXIT
*T, OR 60/ 0
*T, MB+0 30/ NO CHANGE,30/ NEW VALUE FIRST OPERATION
*T, MB+2 30/ NO CHANGE, 30/ NEW VALUE SECOND OPERATION
*
* FUNCTION
* THE SRU ACCUMULATOR VALUE IS FIRST CONVERTED TO AN INTEGER
* NUMBER AND THEN INTEGER ADDITION OR SUBTRACTION IS
* PERFORMED. IF THE CONVERTED ACCUMULATOR VALUE IS LESS THAN
* 1, 1 IS USED. THE UPPER HALF OF THE WORDS CONTAINING
* THE INCREMENTS WILL BE PRESERVED IN THE UPPER HALF OF THE
* REPLY.
*
*
* 7 ABUS - GET RAW CP TIME - USAGE PRICING.
*
* ENTRY
*T, OR 12/ ACTM,12/ ABUS,36/ -
*T, MB+0 60/ CPTW CONTROL POINT AREA WORD
*T, MB+1 60/ CPJW CONTROL POINT AREA WORD
*
* EXIT
*T, OR 60/ 0
*T, MB 60/ ELAPSED APPLICATION UNITS IN F10.3 FORMAT
*
* FUNCTION
* ELAPSED CP SECONDS (CPTW-CPJW) IS CALCULATED AND THE
* CPU 0 MULTIPLIER IS FACTORED, TO OBTAIN RAW CP SECONDS.
* PROGRAM MODE IS ENTERED FOR CONVERSION BY *RDC*.
*
* 10 ABOF - CONVERT OTHER ACCUMULATORS.
*
* ENTRY
*T,OR 12/ ACTM,12/ ABOF,36/ -
*T,MB+0 60/ MPAW/ODAW CONTROL POINT AREA WORD
*T,MB+1 60/ AUCW CONTROL POINT AREA WORD
*
* EXIT
*T,OR 60/ 0
*T,MB+0 60/ MP ACCUMULATOR IN F10.3 FORMAT
*T,MB+1 60/ AUC ACCUMULATOR IN F10.3 FORMAT
*T,MB+2 60/ OD ACCUMULATOR IN F10.3 FORMAT
*
* FUNCTION
* THE ACCUMULATORS ARE UNPACKED AND STORED 1 PER WORD
* IN (MB) AND PROGRAM MODE IS ENTERED FOR CONVERSION
* BY ROUTINE *RDC*.
PPR ACTM,,RDC
AX1 36 GET FUNCTION NUMBER
SB4 X1-TACTL
SA1 A5+B1 GET (MB)
PL B4,HNG IF ILLEGAL FUNCTION
JP TACT+TACTL+B4 JUMP TO PROCESS FUNCTION
* OPTION TABLE.
TACT BSS 0
LOC 0
+ SB4 B0 (ABCS) - CLEAR SRU ACCUMULATORS
MX6 0
EQ ACT1 CLEAR *SRJW* AND *SRUW* FIELDS
+ EQ ACT2 (ABBF) - ACCOUNT BLOCK BEGIN
+ EQ ACT4 (ABSF) - COMPUTE SRU MULTIPLIERS CPM AND IO
+ MX6 0 (ABCF) - ACCOUNT BLOCK CHANGE/END
EQ ACT1
+ SA2 A1+B1 (ABEF) - COMPUTE/CONVERT ELAPSED SRUS
MX3 -42
EQ ACT6
+ SA1 A1+3 (ABVF) - CONVERT ACCUMULATORS
EQ ACT7
+ SB6 3 (ABIF) - INCREMENT ACCUMULATORS
EQ ACT10
+ BX6 X1 (ABUS) - GET RAW CP TIME - USAGE PRICING
MX0 -30
EQ ACT15
SA1 A1+B1 (ABOF) - CONVERT OTHER ACCUMULATORS
MX2 -29
EQ ACT9.1
TACTL BSS 0
LOC *O
* CLEAR SRU ACCUMULATORS.
* (X6) = 0.
ACT1 SA2 B7+SRJW CLEAR SRU ACCUMULATOR SET AT START OF JOB
SA6 B7+SRUW CLEAR RUNNING ACCUMULATOR
MX3 30
BX7 X3*X2
SA7 A2+
SX7 B0+
PL B4,PPR1 IF *ABCS* SUBFUNCTION
* STORE MULTIPLIERS IN CONTROL POINT AREA.
* (X1) = 12/ M1,12/ M2,12/ M3,12/ M4,12/ ADDER
ACT2 SX6 MPSR SET MAP MULTIPLIER
SA3 B7+MPMW
MX2 -12
LX1 12
MX4 -42
BX5 -X2*X1 (X5) = M1
IX6 X6*X5 M1 * MAP MULTIPLIER
BX4 -X4*X3
SA3 B7+MP2W
LX6 42
BX6 X4+X6
SA6 B7+MPMW
SB4 B1+B1 SET LOOP COUNT
SX4 1000
ACT3 LX1 12
IX6 X5*X4 PASS 1 - M1*1000 PASS 2 - M1*M3
BX4 -X2*X1
IX7 X5*X4 PASS 1 - M1*M2 PASS 2 - M1*M4
LX6 42
MX4 -24
LX7 24 POSITION MULTIPLIERS
BX3 -X4*X3
IX6 X6+X7 COMBINE MULTIPLIERS
LX1 12
IX6 X6+X3 INSERT MULTIPLIERS
BX4 -X2*X1
SA6 A3+
SB4 B4-B1 DECREMENT LOOP COUNT
SA3 A3-B1 PASS 2 - STORE M1*M3 AND M1*M4 IN MP1W
NZ B4,ACT3 IF PASS 2
* APPLY ADDER TO SRU ACCUMULATOR.
* (X1) = 48/ -,12/ ADDER
SB3 ACT4 SET RETURN ADDRESS
BX1 X4
NZ X4,AAD IF ADDER TO APPLY
* CALCULATE SRU MULTIPLIERS CPM AND IOM.
ACT4 SB4 ACT5 SET RETURN ADDRESS
EQ SRU CALCULATE CPM AND IOM
ACT5 MX7 0 SET TO CLEAR (OR)
EQ PPR1 EXIT
* COMPUTE AND CONVERT ELAPSED SRUS.
* (X1) = OLD SRU ACCUMULATOR. (X2) = NEW SRU ACCUMULATOR.
ACT6 LX1 12 RESTORE ORIGINAL ACCUMULATOR SIZE
SA4 ACTA SET MINIMUM DISPLAY VALUE
BX1 -X3*X1 ISOLATE OLD SRUS
SX7 10001B PARAMETERS FOR RDC (PROGRAM MODE)
BX2 -X3*X2 ISOLATE NEW SRUS
IX6 X2-X1 NEW - OLD
SA6 A1 STORE ELAPSED SRUS IN (MB)
IX4 X6-X4 COMPARE TO MINIMUM
PL X4,ACT9 IF GREATER THAN MINIMUM
MX7 0 SET TO CLEAR (OR)
SA7 A5+B1 CLEAR (MB)
EQ PPR1 EXIT
* CONVERT ACCUMULATORS.
* (X1) = (MB+3) - MP1W WORD FROM CONTROL POINT AREA.
ACT7 MX2 -20 SET ACCUMULATOR MASK
SB6 3 SET ACCUMULATOR COUNT
BX6 -X2*X1 ISOLATE AD ACCUMULATOR
SX7 60201B PARAMETERS FOR *RDC* (PROGRAM MODE)
SA1 A1-1 GET MS, MT AND PF ACCUMULATORS
ACT8 SA6 A1+B6 STORE ACCUMULATOR
BX6 -X2*X1 ISOLATE NEXT ACCUMULATOR
AX1 20 SHIFT FOR NEXT PASS
SB6 B6-B1 DECREMENT ACCUMULATOR COUNT
PL B6,ACT8 IF MORE TO MOVE
SA1 ACTB SET MINIMUM CHARGE VALUE
SA2 A5+B1 SRU ACCUMULATOR
MX6 -42
BX6 -X6*X2 ISOLATE SRU ACCUMULATOR
IX6 X6-X1
PL X6,ACT9 IF GREATER THAN MINIMUM
BX6 X1
SA6 A2
* ENTER PROGRAM MODE FOR CONVERSION BY RDC.
* (X5) = (OR). (X7) = RDC PARAMETERS.
ACT9 MX1 12 SET (OR) MASK
LX7 24 POSITION RDC PARAMETERS
BX5 X1*X5 ISOLATE (OR) FUNCTION CODE
IX5 X5+X7 INSERT RDC PARAMETERS
EQ PMR ENTER PROGRAM MODE
* CONVERT OTHER ACCUMULATORS.
* (X1) = (MB+1) - AUCW WORD FROM CONTROL POINT AREA
ACT9.1 BX6 -X2*X1 ISOLATE AUC ACCUMULATOR
SA1 A1-B1 GET MP/OD ACCUMULATOR
SA6 A1+B1
MX2 -20 SET ACCUMULATOR MASK
BX7 -X2*X1
SA7 A1+ STORE MP ACCUMULATOR
LX1 -20
BX6 -X2*X1
SA6 A6+B1 STORE OD ACCUMULATOR
SX7 30000B PARAMETERS FOR *RDC* (PROGRAM MODE)
EQ ACT9 PROCESS CONVERSION IN *RDC*
* INCREMENT ACCUMULATOR.
ACT10 MX0 -3
BX2 -X0*X5 REQUEST COUNT
SB5 X2
AX5 3
BX2 -X0*X5 OPERATION FLAG
SB4 X2+
MX0 -42
ZR B5,HNG IF NO REQUEST COUNT
GT B5,B6,HNG IF ILLEGAL REQUEST COUNT
GT B4,B1,HNG IF ILLEGAL OPERATION FLAG
ACT11 MX3 -30
SA2 A1+B1 GET NEXT PARAMETER
BX2 -X0*X2
BX5 -X3*X1
PX2 X2 CONVERT ACCUMULATOR TO UNITS
BX1 X3*X1 PRESERVE UPPER HALF
SA3 HTH
FX4 X3*X2 .0000001
UX2 X4
NZ X2,ACT12 IF ACCUMULATOR NOT LESS THAN 1
SX2 B1
ACT12 ZR B4,ACT14 IF ADDITION DESIRED
IX6 X2-X5
ACT13 SA6 A1 STORE REPLY IN MESSAGE BUFFER
EQ B5,B1,PPR1 IF ALL REQUESTS HONORED
SA1 A2+B1
SB5 B5-B1
EQ ACT11 PROCESS NEXT REQUEST
ACT14 IX6 X2+X5 PERFORM ADDITION
BX6 X1+X6
JP ACT13
* GET RAW CP TIME - USAGE PRICING.
ACT15 SB4 ACT15.1 SET *MSB* RETURN ADDRESS
SA2 CPTB CONVERT QUARTER NANOUNITS TO MILLIUNITS
EQ /PROGRAM/MSB MULTIPLY 60 BIT INTEGER
ACT15.1 SA2 A1+B1 GET *CPJW* VALUE
AX6 8
BX2 -X0*X2
IX6 X6-X2 CALCULATE NUMBER OF CP QUARTER SECONDS
NZ X6,ACT16 IF NOT LESS THAN MINIMUM
SX6 B1+
ACT16 SX7 10100B PARAMETERS FOR *RDC* (PROGRAM MODE)
SA2 =250000 CONVERT TO CP MICROSECONDS
IX6 X6*X2
SA2 ACTC
ZR X2,ACT17 IF NO MULTIPLIER CALCULATION REQUIRED
PX6 X6 FACTOR OUT THE CPU MULTIPLIER
NX6 X6
RX6 X6*X2
UX6,B6 X6
LX6 X6,B6
ACT17 SX2 4000 CONVERT TO CP QUARTER NANOSECONDS
IX6 X6*X2
SA6 A1
EQ ACT9 TO CONVERT RAW CP MILLISECOND VALUE
ACTA CON MDSR*10000 MINIMUM DISPLAY VALUE FOR SRU ACCUMULATOR
ACTB CON MCSR*10000 MINIMUM CHARGE VALUE FOR SRU ACCUMULATOR
ACTC CON 0.0 MULTIPLIER FOR APPLICATION ACCOUNTING
AFAM SPACE 4,10
*** AFAM - ACCESS FAST ATTACH.
* AFAM ATTACHES OR RELEASES FAST ATTACH FILES.
*
* ENTRY
*T OR 12/ AFAM,12/ EQ,1/ NR,11/ P1,12/ SF,12/ P2
* EQ EST ORDINAL OF DEVICE WHERE THE FAST
* ATTACH FILE RESIDES, IF GLOBAL FAST ATTACH FILE.
* 0, IF LOCAL FAST ATTACH FILE.
* NR NON-ROLLABLE OPTION (VALID ONLY ON WRITEABLE MODES
* FOR *AFAS* SUBFUNCTION).
* P1 MODE OF ATTACH.
* P2 FNT ORDINAL.
* SF SUBFUNCTION CODE AS DEFINED IN COMSCPS.
* AFAS = 0 = ATTACH FAST ATTACH FILE.
* RFAS = 1 = RETURN FAST ATTACH FILE.
*
* EXIT
*T, OR 12/ 0,12/ ST,24/ ,4/ WF,6/ ,1/ NR,1/
* ST = 0 IF FUNCTION COMPLETE.
* ST = 1 IF FUNCTION CANNOT BE COMPLETED AT THIS TIME.
* FILE IS ATTACHED IN A CONFLICTING MODE.
* WF .NE. 0 IF FILE ALREADY ATTACHED IN A WRITABLE MODE (AFAS
* REJECT ONLY).
* NR = NON-ROLLABLE FLAG (AFAS REJECT ONLY).
*
* *PP HUNG* WILL OCCUR IF -
* 1) ILLEGAL FUNCTION CODE IS DETECTED.
* 2) ILLEGAL FNT ORDINAL DETECTED.
* 3) ILLEGAL MODE NUMBER DETECTED.
* 4) FILE NOT *FAFT*.
*
* THIS FUNCTION MAY BE REJECTED IF -
* 1) THE GLOBAL FST IS BUSY.
* WHEN THIS OCCURS BIT 59 OF OR IS SET AND *PPR* WILL
* RECALL CPUMTR TO RETRY THE REQUEST.
*
* NOTE - AFTER AN *AFAS* SUBFUNCTION, IT IS THE RESPONSIBILITY
* OF THE CALLER TO ENSURE THAT THE TRT ON THIS MAINFRAME
* IS CURRENT. IN SOME CASES, THIS MAY REQUIRE AN EXPLICIT
* *STBM/UTRS* REQUEST FOR AN UP-TO-DATE TRT. NOTE THAT WHEN
* A FILE IS TO BE ACCESSED VIA *CIO* CALLS, CERTAIN ACCESS
* MODES (M, RM, A, RA) WILL FORCE *STBM* CALLS BEFORE
* EACH ACCESS. THEREFORE, WHEN *PFM* ATTACHES A FILE IN
* SUCH A MODE, A TRT UPDATE REQUEST IS NOT NEEDED.
*
* NOTE - IF A FAST ATTACH FILE RESIDES ON AN INDEPENDENT
* SHARED DEVICE, *1FA* PROCESSES THE REQUEST DIRECTLY
* WITHOUT CALLING *AFAM*. *1FA* MAINTAINS THE COUNTS AND
* INTERLOCKS IN THE SYSTEM SECTOR INSTEAD OF THE FST.
PPR AFAM,(/ISD/CHR,ISD,/MMF/AFAP,MMF,/MONITOR/.AFAM)
LX1 48
MX4 -12
BX6 -X4*X1
LX6 59
SB6 X6+
SB5 PPRX SET *REJ* EXIT
NZ B6,HNG IF ILLEGAL SUBFUNCTION
LX1 48 POSITION ATTACH MODE
BX5 -X4*X5 EXTRACT FNT ORDINAL
TX7 X5,-FNTM ORDINAL - MAXIMUM NUMBER OF ENTRIES
MX0 -11
BX3 -X0*X1 MODE OF FAST ATTACH FILE
SX0 X3-TFASL
BX7 X7*X0
PL X7,HNG IF ILLEGAL FNT ORDINAL/ATTACH MODE
CX2 X5,FNT
TA2 X2+FNTG,FNT GET FNT ENTRY
BX0 -X4*X2
AX0 6
SA3 TFAS+X3 READ MODE PARAMETERS
SX0 X0-FAFT
LX2 -1
NG X2,REJ IF FILE BUSY
LX2 -11
MX5 -6
BX2 -X5*X2
NZ X0,HNG IF NOT *FAFT* FILE
SA1 A2+B1 GET FST ENTRY
ERRNZ FSTG-FNTG-1 CODE DEPENDS ON VALUE
SB4 A1 FST ADDRESS
TNZ X2,(/MMF/SFI,MMF,/LSPMMF/AFA) IF FAT ENTRY IN EM
* PERFORM UPDATE.
AFA1 UX3,B6 X3 (B6) = POSITION OF FIELD
BX2 -X4*X3 (X2) = FIELD MASK
AX5 X1,B6 POSITION FIELD TO BOTTOM OF WORD
LX3 -24
BX5 X2*X5 CURRENT VALUE OF FIELD
BX4 -X4*X3
MX7 1
LX4 X4,B6 INCREMENT SHIFTED TO FIELD POSITION
NG X6,AFA2 IF DECREMENTING FIELD
UX3,B5 X3 (B5) = -MASK WIDTH
LX3 -12
AX6 X7,B5 FORM BUSY MASK
BX4 -X4 COMPLEMENT INCREMENT VALUE
SB5 X3 SET POSITION OF BUSY MASK
LX6 X6,B5
BX5 X2-X5
BX3 -X6*X1 CHECK IF BUSY STATUS
NZ X3,AFA5 IF FILE BUSY
AFA2 ZR X5,AFA5 IF OVERFLOW/UNDERFLOW
SB5 B6-8
IX6 X1-X4 INCREMENT/DECREMENT FIELD
SX2 B1+B1
NZ B5,AFA4 IF NOT WRITABLE MODE
SA5 A5
LX5 59-12
NG X5,AFA3 IF RETURNING FAST ATTACH FILE
LX5 59-35-59+12
PL X5,AFA4 IF NON-ROLLABLE BIT NOT REQUESTED
BX6 X2+X6 SET NON-ROLLABLE BIT
EQ AFA4 STORE GLOBAL WORD
AFA3 BX6 -X2*X6 CLEAR NON-ROLLABLE BIT
AFA4 SA6 A1 STORE GLOBAL WORD
TNZ X0,(/MMF/CFI,MMF,/MONITOR/HNG) IF FAT ENTRY IN EM
SX7 B0
EQ CSM CHECK FOR STORAGE MOVE
AFA5 LX7 37 POSITION STATUS
TNZ X0,(/MMF/CFI1,MMF,/MONITOR/HNG) IF EM PROCESSING
AFA6 ZR X7,CSM IF NO REJECT
MX4 -12
BX3 -X4*X1
BX7 X7+X3
EQ CSM CHECK FOR STORAGE MOVE
SPACE 4,15
** AFAM PARAMETER TABLE FORMAT.
* THE FOLLOWING TABLE DEFINES THE PARAMETERS NEEDED TO PERFORM
* 1) BUSY CHECK.
* THE BUSY CHECK IS PERFORMED BY DEFINING A FIELD IN THE WORD
* WHICH MUST BE ZERO FOR THE UPDATE TO TAKE PLACE.
* 2) OVERFLOW/UNDERFLOW CHECK.
* 3) INCREMENT/DECREMENT OF FIELDS UPDATED BY *AFAM* FUNCTIONS.
*
*T, AFAM 12/ P1,12/ P2,12/ INC,12/ W,12/ MAX
* P1 POSITION OF FIELD TO INCREMENT + 2000B
* P2 POSITION OF BUSY MASK
* INC VALUE TO USE FOR INCREMENT/DECREMENT
* W 2073B - WIDTH OF BUSY MASK
* MAX MAXIMUM VALUE OF FIELD (FOR INCREMENT)
* MAX FIELD MASK (FOR DECREMENT)
TFAS BSS 0 TABLE OF FAST ATTACH PROCESSING PARAMETERS
LOC 0
VFD 12/2000B+8,12/2,12/7,12/2073B-34,12/7 WRITE
VFD 12/2000B+12,12/8,12/1,12/2073B-4,12/77B READ
VFD 12/2000B+8,12/2,12/1,12/2073B-16,12/1 APPEND
VFD 12/2000B+12,12/8,12/1,12/2073B-4,12/77B EXECUTE
VFD 12/2000B,12/0,12/0,12/2073B-59,12/0 NULL
VFD 12/2000B+8,12/2,12/3,12/2073B-22,12/3 MODIFY
VFD 12/2000B+24,12/10,12/1,12/2073B-1,12/7777B R/MODIFY
VFD 12/2000B+18,12/9,12/1,12/2073B-3,12/77B R/APPEND
VFD 12/2000B+8,12/8,12/10B,12/2073B-16,12/10B UPDATE
VFD 12/2000B+2,12/8,12/1,12/2073B-3,12/77B R/UPDATE
LOC *O
TFASL EQU *-TFAS
BFMM SPACE 4,25
*** BFMM - BUFFERED I/O BUFFER MANAGER CALL.
*
* ENTRY
*T OR 12/ BFMM,6/ NBI,1/I,5/,6/ CP,18/ FNTA,6/ OP,6/ PA
* NBI NUMBER OF ADDITIONAL WRITE BUFFERS TO
* INTERLOCK (FOR *BMVI* OPERATION ONLY).
* MAXIMUM OF 10D ADDITIONAL BUFFERS IS ALLOWED.
* I CURRENT BUFFER ALREADY INTERLOCKED FLAG
* (FOR *BMVI* OPERATION ONLY).
* CP CONTROL POINT NUMBER IF PSEUDO-PP CALL.
* 0 IF PP CALL.
* FNTA FNT RELATIVE ADDRESS IN NEGATIVE IF PSEUDO-PP CALL.
* PSEUDO-FNT ADDRESS IF PP CALL.
* EST ORDINAL OF EQUIPMENT TO PROCESS IF *BMFW* OR
* *BMDD* OPERATION.
* 0 IF *BMFW* TO PROCESS ALL EQUIPMENTS.
* OP OPERATION CODE.
* BMRD = READ BUFFER.
* BMWR = WRITE BUFFER.
* BMRW = REWRITE BUFFER.
* BMVI = VALIDATE AND INTERLOCK BUFFER.
* BMRG = RELEASE READ BUFFER AND GET NEXT BUFFER.
* BMRB = RELEASE READ BUFFER.
* BMFL = FLUSH BUFFER.
* BMRF = RELEASE AND FLUSH WRITE BUFFER.
* BMFW = FLUSH ALL WRITE BUFFERS.
* BMTR = TERMINATE SHARED DEVICE READ ACCESS.
* BMTW = TERMINATE SHARED DEVICE WRITE ACCESS.
* BMDB = DROP ALL BUFFERS FOR FILE.
* BMDD = DROP ALL BUFFERS ON DEVICE.
* BMCR = COMPLETE SHARED DEVICE READ ACCESS REQUEST.
* BMCW = COMPLETE SHARED DEVICE WRITE ACCESS REQUEST.
* PA OPERATION CODE DEPENDENT PARAMETER.
* FOR *BMRD* - BUFFER COUNT.
* 0 = USE DEFAULT BUFFER COUNT.
* BUFFER COUNT IF .NE. 0.
* FOR *BMWR* - RECALL ALLOWED FLAG.
* 0 = RECALL ALLOWED.
* 1 = RECALL NOT ALLOWED.
* FOR *BMVI* - OPERATION CODE TO BE EXECUTED IF BUFFER
* CANNOT BE INTERLOCKED IN MONITOR MODE.
* *BMRD* = INTERLOCK FOR READ.
* *BMWR* = INTERLOCK FOR WRITE.
* FOR *BMRF* - WRITE OPERATION CODE TO BE EXECUTED ON
* NEXT BUFFER AFTER FLUSH OF CURRENT BUFFER.
* 0 = NO WRITE OPERATION.
* *BMWR* = WRITE BUFFER.
* *BMRW* = REWRITE BUFFER.
* FOR *BMFW* - RESTART 819 I/O FLAG.
* 0 = DO NOT RESTART 819 I/O.
* RESTART 819 I/O IF .NE. 0.
* FOR *BMCR*, *BMCW* - STATUS CODE.
* 0 = NORMAL COMPLETION.
* 1 = *BRT* ENTRY EVICTED BY *MTE*.
* 2 = OTHER MACHINE CANNOT RELEASE WRITE ACCESS.
*
*T FNT+0 60/
*T,FNT+1 3/,9/ EQ,12/,12/ CT,12/ CS,12/
*T,FNT+2 48/,12/ BI
* EQ EST ORDINAL.
* CT CURRENT LOGICAL TRACK.
* CS CURRENT LOGICAL SECTOR.
* BI BUFFER INDEX FOR OP = BMVI, BMRG, BMRB AND BMRF.
*
* EXIT
*T, OR 36/0, 12/ BI,5/ ST,7/0
* BI BUFFER INDEX.
* ST STATUS.
* BIT 11 SET IF BUFFER RECALL.
* BIT 10 SET IF BUFFER BUSY.
* BIT 9 SET IF I/O ERROR.
* BIT 8 SET IF INACCESSIBLE DEVICE.
* BIT 7 SET IF ADDRESS ERROR.
*
* FOR *BMVI* OPERATION WITH *BMWR* OR *BMRW* SUBFUNCTION,
* ORDINALS OF ADDITIONAL WRITE BUFFERS INTERLOCKED ARE RETURNED
* IN *MB* AND *MB*+1 -
*
*T, MB 12/ BF5,12/ BF4,12/ BF3,12/ BF2,12/ BF1
*T, MB+1 12/ BF10,12/ BF9,12/ BF8,12/ BF7,12/ BF6
* BF(N) BUFFER INDEX OF (N)TH MULTIPLE WRITE
* BUFFER RESERVED FOR *BMVI* OPERATION (ZERO
* INDICATES NO (N)TH BUFFER INTERLOCKED).
*
*
* HANG CONDITIONS -
*
* 1. INVALID OPERATION CODE.
* 2. INVALID SUBFUNCTION FOR *BMVI* OPERATION.
* 3. MULTIPLE WRITE BUFFER COUNT .GT. 10D FOR *BMVI*
* OPERATION.
* 4. NEXT TRACK NOT RESERVED WHEN NEEDED FOR MULTIPLE
* WRITE BUFFER REQUEST.
PPR BFMM,(/BUFIO/BFM,BUFIO,/MONITOR/HNG),(/BUFIO/BFM3,BUFIO
,,/PROGRAM/HNG)
BIOM SPACE 4,40
*** BIOM - BUFFERED I/O CONTROL.
*
* THIS FUNCTION PROCESSES CPU INTERRUPTS BY DEDICATED BUFFERED
* DEVICE DRIVERS. NOTE THAT THESE DRIVERS DO NOT USE *PPR* TO
* ISSUE THE *BIOM* MONITOR FUNCTION, THEREFORE, THE FLAGS IN
* BITS 59-56 OF THE PP OUTPUT REGISTER ARE NOT RECOGNIZED.
*
* ENTRY -
*T, OR 12/ BIOM, 12/ SF, 12/ PO, 1/ I, 11/ NB, 12/ P1
*
* SF SUBFUNCTION -
* SUIS = 0 = SET UNIT INTERLOCK.
* DCBS = 1 = DELINK CONTROL BUFFERS.
* SETS = 2 = SET ERROR STATUS IN *CBT*.
* IDSS = 3 = INHIBIT DATA STREAMING.
* CETS = 4 = CLEAR ERROR STATUS FROM I/O QUEUE.
*
* PO *PUT* ORDINAL.
* I CLEAR UNIT INTERLOCK FLAG.
* NB NUMBER OF CONTROL BUFFERS TO PROCESS.
* (THE UNIT INTERLOCK FLAG MUST BE SET IF THE *PROBE*
* TABLE *IOST* IS TO BE UPDATED.)
* P1 FOR *DCBS* SUBFUNCTION, NUMBER OF CBT-S PROCESSED.
* FOR *SETS* SUBFUNCTION, ERROR CODE.
* FOR *PCIS* SUBFUNCTION, CHANNEL NUMBER.
* FOR OTHER SUBFUNCTIONS, UNUSED.
*
* EXIT -
*T, OR 12/0, 12/ ST, 36/0
*
* ST REPLY STATUS - *SUIS*
* = 0 IF UNIT INTERLOCK SET FOR CALLING PP.
* = OR ADDRESS OF PP HOLDING UNIT INTERLOCK.
*
* REPLY STATUS - *SETS*
* = 0 IF ERROR RECOVERY ON ALTERNATE CHANNEL.
* = 1 IF NO ERROR RECOVERY. CALLER IS RESPONSIBLE FOR
* ISSUING ALL MESSAGES ASSOCIATED WITH THE ERROR.
*
* REPLY STATUS - *PCIS*
* = 0 IF CHANNEL MAY BE DOWNED ON SPECIFIED UNIT.
* = 1 IF REQUESTS REQUIRING SPECIFIED CHANNEL ARE STILL
* PENDING ON SPECIFIED UNIT.
*
* REPLY STATUS - ALL OTHER SUBFUNCTIONS
* = 0.
*
* *PP HUNG.* WILL OCCUR IF-
* 1) BUFFER COUNT = 0 ON AN I/O COMPLETE.
PPR BIOM,(/IHPFMD/BIO,IHPFMD,/MONITOR/HNG),,FEX
BMIM SPACE 4,10
*** BMIM - BUFFERED MEMORY INVALIDATION.
*
* THIS FUNCTION IS USED TO INVALIDATE BUFFERED MEMORY. IT
* SHOULD BE USED ONLY ON CYBER 170-835 AND CYBER 170-855
* MACHINES. IF CACHE IS NOT PRESENT, THE FUNCTION IS IGNORED.
*
* ENTRY
*T, OR 12/ BMIM,12/ SF,12/,12/ MF,12/
* SF SUBFUNCTION -
* ICMS = 1 INVALIDATE CACHE MEMORY.
* MF MODE FLAG -
* = 0 IF CENTRAL MEMORY.
* = 1 IF EXTENDED MEMORY.
*
* EXIT
*T, OR 60/0
*
* PP HANG CONDITIONS -
* INVALID SUBFUNCTION.
* INVALID MODE FLAG ON *ICMS* SUBFUNCTION.
PPR BMIM
SA1 MABL GET LOWER CYBER 170-8XX FLAG
MX4 -4
LX1 59-47
NG X1,MTRC IF NOT LOWER CYBER 170-8XX MAINFRAME
SA1 EABL+CPEI GET PROCESSOR 0 DESCRIPTOR POINTER
LX1 18
SA1 X1+/DSL/DEGR/5 GET SECOND WORD OF DESCRIPTOR
LX1 0-47
LX1 0-12
BX1 -X4*X1 CACHE DEGRADATION FLAGS
NZ X1,PPR1 IF NO CACHE PRESENT
MX0 -12
BX3 X5
LX3 0-36
BX3 -X0*X3 SUBFUNCTION
SB4 X3-TBMIL
ZR X3,HNG IF INVALID SUBFUNCTION
PL B4,HNG IF INVALID SUBFUNCTION
JP B4+TBMI+TBMIL-1 ENTER SUBFUNCTION PROCESSOR
TBMI BSS 0
LOC 1
+ AX5 12 (ICMS) - INVALIDATE CACHE
BX3 -X0*X5 MODE FLAG
EQ BMI1 ENTER *ICMS* PROCESSOR
TBMIL BSS 0
LOC *O
BMI1 SB4 X3-1 CHECK FOR INVALID MODE
GT B4,B0,HNG IF INVALID MODE
SA7 A5 COMPLETE FUNCTION
SB4 B7+FLSW
ERRNZ ECSW-FLSW-2 CODE ASSUMES *ECSW*=*FLSW*+2
LX3 1 MODE*2
SA1 B4+X3 GET *FLSW*/*ECSW*
BX2 -X0*X1 CM/EM FL
LX2 6
LX1 24
AX1 36 CM/UEM RA
LX1 6
ZR X3,BMI2 IF CM MODE
TLX1 3,UESC RELATIVE UEM ADDRESS
MX3 1
BX1 X3+X1 SET EXTENDED MEMORY FLAG
TLX2 3,UESC UEM FL
BMI2 IC X1,X2,703B TELL EI TO INVALIDATE CACHE BLOCK
EQ MTRX EXIT
CCAM SPACE 4
*** CCAM - CHANGE CONTROL POINT ASSIGNMENT.
* ENTERED FROM *TIOM*.
*
* ENTRY
*T, OR 12/ CCAM,1/J,1/R,1/M,1/A,1/,7/ CP,12/ EJTO,24/
* J IF SET, INDICATES EJT ORDINAL NOT REQUIRED AT NEW
* CONTROL POINT.
* R IF SET, (SCHEDULER CALL TO RESERVE CONTROL POINT) SET
* JOB ADVANCE AND INTERLOCK FLAGS FOR JOB SPECIFIED BY
* EJT ORDINAL *P* AND SET EJT ORDINAL IN CP AREA WORD
* *TFSW*. THE FUNCTION WILL BE REJECTED IF THE JOB
* ADVANCE OR INTERLOCK FLAGS ARE ALREADY SET OR IF THE
* CP IS OCCUPIED (EJT ORDINAL ALREADY SET).
* M IF SET, REJECT CHANGE IF MOVE FLAG SET. IF NOT SET
* AND THE MOVE FLAG IS SET AT THE NEW CP/PCP, A *PRLM*
* FUNCTION WILL BE ENTERED IN THE OUTPUT REGISTER AFTER
* THE CHANGE. THIS OPTION WILL BE IGNORED IF THE
* REQUEST IS TO CLEAR AN ALTERNATE CP/PCP ASSIGNMENT.
* A IF SET AND *CP* .NE. 0, SET ALTERNATE CP/PCP
* ASSIGNMENT TO CP OR PCP *CP*. IF SET AND *CP* .EQ. 0,
* CLEAR ALTERNATE CP/PCP ASSIGNMENT.
* CP NEW CONTROL POINT OR PSEUDO-CONTROL POINT NUMBER.
* PSEUDO-CONTROL POINT IS ALLOWED ONLY IF *A* IS SET.
* IF ZERO, CLEAR ALTERNATE CP/PCP ASSIGNMENT (*A* MUST
* BE SET).
* EJTO EJT ORDINAL TO SET. IGNORED IF *R* OPTION NOT SET.
*
* EXIT
*T, OR 12/ 0,48/ PARAMETERS
* PARAMETERS = 0 IF CONTROL POINT CHANGE MADE
* PARAMETERS = ENTRY PARAMETERS IF CHANGE NOT MADE
*
* HANG CONDITIONS -
* *J* OPTION SPECIFIED WITH *M* OR *A* OPTION.
* *R* OPTION SPECIFIED WITHOUT *J* OPTION.
* *R* OPTION SPECIFIED WITH *M* OR *A* OPTION.
* CHANGE IS BEING MADE TO CURRENT CONTROL POINT.
* CHANGE TO AN INVALID CONTROL POINT.
* CHANGE IS BEING MADE AND ALTERNATE CP/PCP ASSIGNMENT
* IS IN EFFECT.
* ALTERNATE CP/PCP SPECIFIED (*A* OPTION) IS THE CURRENT
* ALTERNATE CP/PCP.
* INVALID CP/PCP SPECIFIED WITH *A* OPTION.
* INVALID EJT ORDINAL SPECIFIED WITH *R* OPTION.
PPR CCAM
* SET OLD AND NEW CP/PCP POINTERS AND VALIDATE CALL PARAMETERS.
SA3 A5-B1
BX7 X1 SET REJECT RESPONSE
LX1 0-44
MX0 -4
SX6 741040B VALID OPTION COMBINATIONS MASK
BX0 -X0*X1 OPTIONS
LX2 -24
SB3 X0+59-17
SB5 X2 OLD CP/PCP ADDRESS
LX6 B3
SX0 37600B
SX4 7600B
AX5 36-7
PL X6,HNG IF INVALID OPTION COMBINATION
LX3 -36+7
BX5 X0*X5 NEW CP ADDRESS OR PCP NUMBER * 200B
BX6 X3 SAVE INPUT REGISTER
SB4 X5 SAVE NEW CP OR PCP NUMBER * 200B
BX3 X4*X3
SB6 X5 NEW CP ADDRESS IF CP
SB7 X3 CALLING CP ADDRESS
LX1 59-44-0+44
SB3 A2 SAVE *ACPP* ADDRESS
TX0 X5-200B,-SCA
NG X1,CCA1 IF ALTERNATE CP/PCP REQUEST
ZR B6,HNG IF NEW CP NUMBER NOT VALID
PL X0,HNG IF NEW CP NUMBER NOT VALID
NE B5,B7,HNG IF ALTERNATE CP/PCP ASSIGNMENT
BX6 -X4*X6
BX6 X6+X5 SET NEW CP NUMBER IN INPUT REGISTER
EQ CCA3 CHECK CHANGE TO CURRENT CP
CCA1 NZ B6,CCA2 IF NOT CLEAR ALTERNATE CP/PCP ASSIGNMENT
SB4 B7
SB6 B7
CCA2 NG X0,CCA3 IF NOT SET ALTERNATE PCP ASSIGNMENT
TX3 X0-200B,-PCM2
TB6 X0,PCPA SET PCP ADDRESS
PL X3,HNG IF INVALID PCP NUMBER
CCA3 EQ B5,B6,HNG IF CHANGING TO CURRENT CP/PCP
* CHECK ACTIVITY AT NEW CP/PCP. SINCE THE *CCAM* FUNCTION MAY
* HAVE BEEN STORAGE MOVABLE FOLLOWING A PREVIOUS EXIT TO *REJ*,
* EXIT MUST BE MADE TO *CSM* IF A REJECT RESPONSE IS TO BE
* RETURNED TO THE CALLER.
SA2 B6+TFSW GET EJT ORDINAL
LX6 36-7 RESTORE INPUT REGISTER
LX1 59-47-59+44
MX0 12
LX5 X1,B1
BX3 X0*X2 NEW CP EJT ORDINAL
PL X5,CCA4 IF NOT RESERVE CP OPTION
LX1 59-35-59+47
SA4 B6+STSW
NZ X3,CSM IF EJT ORDINAL PRESENT
BX4 X0*X4 PP ACTIVITY
BX3 X0*X1 SPECIFIED EJT ORDINAL
NZ X4,CSM IF PP ACTIVITY AT CONTROL POINT
LX1 59-47-59+35
ZR X3,HNG IF NO EJT ORDINAL SPECIFIED
BX2 X3+X2 SET EJT ORDINAL IN *TFSW*
CCA4 NZ X3,CCA5 IF EJT ORDINAL IS PRESENT
TX4 B6,-SCA
ZR X4,CCA5 IF CHANGE TO SYSTEM CP
PL X1,CSM IF EJT ORDINAL REQUIRED
CCA5 LX3 12
CX4 X3,EJT CONVERT EJT ORDINAL TO OFFSET
MX0 1
TA4 X4+JSNE,EJT
LX4 59-6 CHECK JOB ADVANCE FLAG AT NEW CP
BX0 X0*X5 EXTRACT RESERVE CP OPTION
PL X4,CCA6 IF JOB ADVANCE NOT SET
BX3 X1
LX3 59-44-59+47
PL X3,CSM IF NOT ALTERNATE CP/PCP OPTION
EQ B6,B7,CCA6 IF CLEAR ALTERNATE CP/PCP ASSIGNMENT
BX3 X6
AX3 42
SX3 X3-3R1RO
NZ X3,CSM IF NOT *1RO*
CCA6 BX4 X4+X0 SET JOB ADVANCE IF RESERVE CP OPTION
LX4 59-0-59+6
BX3 X0*X4
LX1 59-44-59+47
NG X3,CSM IF JOB INTERLOCK SET AND RESERVE CP OPTION
SA3 TFPL-1+LA1CP GET *1CP* PLD POINTER
BX4 X0+X4 SET JOB INTERLOCK IF RESERVE CP OPTION
LX4 0-59
* SUSPEND PROCESSING IF *1CP* NOT ACCESSIBLE OR INCORRECT CPU
* ASSIGNMENT ON DUAL CPU CACHE MACHINE.
SX5 X3+
ZR X5,CCA16 IF *PLD* BEING MODIFIED
SA3 B6+STSW NEW CP STATUS
TNO /MONITOR/CCA7,NDCPC IF NOT DUAL CPU CACHE MACHINE
SX0 A0+
LX7 X3,B1
NZ X0,CCA7 IF MONITOR MODE IN CPU 1
NG X3,CCA7 IF NEW CP NOT ACTIVE IN EITHER CPU
NG X7,/DCP/SAX IF NEW CP IN CPU 1, SET ALTERNATE EXCHANGE
* UPDATE NEW CP/PCP PP ACTIVITY AND CP/PCP ASSIGNMENT.
CCA7 SX0 1
LX0 48-0
IX7 X3+X0 INCREMENT PP COUNT
EQ B6,B7,CCA8 IF CLEAR ALTERNATE CP/PCP REQUEST
SA7 A3+ UPDATE PP COUNT
CCA8 SX7 B6+
PL X1,CCA10 IF NOT ALTERNATE CP/PCP REQUEST
EQ B6,B7,CCA10 IF CLEAR ALTERNATE CP/PCP REQUEST
TX3 B4-200B,-SCA
NG X3,CCA9 IF NOT SET ALTERNATE PCP ASSIGNMENT
SX7 B7+ SET CALLING CP FOR FUNCTION PROCESSING
CCA9 SX3 1
LX3 23-0
BX7 X7+X3 SET ALTERNATE CP/PCP FLAG
CCA10 SX3 B4
LX3 48-7 SET NEW CP/PCP NUMBER
BX7 X3+X7
SX3 B6
LX3 24 SET NEW CP/PCP ADDRESS
BX7 X7+X3
LX1 59-45-59+44
SA7 B3 UPDATE *ACPP*
PL X1,CCA11 IF NOT TO REJECT CHANGE ON STORAGE MOVE
* CHECK REJECT ON STORAGE MOVE. THIS MUST BE DONE AFTER *STSW*
* AND *ACPP* HAVE BEEN UPDATED TO INTERLOCK WITH *MTR* STORAGE
* MOVE PROCESSING. IF THE FUNCTION IS REJECTED, THE ENTRY
* CONDITIONS MUST BE RESTORED.
NE B5,B7,CCA11 IF ALTERNATE CP/PCP ASSIGNMENT
SA3 CMCL
SX7 B4
AX7 7 NEW CP/PCP NUMBER
AX3 48
IX3 X3-X7
ZR X3,CCA15 IF MOVE REQUEST FOR NEW CP/PCP
* UPDATE NEW CP/PCP STATUS FOR *R* OPTION AND UPDATE OLD CP/PCP
* PP ACTIVITY.
CCA11 SA3 B5+STSW GET OLD CP/PCP STATUS
BX7 X2
SA7 A2 UPDATE *TFSW*
BX7 X4
SA7 A4 UPDATE EJT ENTRY
LX1 59-44-59+45
SA6 A5-B1 UPDATE INPUT REGISTER
PL X1,CCA12 IF NOT ALTERNATE CP/PCP REQUEST
NE B6,B7,CCA13 IF NOT CLEAR ALTERNATE CP/PCP REQUEST
CCA12 IX6 X3-X0 DECREMENT OLD CP/PCP PP ACTIVITY
SA6 A3+
BX3 X6
* CALL *1CP* TO COMPLETE FUNCTION PROCESSING.
CCA13 SA1 B3 GET *ACPP* PARAMETERS
BX6 X3 SAVE *STSW* FOR DUAL CPU CACHE CHECK
SB4 X5 SET *1CP* PLD ENTRY ADDRESS
SX5 B0 SET *CCAM* RESPONSE
MX0 24
TX7 B6+FLSW+1,-NCME SET FL CONTROL WORD ADDRESS
LX0 12
LX7 24
BX1 X0*X1 SET CP/PCP NUMBER AND CP ADDRESS
SB3 CCA14 SET *EFP* RETURN ADDRESS
BX7 X7+X1
EQ EFP EXECUTE *1CP*
* CHECK JOB ACTIVITY AT OLD CONTROL POINT.
CCA14 SB7 B5+ SET OLD CP TO CHECK
TX0 B5,-SCA
SB3 PPRX SET *JAV* RETURN ADDRESS
TNO /DCP/CCA,DCPC IF DUAL CPU CACHE MACHINE
NG X0,JAV IF OLD JOB NOT SYSTEM CP OR PCP
EQ PPRX EXIT
* RESTORE ENTRY CONDITIONS FOR CHANGE REJECTED ON STORAGE
* MOVE.
CCA15 SA3 B6+STSW RESET PP ACTIVITY
SA5 A5 GET OUTPUT REGISTER
SX1 B5 RECONSTRUCT ORIGINAL *ACPP*
SX6 B5
LX1 24
BX6 X6+X1
LX1 24-7
BX6 X1+X6
SA6 B3 UPDATE *ACPP*
IX6 X3-X0 DECREMENT PP ACTIVITY
UX7,B0 X5 CLEAR FUNCTION CODE
SA6 A3 UPDATE PP ACTIVITY
EQ CSM CHECK STORAGE MOVE AND EXIT
* REJECT REQUEST WHEN *1CP* NOT ACCESSIBLE.
CCA16 SB5 PPRX SET EXIT ADDRESS
EQ REJ REJECT REQUEST
CDAM SPACE 4,15
*** CDAM - CHECK MASS STORAGE DEVICE ACTIVITY.
*
* ENTRY
*T, OR 12/ CDAM,12/ EQ,36/
* EQ MASS STORAGE EST ORDINAL.
*
* EXIT
*T, OR 12/ 0,12/ ST,36/ 0
* ST DEVICE ACTIVITY COUNT.
*
* HANG CONDITIONS -
*
* EST ORDINAL DOES NOT POINT TO MASS STORAGE DEVICE.
PPR CDAM,,,FEX
AX1 36 POSITION EST ORDINAL
CX2 X1,EST
TA2 X2+EQDE,EST
PL X2,HNG IF NOT MASS STORAGE
MX0 -12
BX6 -X0*X2 EXTRACT MST POINTER
SX7 B1
LX6 3 SET MST ADDRESS
SA4 X6+DILL
LX4 -24 EXTRACT *PUT* ORDINAL
BX4 -X0*X4
ZR X4,CDA1 IF NOT BUFFERED DEVICE
SA3 /BUFIO/MSTA
LX4 PUTLS FORM *PUT* INDEX
BX3 X6-X3
ZR X3,CDA2 IF BUFFER ASSIGNMENT IN PROGRESS
TA1 X4+UNCT,PUT
LX1 -12 CHECK CURRENT *CB* PRESENT
BX7 -X0*X1
ZR X7,PPR1 IF DEVICE INACTIVE
CDA1 SA2 A4-B1
ERRNZ DALL+1-DILL CODE DEPENDS ON VALUE
MX0 -6
LX2 -48 EXTRACT REQUEST COUNT
BX7 -X0*X2
CDA2 LX7 36 POSITION RESPONSE
SA7 A5
EQ PPRX RETURN
CEFM SPACE 4,30
*** CEFM - CHANGE ERROR FLAG.
*
* ENTRY
*T, OR 12/ CEFM,1/E,11/ EF,12/ EJTO,24/ JSN
* E IF SET, CHANGE ERROR FLAG ON JOB SPECIFIED BY
* *EJTO* FIELD.
* IF CLEAR, CHANGE ERROR FLAG ON CONTROL POINT TO
* WHICH PP IS ASSIGNED.
* EF ERROR FLAG TO SET.
* EJTO EJT ORDINAL OF JOB IF *E* SET.
* JSN JOB SEQUENCE NAME IF *E* OPTION SELECTED.
*
* EXIT
*T, OR 12/ 0,3/ JS,9/ ST,36/
* JS = CPU STATUS FROM *STSW* IF ERROR FLAG SET ON JOB AT
* CONTROL POINT.
* ST = 0, IF ERROR FLAG SET ON SPECIFIED JOB.
* ST = 1, IF JOB IS MOVING (FOR *E* = 1 OPTION ONLY).
* ST = 3, IF JOB SPECIFIED BY *EJTO* NOT FOUND.
*
* HANG CONDITIONS -
*
* 1. IF JOB AT CONTROL POINT WITH EJT ORDINAL = 0.
* 2. *EJTO* = 0 FOR *E* = 1 OPTION.
* 3. *EJTO* EXCEEDS MAXIMUM EJT ORDINAL FOR *E* = 1 OPTION.
* 4. CLEARING ZERO ERROR FLAG.
* 5. CHANGING ERROR FLAG AT SYSTEM CP OR UNOCCUPIED USER CP.
* 6. SETTING AN INCORRECT ERROR FLAG.
PPR CEFM
SB6 CEF1 SET RETURN ADDRESS FOR *CPE*
LX1 59-47
SB5 -B1 FLAG EJT ORDINAL NOT SPECIFIED
TPL X1,(/DCP/CPE,DCP,/MONITOR/CEF1) IF SET ERROR AT CP
MX1 24
LX5 -24
MX0 -12
BX2 X1*X5 SPECIFIED JSN
BX6 -X0*X5 SPECIFIED EJT ORDINAL
LX5 24
TX3 X6,-EJTM
ZR X6,HNG IF NO EJT ORDINAL SPECIFIED
PL X3,HNG IF EJT ORDINAL EXCEEDS MAXIMUM
CX3 X6,EJT CONVERT EJT ORDINAL TO OFFSET
TA3 X3+JSNE,EJT GET EJT ENTRY
MX7 2
LX7 36-58 STATUS = JOB NOT FOUND
SX4 7600B
BX1 X1*X3 JOB SEQUENCE NUMBER IN EJT
LX3 7-1
BX2 X2-X1
BX0 X4*X3
NZ X2,PPR1 IF JOB NOT FOUND
SA3 A3+SCHE-JSNE GET JOB CONTROL POINT NUMBER
SA2 A3+PRFE-SCHE GET EJT ERROR FLAG
BX6 X3
SX0 X0-EXJS*200B
LX6 59-34
SB5 B7+ INDICATE SETTING ERROR IN EJT
SA6 CEFC SAVE JOB TERMINATION STATUS
NZ X0,CEF2 IF JOB NOT AT CONTROL POINT
LX3 -12+7
BX3 X4*X3
SB5 -2 INDICATE EJT ORDINAL SPECIFIED ON CALL
SB7 X3 SET CONTROL POINT ADDRESS
TNO /DCP/CPE,DCP IF DUAL-CPU IN USE
* SET ERROR AT CONTROL POINT.
* ENTERED HERE FOR *ABTM* AND *CHGM*.
* (B6) = 0 IF *ABTM*.
* (B6) .LT. 0 IF *CHGM*.
* (B5) .GT. 0 IF *ABTM* OR *CHGM*.
CEF1 SA4 B7+TFSW GET EJT ORDINAL
MX0 12
BX4 X0*X4
ZR X4,HNG IF SYSTEM CP OR UNOCCUPIED USER CP
LX4 12
CX3 X4,EJT CONVERT EJT ORDINAL TO OFFSET
TA3 X3+SCHE,EJT
MX6 -2
LX3 0-33
BX3 -X6*X3
SX6 B0
ERRNZ NOTM CODE ASSUMES *NOTM* = 0
IX6 X6-X3
SA6 CEFC
SA2 B7+STSW
SB5 B5+B1
PL B5,CEF2 IF NOT EJT ORDINAL CALL
SX7 B1 STATUS = JOB MOVING
SA3 CMCL CHECK FOR STORAGE MOVE
LX7 36
BX3 X0*X3
LX3 12+7 CPA ADDRESS FOR STORAGE MOVE
SB4 X3
EQ B4,B7,PPR1 IF JOB MOVING
CEF2 MX0 11 GET ERROR FLAG
LX0 46-59
BX7 X0*X5 NEW ERROR FLAG
BX3 X0*X2 OLD ERROR FLAG
IX6 X7+X3
ZR X6,HNG IF CLEARING ZERO ERROR FLAG
BX1 -X0*X2
ZR X7,CEF4 IF CLEARING ERROR FLAG
LX2 59-56
IX0 X7-X3 NEW - OLD
AX3 36
BX6 X7
LX6 -36
SB4 X3-RSET
SX3 X6-MXET
PL X3,HNG IF ILLEGAL ERROR FLAG
ZR B4,CEF6 IF AN UNPROCESSED *RSET* PRESENT
GT B5,CEF4 IF *ABTM* OR SETTING ERROR IN EJT
SA3 CEFB
SB4 X6
LX3 B4,X3
SA4 CEFC
BX4 X3*X4
NG X4,CEF6 IF ODET/RRET/OKET AT END OF JOB
PL X2,CEF4 IF NO SUB-CP ACTIVE
BX6 X6-X6
AX7 36
SA6 A5 CLEAR OUTPUT REGISTER
EQ SEF SET ERROR FLAG
CEF4 NG X0,CEF5 IF OLD ERROR FLAG .GT. NEW ERROR FLAG
BX6 X1+X7 STORE NEW ERROR FLAG
SA6 A2
CEF5 ZR X7,PPR1 IF ERROR FLAG CLEARED
SX5 B1+
LX5 36-0 SET TO CLEAR ROLLOUT CPU STATUS
NE B5,B7,.DCPM IF NOT SETTING ERROR FLAG IN EJT ENTRY
CEF6 BX7 X7-X7 CLEAR OUTPUT REGISTER
SA7 A5
EQ PPRX EXIT
CEFB BSS 0 MASK FOR ODET / RRET / OKET
POS 60-ODET
VFD 1/1
POS 60-RRET
VFD 1/1
POS 60-OKET
VFD 1/1
VFD $/0
CEFC CON 0 JOB TERMINATION STATUS
CHGM SPACE 4,10
*** CHGM - CONDITIONALLY HANG PP.
*
* ENTRY
*T, OR 12/ CHGM,12/PA,12/EF,12/,12/
* PA ADDRESS IN PP WHERE ERROR CONDITION DETECTED.
* EF ERROR FLAG TO SET AT CONTROL POINT OR ZERO.
*
* EXIT IF SYSTEM DEBUG MODE ENABLED
*T, OR 12/ HLTM,48/
*
* EXIT IF SYSTEM DEBUG MODE DISABLED
*T, OR 60/0
PPR CHGM,,,DCP
SA5 A5 GET CURRENT OUTPUT REGISTER
MX6 1 SET MOVABLE FUNCTION FLAG
LX6 56-59
BX5 X5+X6
BX6 X5
SA6 A5
SB3 CHG1
EQ ACB ASSIGN COMMUNICATIONS BUFFER
CHG1 ZR X1,CHG9 IF NO BUFFER ASSIGNED
MX0 -12
LX5 24 GET PP PROGRAM ADDRESS
BX6 -X0*X5
LX6 36
SA4 B7+TFSW GET EJT ORDINAL
LX4 12
BX2 -X0*X4
ZR X2,CHG2 IF NO EJT ENTRY
CX4 X2,EJT CONVERT EJT ORDINAL TO OFFSET
TA3 X4+JSNE,EJT GET EJT ENTRY
MX2 24
BX2 X2*X3 JOB SEQUENCE NUMBER IN EJT
LX2 36
BX6 X6+X2
TA3 X4+SCLE,EJT GET JOB SERVICE CLASS
MX2 6
BX3 X2*X3
LX3 6
BX6 X3+X6
CHG2 LX5 -24+12 GET FUNCTION BEING PERFORMED
MX7 -7
BX7 -X7*X5
SX7 X7-CHGM
ZR X7,CHG3 IF *CHGM* FUNCTION
SX7 3 FLAG PP HUNG
LX7 48
IX6 X6+X7
LX6 -36 SET PP PROGRAM ADDRESS TO ZERO
BX6 X0*X6
LX6 36
EQ CHG4 SET UP *1MA* CALL
CHG3 SX7 B1
LX5 -12+36
BX2 -X0*X5
LX7 48
ZR X2,CHG4 IF NO ERROR FLAG
SX2 X2-SWET
IX6 X6+X7 FLAG JOB BEING ABORTED
NZ X2,CHG4 IF NOT *SWET* ERROR, ASSUME JOB STEP ABORT
IX6 X6+X7 SET JOB ABORTED
* SET UP *1MA* REQUEST.
CHG4 SA6 X1+B1 STORE PARAMETER IN COMMUNICATIONS BUFFER
SA4 A5-B1 GET PP INPUT REGISTER
BX6 X4
SA2 A4+B1 GET PP OUTPUT REGISTER
BX7 X2
SA6 A6+B1 STORE IN COMMUNICATIONS BUFFER
SA7 A6+B1
SA4 A2+B1 GET FIRST WORD OF MESSAGE BUFFER
BX6 X4
SA6 A7+B1 STORE IN COMMUNICATIONS BUFFER
SB4 -B1 SET NO QUEUEING
SX6 B7 SAVE CONTROL POINT ADDRESS
SA6 CHGB
TB7 0,SCA USE SYSTEM CONTROL POINT
SA2 CHGA GET *1MA* REQUEST
BX6 X2
IX6 X6+X1 ADD IN COMMUNICATIONS BUFFER ADDRESS
SX1 0
SB3 CHG5
EQ APQ ASSIGN *1MA* TO SYSTEM CONTROL POINT
CHG5 NZ X1,CHG6 IF *1MA* ASSIGNED
SB3 CHG6
SX2 PQ QUEUE THE REQUEST
EQ AQR ASSIGN QUEUE REQUEST
CHG6 SA1 CHGB RESTORE CONTROL POINT ADDRESS
SA5 A5
MX7 -7
LX5 12
BX7 -X7*X5 GET FUNCTION BEING PERFORMED
SX7 X7-CHGM
SB7 X1+
SB5 PPRX
NZ X7,HNG2 IF NOT *CHGM*
SA4 SSTL CHECK FOR SYSTEM DEBUG ENABLED
SB5 CHG7
LX4 59-13
SA5 A5
PL X4,HNG2 IF SYSTEM DEBUG MODE ENABLED
* PROCESS AS *HLTM* WHEN SYSTEM DEBUG IS DISABLED.
SA7 A5+ CLEAR OUTPUT REGISTER
EQ CHG8 CHECK FOR ERROR FLAG PRESENT
CHG7 SX1 HLTM CHANGE CHGM FUNCTION TO HLTM FUNCTION
LX1 48
MX2 12
BX7 -X2*X5
BX7 X7+X1
SA7 A5+
CHG8 LX5 0-24
MX2 -11
TB4 B7,-SCA
ZR B4,PPRX IF SYSTEM CONTROL POINT DO NOT SET ERROR
BX5 -X2*X5 GET ERROR FLAG
LX5 36 POSITION ERROR FLAG
ZR X5,PPRX IF NO ERROR FLAG PRESENT, RETURN
SB6 -1 FLAG DO NOT STORE OUTPUT REGISTER
EQ CEF1 CHANGE ERROR FLAG
CHG9 MX1 1 HAVE PP REISSUE FUNCTION
BX7 X5+X1
EQ PPR1 RETURN STORING OUTPUT REGISTER
CHGA VFD 18/0L1MA,6/,12/7,24/
CHGB CON 0 SAVE OF CONTROL POINT ADDRESS
CKSM SPACE 4
*** CKSM - CHECKSUM SPECIFIED AREA.
* THE SPECIFIED AREA IS CHECKSUMMED, AND THE RESULT IS COMPARED
* TO THE FIRST WORD OF THE MESSAGE BUFFER. THE RESULT IS
* ALSO RETURNED TO THE CALLER.
*
* ENTRY
*T, OR 12/ CKSM,7/,17/ WC,7/,17/ FWA
* WC WORD COUNT.
* FWA RELATIVE FIRST WORD ADDRESS.
*
*T, MB 60/ CHECKSUM COMPARE VALUE
*
* EXIT
*T, OR 12/ 0,36/ 0,12/ STATUS
* STATUS = 0, IF CHECKSUM COMPARE SUCCESSFUL.
*
*T, MB 60/ CALCULATED CHECKSUM
PPR CKSM,PMR,CKS,FEX
CPRM SPACE 4,20
*** CPRM - ASSIGN, LOAD, OR IDLE A CPP.
*
* ENTRY
*T, OR 12/ CPRM,12/ FFFF,12/ 0,12/ 0,12 PPPP
* FFFF SUBFUNCTION.
* 0 = ASSIGN CPP.
* 1 = ASSIGN CPP AND LOAD PP RESIDENT.
* 2 = RETURN CPP.
* PPPP CIO BARREL FROM WHICH CPP IS TO BE ASSIGNED
* (SUBFUNCTION 0 AND 1).
* 2 = BARREL 0 (CPP 0 THRU 4).
* 3 = BARREL 1 (CPP 5 THRU 11).
* (SUBFUNCTION 2).
* NUMBER OF CPP TO RETURN.
*
*T, MB 60/ IR
* IR INPUT REGISTER FOR CPP BEING ASSIGNED
* (SUBFUNCTION 0 AND 1).
* NOT USED FOR SUBFUNCTION 2.
*
*T, PW 60/ PW
* PW THIS WORD WILL BE PLACED INTO MB OF THE
* ASSIGNED CPP (SUBFUNCTION 0 AND 1).
* NOT USED FOR SUBFUNCTION 2.
*
* EXIT
*T, OR 12/,12/ ST,12/ RC,12/,12/
* ST STATUS (SUBFUNCTION 0 AND 1).
* ADDRESS OF THE ASSIGNED CPP INPUT REGISTER.
* ZERO IF CPP NOT ASSIGNED, RC FIELD INDICATES REASON.
* STATUS (SUBFUNCTION 2).
* ZERO INDICATES CPP DROPPED, RC FIELD NOT VALID.
* ONE INDICATES ERROR IN REQUEST, RC INDICATES REASON.
* RC RESPONSE CODE.
* 0 = CPP ASSIGNED.
* 1 = CPP NOT ASSIGNED (SUBFUNCTION 2 ONLY).
* 2 = CPP NOT PRESENT.
* 3 = CPP NOT AVAILABLE.
* 4 = INCORRECT CPP NUMBER.
* 5 = INCORRECT CIO BARREL NUMBER.
* 6 = MAXIMUM NUMBER (NPPCP) OF PP-S ALREADY ASSIGNED.
* 7 = IF PERIPHERAL LIBRARY LOCKED (SUBFUNCTION 2 ONLY).
* 10 = PP PROGRAM NOT FOUND (SUBFUNCTION 2 ONLY).
PPR CPRM
TNO /CPP/CPR,CPP IF CPP-S ARE DEFINED
SX7 10002B SET ERROR CODE ST=1, RC=2
AX1 36+1
NZ X1,CPRM1 IF SUBFUNCTION 2
SX7 B1+B1
CPRM1 LX7 24-0
EQ /MONITOR/MTRC STORE (OR) AND EXIT MONITOR MODE
CSTM SPACE 4
*** CSTM - CLEAR STORAGE.
* NOTE - CSTM CLEARS STORAGE FROM LWA TO FWA.
*
* ENTRY
*T, OR 12/ CSTM,3/ 0,1/S,1/E,1/R,18/ WC,24/ FWA
* WC WORD COUNT OF AREA TO BE CLEARED.
* FWA FIRST WORD ADDRESS OF AREA TO BE CLEARED.
* S = 1, IF REQUEST IS SPECIAL FOR *RSTM* FROM *MTR*.
* 0, IF REQUEST IS NORMAL MONITOR FUNCTION.
* E = 0, IF FWA IS A CM ADDRESS.
* = 1, IF FWA IS A USER ECS ADDRESS.
* R = 0, IF FWA IS AN ABSOLUTE ADDRESS.
* = 1, IF FWA IS A CP RELATIVE ADDRESS.
* IF WC IS ZERO FOR A CM REQUEST, AREAS TO BE CLEARED ARE
* SPECIFIED BY A LIST IN THE MESSAGE BUFFER.
* LIST IS TERMINATED BY A ZERO WORD.
* LIST FORMAT NOT APPLICABLE FOR ECS REQUEST.
*
* FORMAT OF LIST ENTRY-
*T, MB 18/0,18/ WC,24/ FWA
*
* IF S=1, THE REQUEST IS CLEAR STORAGE TO BE RELEASED BY
* THE JOB. THE FWA AND WORD COUNT IS TO BE DERIVED FROM
* THE *RSTM* REQUEST IN MB+5. UPON COMPLETION, THE *RSTM*
* REQUEST (PLUS THE COMPLETION FLAG) IS TO BE RESTORED
* IN THE CALLER-S OUTPUT REGISTER SO IT MAY BE COMPLETED.
*
* NOTE - WHEN CLEARING ECS, WC IS THE NUMBER OF *UEBS*
* WORD BLOCKS TO CLEAR,AND FWA IS
* THE ACTUAL ADDRESS/*UEBS*.
*
* EXIT
*T, OR 60/ 0
PPR CSTM,,CST
AX2 24
LX1 59-44
SB7 X2+ SET CP/PCP ADDRESS
TNG X1,(/MCE/CST,MCE,/MONITOR/HNG) IF SPECIAL *RSTM* CALL
LX1 44-59
* REENTRY FROM */MCE/CST* AFTER SETUP OF *CSTM* PARAMETERS.
CST0 BX4 X1 CHECK FOR VALID OPTIONS
MX0 -12
SB4 X1 SET FWA
LX4 59-43
TNG X4,(/MONITOR/PMR,UEC,/MONITOR/HNG) IF ECS REQUEST
BX6 X5
LX5 -24
SB3 X5+ (B3) = 0 IF LIST PRESENT
LX5 24
LX4 59-42-59+43
PL X4,CST3 IF NOT RELATIVE ADDRESSES
* CONVERT TO ABSOLUTE ADDRESSES.
SA2 B7+FLSW READ RA AND FL
BX1 X5
BX3 -X0*X2
LX2 12
BX6 -X0*X2 EXTRACT NFL
MX0 -RMSK
AX2 RSHF+12
BX2 -X0*X2 RA/100
LX6 6 NFL
SB5 X6
MX0 36
LX3 6
SB4 X3 (B4) = FL
LX2 6 (X2) = RA
NZ B3,CST2 IF NOT LIST OPTION
SA1 A5+B1 READ FIRST LIST WORD
CST2 SX7 X1
IX6 X7+X2 CONVERT RELATIVE ADDRESS TO ABSOLUTE
NG X6,HNG IF BAD FWA
BX3 X0*X1
BX6 X3+X6
LX1 -24
PL X7,CST2.1 IF NOT NFL ADDRESS
SB6 X7
SB6 -B6
GT B6,B5,HNG IF BEYOND NFL
SB6 X1
SB6 B6+X7
LE B6,B0,CST2.2 IF WITHIN NFL
EQ HNG HANG PP
CST2.1 SB6 X1
SB6 B6+X7
GT B6,B4,HNG IF BEYOND FL
CST2.2 LX1 24
NZ B3,CST3 IF NOT LIST OPTION
SA6 A1 STORE ABSOLUTE ADDRESS
SA1 A1+1
NZ X1,CST2 IF MORE WORDS IN LIST
CST3 ZR B3,PMR IF LIST OPTION
AX1 24
BX5 X6
SB4 X1-100B-1
SB5 X1-1
PL B4,PMR IF TOO MANY WORDS FOR MONITOR MODE
NG B5,HNG IF ILLEGAL WORD COUNT
MX2 -24 CLEAR STORAGE
SX1 X1+
BX2 -X2*X5 FWA
SB3 PPR1 *CSM* RETURN ADDRESS
TJP (/MCE/CST5,MCE,/CME/CSM,CME,/0CME/CSM) CLEAR
DCPM SPACE 4,25
*** DCPM - DROP CPU.
* IT SHOULD BE NOTED THAT THE EXCHANGE PACKAGE IS NOT
* IN THE USER,S CP AREA AT THE TIME THE OUTPUT
* REGISTER IS CLEARED. TO MAKE SURE THE PACKAGE IS
* AVAILABLE ANOTHER *CPUMTR* MONITOR FUNCTION SHOULD
* BE DONE SUCH AS *RCLM*.
*
* ENTRY
*T, OR 12/ DCPM,11/0,1/F,12/,12/,12/
* F = 1, TO CLEAR CPU STATUS PRESENT AT ROLLOUT.
*
* EXIT
*T, OR 12/ 0,3/ ST,9/0,36/
* ST CPU STATUS FROM STSW.
*
* NOTE WHEN ENTERING THE *DCPM* PROCESSOR FROM ANOTHER
* ROUTINE THE FOLLOWING ENTRY CONDITIONS MUST BE SET -
*
* (B6) .LT. 0 IF NOT TO WRITE OUTPUT REGISTER.
* (B6) = 0 IF TO RETURN *DPPM* FUNCTION IN OUTPUT
* REGISTER.
* (B6) = 1 IF TO CLEAR OUTPUT REGISTER.
* (B6) .GT. 1 IF TO RETURN CURRENT CPU STATUS IN OUTPUT
* REGISTER.
* (X5 BIT 36) = 1 IF TO CLEAR CPU STATUS AT ROLLOUT.
PPR DCPM,,,DCP
* SET FUNCTION RETURN. ENTERED HERE FROM *CEFM*, *ROCM*, AND
* *RPNM*.
SA1 B7+STSW READ STATUS
MX0 3
BX7 X0*X1 CPU STATUS
GT B6,B1,DCP1 IF TO RETURN CPU STATUS
SX7 B0+
EQ B6,B1,DCP1 IF TO CLEAR OUTPUT REGISTER
SX7 DPPM+4000B RETURN *DPPM* FUNCTION
DCP1 NG B6,DCP2 IF NOT TO WRITE OUTPUT REGISTER
TX2 10B,SP
SX3 A5
MX4 -18
BX3 -X4*X3
IX2 X3-X2
PL X2,DCP2 IF NOT PP REQUEST
LX7 -12
SA7 A5 WRITE OUTPUT REGISTER
* CLEAR CPU STATUS.
DCP2 SX3 B1
LX5 25-36 POSITION CLEAR ROLLOUT CPU STATUS FLAG
LX3 25-0
BX7 -X0*X1 CLEAR CPU STATUS
BX3 X3*X5
BX7 -X3*X7 CLEAR ROLLOUT CPU STATUS IF SELECTED
BX1 X0*X1 CPU STATUS ON ENTRY
SA7 A1 WRITE STATUS
* CHECK ENTRY CPU STATUS.
ZR X1,DCP4 IF NULL STATUS ON ENTRY
PL X1,DCP6 IF ACTIVE JOB
LX1 1
NG X1,DCP4 IF *I* STATUS
LX0 X1,B1
SA3 B7+CWQW READ *CWQW*
SX6 1
LX6 46-0
BX6 X3+X6 SET NO DRIVER RECALL
NG X0,DCP2.1 IF *X* STATUS
MX7 58
MX4 42
LX7 48-0
BX6 X4*X6 CLEAR *WQ* LINKAGE
SX1 WQRL
BX6 X7*X6 CLEAR CPU SLICE ACTIVE AND RECALL FLAGS
SA6 A3 UPDATE *CWQW*
TJP (/DCP/DCP,DCP,/MONITOR/DCP3)
DCP2.1 SA6 A3 UPDATE *CWQW* FLAGS
SA3 B7+CRCW READ *CRCW*
SX7 B0
SX1 RQRL
SA7 A3 CLEAR *RQ* PARAMETERS
MX4 -12
* REMOVE *WQ* OR *RQ* ENTRY IF *W* OR *X* STATUS.
DCP3 ZR X1,DCP4 IF END OF QUEUE
SA2 X1 FIND LINK TO DELETED ENTRY
SX6 A3
BX1 -X4*X2
BX0 X6-X1
NZ X0,DCP3 IF NOT FOUND
BX2 X4*X2 REPLACE LINK TO DELETED ENTRY
BX3 -X4*X3
BX6 X2+X3
SA6 A2
DCP4 TX2 A5-1,-FP
SB3 PPRX *JAV* RETURN ADDRESS
ZR X2,PPRX IF CALL BY *MTR*
EQ JAV ADVANCE JOB
* JOB ACTIVE IN THIS CPU - START NEW JOB.
DCP6 TX1 A5-1,-FP
SB3 BNJ1 *JAV* RETURN ADDRESS
ZR X1,BNJ1 IF CALL BY *MTR*
EQ JAV CHECK FOR JOB ADVANCE
DEQM SPACE 4,20
*** DEQM - DROP EQUIPMENT.
*
* RELEASE EQUIPMENT FROM JOB ASSIGNMENT.
*
* ENTRY
*T, OR 12/ DEQM,12/ EQ,12/,12/ EJT,12/
* EQ EST ORDINAL (IF 4000B + EQ, EJT IS PRESENT).
* EJT EJT ORDINAL TO RELEASE EQUIPMENT FROM.
*
* EXIT
*T, OR 60/ 0
* COUNTER IN *EACW* DECREMENTED, IF EQUIPMENT WAS
* ASSIGNED TO CALLER AND IS RELEASED.
*
* HANG CONDITIONS -
*
* ILLEGAL EST ORDINAL.
* EQUIPMENT NOT ASSIGNED TO CALLER (OR ALTERNATE EJT ORDINAL).
PPR DEQM
LX5 24
MX2 -9
BX2 -X2*X5 EST ORDINAL
MX0 -12
TX3 X2,-ESTL
PL X3,HNG IF INVALID EST ORDINAL
CX3 X2,EST CONVERT EST ORDINAL TO OFFSET
LX5 59-47-24
TA3 X3+EQAE,EST READ EQUIPMENT ASSIGNMENT WORD
LX1 36
TX4 B7,-SCA
BX6 X0*X3
NG X5,DEQ1 IF ALTERNATE EJT SPECIFIED
MX1 12
ZR X4,DEQ1 IF PP AT SYSTEM CONTROL POINT
SA1 B7+TFSW GET JOB EJT
DEQ1 LX1 12
BX4 X1-X3 CHECK EQUIPMENT ASSIGNMENT
SX2 B1
BX4 -X0*X4
NZ X4,HNG IF EQUIPMENT ASSIGNED ELSEWHERE
LX2 48
SA6 A3
NG X5,PPR1 IF RELEASE FROM ALTERNATE EJT
SA4 B7+EACW
IX6 X4-X2 DECREMENT EQUIPMENT ASSIGNED COUNT
SA6 A4
EQ PPR1 RETURN
DFMM SPACE 4,30
*** DFMM - PROCESS DAYFILE MESSAGE.
*
* ENTRY
*T, OR 12/ DFMM,12/ BC,6/,6/ MO,24/
*T, MB 42/, 18/ADDR
* BC BYTE COUNT OF MESSAGE. THE PP WILL BE HUNG IF
* *BC* TRANSLATES TO WORD COUNT GREATER THAN 5 FOR
* CODED MESSAGES AND 6 FOR BINARY MESSAGES.
* FOR *BMCN* THE (BC) MUST TRANSLATE TO A WORD COUNT
* THAT IS .LE. 60.
* BC = 0, SET BUFFER IN *1DD* INPUT REGISTER BUSY.
* MO MESSAGE OPTION (SEE *PPCOM* FOR LIST OF OPTIONS).
* BIT 5 OF *MO* SET INDICATES THAT THE CALLING PP
* CANNOT DUMP THE DAYFILE BUFFER.
* BIT 4 OF *MO* SET WILL CAUSE THE DAYFILE BUFFER TO
* BE INTERLOCKED FOR PROCESSING BY THE CALLING PP.
*
* MESSAGE BUFFER CONTAINS UP TO AND INCLUDING 5 WORDS
* OF MESSAGE DATA (6 WORDS FOR BINARY MESSAGE).
* ADDR FOR *BMCN* THIS IS THE CENTRAL MEMORY ADDRESS WHERE
* THE *BML* ENTRY IS LOCATED.
*
* INTERMEDIATE PROCESSING (USED ON BUFFER BUSY AND FULL)
*T, OR 12/ CDBM,12/ BC,6/,6/ MO,12/ CP+SF,12/ DI
* CP = CONTROL POINT ADDRESS.
* SF = 0 TO WAIT FOR 1 SECTOR OF SPACE IN DAYFILE BUFFER.
* = 1 TO WAIT UNTIL PP DUMP BUFFER NOT BUSY.
* DI DAYFILE INDEX.
* 0 = JOB DAYFILE.
* 1 = MASTER DAYFILE.
* 2 = ACCOUNT DAYFILE.
* 3 = ERRLOG DAYFILE.
* 4 = MAINLOG DAYFILE.
*
* EXIT
*T, OR 12/ 0,12/ BC,6/,6/ MO,12/ 0,12/ 0
* MESSAGE COMPLETELY PROCESSED.
*
*T, OR 12/ 0,36/,12/ BUSY
* BUSY = 0, IF BUFFER WAS SET BUSY ON BC = 0 REQUEST.
*
*T, OR 12/ 0,12/ BC,6/,6/ MO,12/ LN,12/ DI
* PP MUST CALL *1DD* TO DUMP THE BUFFER.
* LN LENGTH OF MASS STORAGE ERROR PROCESSOR AND DIRECT
* CELLS TO BE SAVED.
* DI DAYFILE INDEX.
* 0 = JOB DAYFILE.
* 1 = MASTER DAYFILE.
* 2 = ACCOUNT DAYFILE.
* 3 = ERRLOG DAYFILE.
* 4 = MAINLOG DAYFILE.
*
* NOTE THAT IF AN ALTERNATE PSEUDO-CONTROL POINT ASSIGNMENT IS
* PRESENT, THE ONLY OPTIONS THAT CAN BE SPECIFIED ARE THOSE
* THAT ISSUE MESSAGES TO THE SYSTEM DAYFILES WITH THE JSN
* SUPPLIED BY THE CALLER.
*
* HANG CONDITIONS -
*
* MESSAGE LENGTH TOO LONG.
* OPTION SELECTED IS NOT FOR SYSTEM DAYFILE WITH CALLER
* SUPPLIED JSN AND ALTERNATE PSEUDO-CONTROL POINT
* ASSIGNMENT IS PRESENT.
PPR DFMM
AX2 24
SB7 X2 SET CP/PCP ADDRESS
SA2 DSSL CHECK FOR DEADSTART IN PROGRESS
SX6 A5+ SET DUMMY RA+1
LX2 59-2
PL X2,DFM0 IF NOT DEADSTART IN PROGRESS
TB7 SCA ISSUE MESSAGE AT SYSTEM CONTROL POINT
DFM0 SA6 RA1
MX0 36 CLEAR BYTES 3 AND 4 OF OUTPUT REGISTER
BX7 X0*X5
AX1 36 POSITION BYTE COUNT
SA7 A5+
BX5 X7
ZR X1,DFM30 IF SET BUFFER BUSY REQUEST
SB4 4
SX7 16384/5+1
SX4 X1+B4 BC+4
IX6 X7*X4 (BC+4)*16384/5
SX3 B4+B1 X3 = 5
AX6 14 ((BC+4)*(16384/5))/16384 = (BC+4)/5
SX2 X1-27
SB6 X6 SET WORD COUNT
SX4 A5+ SET MESSAGE ADDRESS - 1
MX0 -4
LX5 -24
TX2 B7-200B,-SCA
BX0 -X0*X5 CHECK MESSAGE DESTINATION
NG X2,DFM0.3 IF NOT ALTERNATE PCP ASSIGNMENT
SX2 106014B CALLER SUPPLIED JSN OPTIONS MASK
SB3 X0+59-17
LX2 B3
PL X2,HNG IF NOT CALLER SUPPLIED JSN OPTION
DFM0.3 SB3 X0-BMLN/10000B
LX5 -36
NG B3,DFM1 IF NOT MAINTENANCE LOG (*BMLN* OR *BMCN*)
SX2 X1-31
ZR B3,DFM1 IF *BMLN* FUNCTION
SA2 A5+1
SX4 X2-1 SET MESSAGE ADDRESS - 1
SX2 X1-60*5+1
DFM1 PL X2,HNG IF MESSAGE TOO LONG
IX7 X6*X3 (BC+4)/5*5
IX0 X1-X7 BC-((BC+4)/5*5) = -REMAINDER
SX2 0 SET *DFMM* FLAG
SA1 X4+B6
NZ B6,DFM2 IF WORD COUNT .NE. 0
BX0 -X3 SET MASK INDEX FOR NULL MESSAGE
SX6 B1 SET WORD COUNT
* BEGIN PROCESSING COMMON TO *DFMM* AND *MSG* REQUESTS.
*
* ENTRY (X0) = MASK INDEX FOR LAST WORD OF MESSAGE.
* (X1) = LAST WORD OF MESSAGE.
* (X2) = 1/X,59/0 WHERE X = 1 IF *MSG* CALL.
* (X4) = MESSAGE ADDRESS - 1.
* (X5) = REQUEST.
* (X6) = WORD COUNT OF MESSAGE.
DFM2 BX7 X2+X4 COMBINE CALL FLAG WITH MESSAGE ADDRESS
SA6 DMWC SAVE WORD COUNT
SA7 A6+B1
ERRNZ DMWC+1-DMMA MEMORY REFERENCE OUT OF ORDER
SA3 X0+TMSK+5 FETCH EOM MASK
MX4 -4
BX7 X3*X1
SX0 X6+B1 ADJUST WORD COUNT TO INCLUDE TIME
LX5 -24 EXTRACT MESSAGE OPTION
SA7 A7+B1
ERRNZ DMMA+1-DMLW MEMORY REFERENCE OUT OF ORDER
BX3 -X4*X5
MX1 12
SB4 X3-TMPOL
PL B4,DFM8 IF ILLEGAL OPTION (DEFAULT TO 0)
SA2 X3+TMPO
DFM3 BX6 X2 SAVE ENTRY FROM MESSAGE OPTION TABLE
LX5 24 SHIFT REQUEST WORD BACK
SA6 DMPA
NG X2,DFM7 IF MESSAGE GOING TO JOB DAYFILE
MX3 -6
AX6 36
BX6 -X3*X6
SB6 X6 SET DAYFILE INDEX
LX3 X6,B1 CALCULATE ABSOLUTE ADDRESS
IX3 X3+X6
TX6 X3-3,DP
SA6 DDBA
ERX3 X6 READ BUFFER POINTERS
DFM4 SX7 B1
IX4 X6+X7
IX7 X7+X4
ERX4 X4
ERX1 X7 CHECK BUFFER STATUS
SB4 X4 OUT POINTER
LX1 59-1
AX4 24 BUFFER LENGTH
SB3 X3 IN POINTER
ZR X4,DFM16 IF ZERO LENGTH BUFFER
SA7 DFPA
PL X1,DFM23 IF BUFFER INTERLOCKED
SB5 B4-B3 OUT - IN
LX3 59-35
NG X3,DFM24 IF MESSAGES WERE LOST
LX3 35-59
AX3 36 FIRST POINTER
SB4 X0+B1 WORD COUNT INCLUDING JOB SEQUENCE NUMBER
GT B5,B0,DFM5 IF OUT .GT. IN
SB5 X4+B5
DFM5 TGE B4,B5,(/CPP/DDB,CPP,/MONITOR/DDB) IF NOT ENOUGH SPACE
BX7 X5
LX7 59-28
PL X7,DFM6 IF NO REQUEST TO SET BUFFER INTERLOCK
SX7 B1
LX1 1
BX7 -X7*X1
PL X1,DFM23 IF DUMP IN PROGRESS
LX7 1
SA1 DFPA
EWX7 X1 SET BUFFER INTERLOCK
DFM6 SB4 X2 PREPROCESSOR ADDRESS
SA1 TIML
SA2 DMMA
BX6 X1 TIME VALUE FOR MESSAGE
SB5 X4 SET LIMIT
BX4 X6
JP B4 EXIT TO PREPROCESSOR
DFM7 TX4 B7,-SCA
ZR X4,DFM8 IF SYSTEM CONTROL POINT
SA3 B7+FLSW
MX1 12
BX4 X1*X3
ZR X4,DFM16 IF NO NFL
MX1 -RMSK
LX1 12
BX4 -X1*X3 EXTRACT RA
AX4 6
SX6 DAPN
IX6 X4-X6
ERX3 X6
SA6 DDBA
SX7 DAYN
IX4 X4-X7 SET ABSOLUTE BUFFER ADDRESS
SX3 X3
LX4 36
BX3 X4+X3 COMBINE BUFFER ADDRESS WITH IN POINTER
SB6 B0+ SET DAYFILE INDEX FOR JOB DAYFILE
EQ DFM4 READ REMAINING BUFFER POINTERS
DFM8 SA5 A5 REREAD REQUEST
LX1 -24
SA2 TMPO CHANGE MESSAGE OPTION TO 0
BX7 -X1*X5
SA7 A5+
LX5 -24
EQ DFM3 PROCESS NEW MESSAGE OPTION
* ENTRY FOR MESSAGE WITH JOB SEQUENCE NUMBER IN MESSAGE.
*
*T MB 24/ JSN, 12/ NONZERO, 12/ NONZERO, 6/ , 6/ SC
* JSN JOB SEQUENCE NUMBER.
* SC JOB SERVICE CLASS.
DFM9 SX1 B1
IX0 X0-X1
IX2 X1+X2 INCREMENT ADDRESS
ERX1 X2 READ NEXT WORD
MX7 -6
BX7 -X7*X1 JOB SERVICE CLASS
EQ DFM12 STORE TIME
* ENTRY FOR MESSAGE TO BINARY MAINTENANCE LOG.
DFM10 SX7 X0+1 SET WORD COUNT FOR MESSAGE HEADER
SA1 PDTL
MX6 -36
BX1 -X6*X1
LX7 48
BX6 X7+X1
* ENTRY FOR MESSAGE WITH JOB SEQUENCE NUMBER FROM
* CONTROL POINT AREA.
DFM11 SA1 B7+TFSW GET EJT ORDINAL
MX4 -12
LX1 12
BX4 -X4*X1
CX1 X4,EJT CONVERT EJT ORDINAL TO OFFSET
TA1 X1+SCLE,EJT GET JOB SERVICE CLASS
BX7 X1
AX7 54
SA1 A1+JSNE-SCLE GET JOB SEQUENCE NUMBER
NZ X4,DFM12 IF EJT ORDINAL PRESENT
+ TX4 B7,-SCA
NZ X4,* IF NOT SYSTEM CONTROL POINT
* STORE TIME AND TRANSLATE JOB SERVICE CLASS.
DFM12 SX4 B3 STORE TIME IN DAYFILE BUFFER
IX4 X3+X4
EWX6 X4
MX4 24
SB3 B3+B1 ADVANCE IN
BX4 X4*X1
SA1 TJSC+X7 GET JOB SERVICE CLASS TRANSLATION
LX4 -12
BX4 X4+X1
NE B3,B5,DFM13 IF IN .NE. LIMIT
SB3 0 SET IN = FIRST
* ENTRY FOR MESSAGE WITH NO JOB SEQUENCE NUMBER.
DFM13 ZR X0,DFM14 IF MESSAGE TRANSFER COMPLETE
BX6 X4
SX1 B3
IX1 X3+X1
SX0 X0-1 DECREMENT MESSAGE WORD COUNT
EWX6 X1
SB3 B3+B1 ADVANCE IN
SX4 B1
IX2 X2+X4
ERX4 X2 READ NEXT WORD OF MESSAGE
NE B3,B5,DFM13 IF IN .NE. LIMIT
SB3 0 SET IN = FIRST
EQ DFM13 CONTINUE TRANSFER
DFM14 SA2 DMLW STORE EOM
BX7 X2
SA2 DDBA REREAD IN POINTER
ERX3 X2
AX3 18 CLEAR IN POINTER
SX0 B3 SET IN
LX3 18
SB3 DFM16 SET RETURN FROM *DDD*
BX6 X3+X0
EWX7 X1
EWX6 X2
SX6 B1
IX6 X6+X2
ERX1 X6
BX4 X1
SX1 X1
AX4 24
IX7 X0-X1 IN - OUT
PL X7,DFM15 IF IN .GT. OUT
IX7 X7+X4 ADD BUFFER LENGTH
DFM15 BX6 X4-X7 CHECK BUFFER THRESHOLD
AX6 6
ZR X6,DDD IF BUFFER FULL
DFM16 TX4 B7,-SCA CHECK JOB ISSUING MESSAGE
SA2 DMPA
LX2 -18 POSITION POST PROCESSOR ADDRESS
BX7 X7-X7
SB4 X2
LX2 18+1
ZR X4,DFM20 IF JOB AT SYSTEM CONTROL POINT
SA1 DMMA GET *MSG* CALL FLAG
JP B4 EXIT TO POST PROCESSOR
DFM17 SX3 10B
EQ DFM19 CHANGE MESSAGE REQUEST
DFM18 SB0 0
SX3 CPON/10000B
* CHANGE MESSAGE REQUEST.
DFM19 LX5 -24 POSITION OUTPUT REGISTER
MX7 55
SA4 DMWC READ WORD COUNT
BX5 X7*X5 REMOVE CURRENT REQUEST
SA2 X3+TMPO READ MESSAGE OPTION TABLE
BX7 X5+X3 INSERT NEW MESSAGE OPTION
MX1 12
LX7 24
SX0 X4+B1
BX5 X5+X3
SA1 RA1
EWX7 X1 REWRITE RA+1
SA7 MSGB UPDATE POSSIBLE *X* STATUS COPY
EQ DFM3 PROCESS NEXT DAYFILE
DFM20 PL X2,PPR1 IF MESSAGE NOT SPECIFIED FOR *MS1W*
SB0 0
* STORE MESSAGE AT *MS1W* OF CONTROL POINT.
DFM21 MX0 -12
SA3 DMMA RETRIEVE MESSAGE ADDRESS
LX5 59-23
PL X3,DFM22 IF *DFMM* CALL
SX1 1
NG X5,DFM22 IF CONTROL STATEMENT MESSAGE
SA4 B7+ACLW CHECK USER MESSAGE LIMIT
LX1 36
BX2 X4
LX4 12
AX4 48
ZR X4,DFM22 IF UNLIMITED USER
IX7 X2-X1 DECREMENT USER MESSAGE LIMIT
SA7 A4
DFM22 BX4 -X3 KEEP MSG INDICATOR
SX5 B1
IX1 X3+X5 NEXT WORD
ERX2 X1 READ NEXT WORD
BX6 X2
JP TMSG+1 MOVE MESSAGE VIA *MSG* PROCESSOR
* IF CALLING PP CAN DUMP THE BUFFER, REJECT THE REQUEST VIA
* *CDBM*. OTHERWISE, SIMULATE A COMPLETED REQUEST.
DFM23 SA2 DMMA CHECK REQUEST
SX4 B6
MX1 1
NG X2,DFM23.1 IF *MSG* CALL
BX5 X4+X5
JP DDB2 CHANGE REQUEST TO *CDBM*
* RESTORE ORIGINAL REQUEST AND SET *X* STATUS.
DFM23.1 SA1 MSGB GET ORIGINAL REQUEST
BX6 X1
SA1 RA1 GET RA+1 ADDRESS
EWX6 X1
EQ SXS SET *X* STATUS
* DAYFILE MESSAGES WERE RECENTLY DISCARDED BECAUSE THE
* CALLING PP COULD NOT DUMP THE DAYFILE BUFFER. THIS ROUTINE
* PUTS AN INFORMATIVE MESSAGE IN THE BUFFER, IF ROOM EXISTS.
DFM24 SX0 X0+DFMAL+1 TEST IF ROOM FOR ERROR MESSAGE
LX3 35-59 REPOSITION BUFFER POINTERS
SB5 B4-B3
AX3 36 FIRST POINTER
SB4 X0+B1
GT B5,B0,DFM25 IF OUT .GT. IN
SB5 X4+B5
DFM25 TGE B4,B5,(/CPP/DDB,CPP,/MONITOR/DDB) IF NOT ENOUGH SPACE
MX6 1
SB5 X4 SET LIMIT
BX6 -X6*X1
LX1 59-0-59+1
PL X1,DFM23 IF DUMP IN PROGRESS
LX6 1-59
SA1 DFPA SET BUFFER INTERLOCK
EWX6 X1
SA4 DFMA JOB SEQUENCE NAME FOR CODED DAYFILES
SX4 X2-DFM10 CHECK FOR MESSAGE TO MAINLOG
SA1 TIML TIME LINE FOR CODED DAYFILES
NZ X4,DFM25.1 IF NOT MAINLOG
SX4 4 SET MAINLOG WORD COUNT
SA1 PDTL
LX4 48
BX1 X1+X4
SA4 DFMB JOB SEQUENCE NAME FOR BINARY DAYFILE
DFM25.1 SX4 B3+ STORE TIME
IX4 X3+X4
BX6 X1
EWX6 X4
SA4 A4 REREAD JOB SEQUENCE NAME
SB3 B3+B1 ADVANCE IN
NE B3,B5,DFM26 IF IN .NE. LIMIT
SB3 B0
DFM26 SX1 B3 WRITE JOB SEQUENCE NUMBER TO BUFFER
BX6 X4
IX1 X1+X3
EWX6 X1
SA1 A4+B1 ERROR MESSAGE
SB3 B3+B1 ADVANCE IN
NE B3,B5,DFM27 IF IN .NE. LIMIT
SB3 0
DFM27 SX4 B3 WRITE ERROR MESSAGE TO BUFFER
BX6 X1
IX4 X3+X4
SA1 A1+B1 GET NEXT WORD OF ERROR MESSAGE
SB3 B3+B1 ADVANCE IN
NE B3,B5,DFM27.1 IF IN .NE. LIMIT
SB3 B0
DFM27.1 EWX6 X4 WRITE FIRST WORD OF MESSAGE TO BUFFER
SX4 B3
BX6 X1
IX4 X3+X4
SA1 DDBA
EWX6 X4 WRITE SECOND WORD OF MESSAGE
SX0 B1
IX0 X0+X1
ERX1 X1 CLEAR *MESSAGE LOST* FLAG
MX6 1
LX1 59-35
BX6 -X6*X1
SB3 B3+B1 ADVANCE IN
NE B3,B5,DFM28 IF IN .NE. LIMIT
SB3 B0
DFM28 LX6 35-59
SA1 DDBA REREAD *IN* POINTER
SX4 B3 SET *IN*
AX6 12
LX6 12
BX6 X4+X6
ERX4 X0 RESTORE *LIMIT*
EWX6 X1
SX1 B1
IX0 X0+X1
AX4 24
ERX1 X0
MX6 1
LX1 59-1
LX5 59-28
BX6 X1+X6
NG X5,DFM29 IF REQUEST TO SET BUFFER INTERLOCK
LX6 1-59
EWX6 X0 CLEAR BUFFER INTERLOCK
DFM29 SA1 DMWC RESTORE WORD COUNT
LX5 28-59
SX0 X1+B1 ADJUST WORD COUNT TO INCLUDE TIME
EQ DFM6 PROCESS MESSAGE
* SET BUFFER BUSY FOR *1DD* DIRECT CALL.
DFM30 SA1 A5-B1 READ INPUT REGISTER
SX3 X1
NZ X3,DFM31 IF NOT JOB DAYFILE
SA3 B7+FLSW GET RA
MX2 -RMSK
AX3 RSHF
BX2 -X2*X3 EXTRACT RA/100B
LX2 6
SX3 DAPN-2 SET INTERLOCK ADDRESS
IX3 X2-X3
EQ DFM32 CONTINUE PROCESSING
DFM31 LX2 X3,B1 SET INTERLOCK ADDRESS
IX2 X2+X3
TX3 X2-3+2,DP
DFM32 ERX1 X3
MX4 -3
BX6 -X4*X1
BX5 X6-X4
SX4 5
SX7 B1+
NZ X5,PPR1 IF BUFFER ALREADY DUMPED
BX6 -X4*X1 SET BUFFER BUSY, CLEAR *1DD* CALLED FLAG
BX7 X7-X7
EWX6 X3
EQ PPR1 CLEAR OUTPUT REGISTER
DFMA DATA 10H**ERROR**. JOB SEQUENCE NUMBER
DATA C*MESSAGES LOST.* ERROR MESSAGE
DFMAL EQU *-DFMA ERROR MESSAGE LENGTH - 1
DFMB DATA 10H SYS S. SYSTEM JOB JAME
VFD 12/DM0406,12/DS0114,36/0
BSSZ DFMB+DFMAL-* FILL REST OF MESSAGE
DMWC CON 0 MESSAGE WORD COUNT
DMMA CON 0 MESSAGE ADDRESS
DMLW CON 0 LAST WORD OF MESSAGE
DMPA CON 0 PROCESSOR ADDRESS
DFPA CON 0 BUFFER POINTER ADDRESS
TMPO SPACE 4,10
** TMPO - TABLE OF MESSAGE PROCESSING OPTIONS.
*
* INDEXED BY MESSAGE OPTION (MO).
*
*T, 6/ DF,12/,6/ DI,18/ PP,18/ PA
* DF = DESTINATION FLAGS.
* BITS 0 - 3 = RESERVED.
* BIT 4 = *MS1W* FLAG FOR SYSTEM CONTROL POINT.
* BIT 5 = JOB DAYFILE FLAG.
* DI = DAYFILE INDEX.
* 0 = JOB DAYFILE.
* 1 = MASTER DAYFILE.
* 2 = ACCOUNT DAYFILE.
* 3 = ERRLOG DAYFILE.
* 4 = MAINLOG DAYFILE.
* PP = POST PROCESSOR ADDRESS.
* PA = PROCESSOR ADDRESS.
TMPO BSS 0
VFD 6/20B (00B) - *MS1W* AND JOB/SYSTEM DAYFILES
VFD 12/
VFD 6/MSDY+1
VFD 18/DFM18,18/DFM11
VFD 6/0 NMSN - JOB/SYSTEM DAYFILES, NOT *MS1W*
VFD 12/
VFD 6/MSDY+1
VFD 18/DFM17,18/DFM11
VFD 6/0 JNMN - SYSTEM DAYFILE WITH JSN IN MESSAGE
VFD 12/
VFD 6/MSDY+1
VFD 18/MTRP,18/DFM9
VFD 6/60B CPON - *MS1W* AND JOB DAYFILE
VFD 12/
VFD 6/0
VFD 18/DFM21,18/DFM13
VFD 6/0 ERLN - ERRLOG
VFD 12/
VFD 6/ELDY+1
VFD 18/MTRP,18/DFM11
VFD 6/0 ACFN - ACCOUNT FILE
VFD 12/
VFD 6/ACDY+1
VFD 18/MTRP,18/DFM11
VFD 6/0 EJNN - ERRLOG WITH JSN IN MESSAGE
VFD 12/
VFD 6/ELDY+1
VFD 18/MTRP,18/DFM9
VFD 6/0 AJNN - ACCOUNT FILE WITH JSN IN MESSAGE
VFD 12/
VFD 6/ACDY+1
VFD 18/MTRP,18/DFM9
VFD 6/40B (10B) - USED INTERNALLY BY *CPUMTR*
VFD 12/
VFD 6/0
VFD 18/MTRP,18/DFM13
VFD 6/40B CDON - JOB DAYFILE
VFD 12/
VFD 6/0
VFD 18/MTRP,18/DFM13
VFD 6/0 MDON - SYSTEM DAYFILE ONLY
VFD 12/
VFD 6/MSDY+1
VFD 18/MTRP,18/DFM11
VFD 6/0 I1FN - USER OPTION 1
VFD 12/
VFD 6/MSDY+1
VFD 18/DFM18,18/DFM11
VFD 6/0 I2FN - USER OPTION 2
VFD 12/
VFD 6/MSDY+1
VFD 18/DFM18,18/DFM11
VFD 6/0 I3FN - USER OPTION 3
VFD 12/
VFD 6/MSDY+1
VFD 18/DFM18,18/DFM11
VFD 6/0 BMLN - BINARY MAINTENANCE LOG
VFD 12/
VFD 6/MLDY+1
VFD 18/MTRP,18/DFM10
VFD 6/0 BMCN - BML WITH MESSAGE IN ALT. BUFFER
VFD 12/
VFD 6/MLDY+1
VFD 18/MTRP,18/DFM10
TMPOL EQU *-TMPO
TMSK SPACE 4,10
** TMSK - TABLE OF MESSAGE TERMINATION MASKS.
TMSK BSS 0
VFD 60/0
VFD 12/-0,48/0
VFD 24/-0,36/0
VFD 36/-0,24/0
VFD 48/-0,12/0
VFD 60/-0
TJSC SPACE 4,10
** TJSC - TABLE OF JOB SERVICE CLASS TRANSLATIONS.
*
* ONE WORD ENTRIES INDEXED BY JOB SERVICE CLASS.
*T 12/ SPACES, 24/ 0, 6/ SC, 6/ ., 12/ SPACES
* SC SERVICE CLASS CHARACTER TRANSLATION.
TJSC BSS 0
.1 SET 1
.A DUP MXSC
.2 MICRO .1,1,$"NMDS"$
.B IFC NE,$".2"$$
VFD 12/2H ,24/0,6/1H".2",18/3H.
.1 SET .1+1
.B ELSE
STOPDUP
.B ENDIF
.A ENDD
DDB SPACE 4,15
** DDB - DUMP DAYFILE BUFFER.
*
* ENTRY (DDBA) = FIRST / IN POINTER ADDRESS.
* (DFPA) = BUFFER POINTER INTERLOCK ADDRESS.
* (B6) = DAYFILE INDEX.
* (B7) = CONTROL POINT ADDRESS.
* (X5) = REQUEST.
*
* USES A - 1, 2, 4, 6, 7.
* B - 3.
* X - ALL.
*
* CALLS APQ, DDD, PPRX, PPR1, SXS.
DDB SA4 DDBA CHECK BUFFER STATUS
SX2 B1+B1
IX6 X4+X2
ERX1 X6
SA2 DMMA CHECK REQUEST
LX1 59-0
SX4 B6
NG X2,DDB4 IF *MSG* REQUEST
BX5 X4+X5
PL X1,DDB2 IF DUMP IN PROGRESS
SA2 DFPP
MX0 -59
LX2 59-0
LX4 X2,B1
PL X2,DDB1 IF PP DUMP BUFFER IN USE
BX2 X5 CHECK DUMP FLAG
LX2 59-29
BX7 X7-X7
NG X2,DDB2 IF PP CANNOT DUMP BUFFER
BX7 -X0*X1
LX7 1
MX0 48
EWX7 X6 SET DAYFILE BUFFER BUSY
BX6 X0*X4
SX4 65B PARAMETER FOR PP *1DD* CALL
MX0 -48
SX3 A5-B1 PP INPUT REGISTER ADDRESS
BX5 -X0*X5
LX4 12
BX6 X6+X3 SET PP DUMP BUFFER BUSY
IX7 X5+X4
SA6 A2
SA7 A5 HAVE CALLING PP DUMP DAYFILE
JP PPRX EXIT
DDB1 BX7 X5 STORE PP OUTPUT REGISTER
SB3 DDB2 SET RETURN FROM *DDD*
SA7 A5
JP DDD ATTEMPT TO DUMP DAYFILE DIRECT
* CHANGE *DFMM* REQUEST TO *CDBM* IF THE CALLING PP CAN DUMP
* THE DAYFILE BUFFER. OTHERWISE, DISCARD REMAINING PORTION
* OF MESSAGE, SET A *MESSAGE LOST* FLAG, AND SIMULATE A
* COMPLETED REQUEST.
DDB2 SX0 B7
NZ X1,DDB3 IF DUMP INITIATED
SX0 X0+B1
DDB3 LX0 12 POSITION *CDBM* SUBFUNCTION
SX2 CDBM&DFMM
LX5 59-29
NG X5,DDB3.1 IF CALLING PP CANNOT DUMP BUFFER
LX5 29-59
BX5 X5+X0
LX2 48 CHANGE PP REQUEST TO *CDBM*
BX7 X5-X2
JP PPR1 EXIT TO STORE PP OUTPUT REGISTER
DDB3.1 SA1 DDBA READ BUFFER POINTERS
MX7 1
ERX2 X1
LX7 35-59
BX7 X2+X7 SET *MESSAGE LOST* FLAG
EWX7 X1 REWRITE POINTERS
BX7 X7-X7 CLEAR OUTPUT REGISTER
EQ PPR1 EXIT
* NOT ENOUGH SPACE IN BUFFER ON *MSG* REQUEST.
DDB4 PL X1,DDB8 IF DUMP IN PROGRESS
SB3 DDB7 SET RETURN ADDRESS IF ACTIVE
SA2 DD
LX1 59-2-59+0
SX0 B7 SAVE (B7)
BX5 X6
BX6 X2+X4
NG X1,DDB8 IF *1DD* ALREADY CALLED
ZR B6,DDB5 IF JOB DAYFILE
TB7 0,SCA SET SYSTEM CONTROL POINT
DDB5 SB6 DDB6
EQ CAL CHECK ACTIVITY LIMIT
DDB6 MX2 1 SET *1DD* CALLED
BX7 X1+X2
LX7 2-59
EWX7 X5 STORE BUFFER INTERLOCK WORD
SB4 B0+ SET FOR DIRECTORY SEARCH
SB3 DDB7
EQ APQ ASSIGN PP REQUEST
DDB7 SB7 X0 RESTORE (B7)
* RESTORE ORIGINAL REQUEST AND SET *X* STATUS.
DDB8 SA1 MSGB GET ORIGINAL REQUEST
BX6 X1
SA1 RA1 GET RA+1 ADDRESS
EWX6 X1
EQ SXS SET JOB ON RECALL
DDBA CON 0 FIRST / IN POINTER ADDRESS
DDD SPACE 4,15
** DDD - DUMP DAYFILE DIRECT.
*
* ENTRY (DDBA) = FIRST / IN POINTER ADDRESS.
* (A5) = REQUEST ADDRESS.
* (B3) = RETURN ADDRESS.
* (B6) = DAYFILE INDEX.
* (B7) = CONTROL POINT ADDRESS.
*
* EXIT (X1) = 0 IF DUMP NOT INITIATED.
*
* USES A - 1, 2, 4, 6, 7.
* B - 3.
* X - ALL.
*
* CALLS APQ.
DDD SA4 DDBA CHECK BUFFER STATUS
SX2 B1+B1
MX6 -3
IX0 X4+X2
ERX3 X0
BX6 -X6*X3
BX1 X1-X1
SX6 X6-3
NZ X6,RB3 IF BUFFER BUSY, INTERLOCKED, OR *1DD* CALL
SX4 B6
SA1 B7+TFSW SET EJT ORDINAL
MX2 -12
LX1 12
BX2 -X2*X1
CX1 X2,EJT CONVERT EJT ORDINAL TO OFFSET
NZ X2,DDD1 IF EJT ORDINAL PRESENT
+ TX2 B7,-SCA
NZ X2,* IF NOT SYSTEM CONTROL POINT
DDD1 TA2 X1+JSNE,EJT GET JOB ADVANCE FLAG
BX1 X1-X1
LX2 59-6
SX7 B3 SAVE EXIT ADDRESS
SX6 B6 SAVE (B6)
NG X2,RB3 IF JOB ADVANCE SET
SA2 B7+STSW
LX7 18
LX2 59-24
BX6 X6+X7
SX7 B7 SAVE (B7)
TNG X2,(/CPP/DDD,CPP,/MONITOR/RB3) IF ROLLOUT REQUESTED
DDD2 SA2 DD BUILD *1DD* CALL
LX6 18
BX6 X6+X7
ZR B6,DDD3 IF JOB DAYFILE
TB7 0,SCA SET SYSTEM CONTROL POINT
DDD3 SX7 4 SET *1DD* CALLED FLAG
SB3 DDD6
SA6 T1 SAVE PARAMETERS
SB6 DDD4
BX6 X2+X4
BX7 X3+X7
EQ CAL CHECK ACTIVITY LIMIT
DDD4 EWX7 X0 STORE BUFFER STATUS WORD
SB4 B0 SET TO SEARCH DIRECTORY
SB3 DDD5 SET RETURN ADDRESS
EQ APQ ASSIGN PP
DDD5 SX1 B1+ SET DUMP INITIATED
DDD6 SA4 T1 RESTORE PARAMETERS
SA5 A5 RESTORE REQUEST
SB7 X4 RESTORE (B7)
AX4 18
SA2 DMMA
SB6 X4 RESTORE (B6)
AX4 18
SB3 X4 RESTORE (B3)
PL X2,RB3 IF *DFM* CALL
SA2 RA1
ERX5 X2
JP B3 RETURN
DLKM SPACE 4
*** DLKM - DELINK TRACKS.
*
* ENTRY
*T, OR 12/ DLKM,12/ EQ,12/ FT,12/ NT,12/ LT
* EQ EST ORDINAL
* IF BIT 11 OF EQUIPMENT FIELD IS SET THEN SET THE
* CHECKPOINT BIT FOR THIS EQUIPMENT UPON COMPLETION OF
* THE REQUEST.
* FT TRACK ONTO WHICH NT IS LINKED.
* NT TRACK TO BE LINKED TO FT.
* LT LAST TRACK IN CHAIN TO DROP.
*
* BIT 11 OF FT MUST BE CLEAR
* ALL TRACKS FROM FT (NOT INCLUDING FT) TO LT ARE RELEASED.
* NT IS LINKED TO FT.
*
* EXIT.
*T, OR 36/ 0,24/ PRU
* PRU = NUMBER OF PRUS RETURNED TO THE SYSTEM.
*
* NOTE - IF THE REQUEST IS FOR AN INDEPENDENT SHARED DEVICE,
* THE MST, TRT, AND DIT ARE READ FROM THE DEVICE TO CM BY *1RU*
* BEFORE THE DLKM IS ISSUED TO CPUMTR.
PPR DLKM,(/ISD/CHR,ISD,/LSPMMF/CME,LSPMMF,/MONITOR/PMR),DLK
,,FEX
DPPM SPACE 4,15
*** DPPM - DROP PP.
*
* ENTRY
*T, OR 12/ DPPM,12/,12/,12/,12/
*
* EXIT.
*T, IR 60/ 0
*T, OR 60/ 0
*
* HANG CONDITIONS -
*
* PP COUNT FIELD OF *STSW* IS ZERO UPON ENTRY.
* ALTERNATE CONTROL POINT OR PSEUDO-CONTROL POINT ASSIGNMENT
* PRESENT.
PPR DPPM,,,FEX
* ENTRY FROM *JACM*, *RECM*, *RPPM*, *UADM*, AND *CPCX*.
TX2 A5-1,-FP
LX2 PPXES-PPCES
MX0 -5
TA2 X2+ACPP,FPX GET CP ASSIGNMENT
TB5 A5-1,-SP
GT B5,B0,* IF RA+1 ADDRESS (*CPCX* CALL)
SA1 X2+STSW GET CP STATUS
SB7 X2 SET CP ADDRESS
SX7 B1
LX2 59-23
LX0 48-0
NG X2,HNG IF ALTERNATE CP/PCP ASSIGNMENT
LX7 48-0
BX3 -X0*X1 PP COUNT
IX6 X1-X7 DECREMENT PP COUNT
ZR X3,HNG IF PP COUNT ALREADY ZERO
SA6 A1
TNO /MONITOR/DPP1,NDCPC IF NOT DUAL CPU CACHE MACHINE
SB4 DPP1 SET *CPA* RETURN ADDRESS
TJP (/DCP/CPA,DCPC,/MONITOR/HNG) CHECK CPU SELECTION
DPP1 SB3 /BUFIO/PCQ SET EXIT TO PROCESS PSEUDO-PP REQUESTS
TZR B5,(/MONITOR/DPP4,BUFIO,/MONITOR/HNG) IF PSEUDO-PP
TX3 A5-1,-FPC
NG X3,DPP2 IF NOT CPP
TJP (/CPP/DPP,CPP,/MONITOR/HNG) DROP CPP
* RETURN PP TO POOL.
DPP2 SA3 PPAL
TX4 A5-1,-FP
MX7 1
AX4 PPCES PP INDEX
SB3 PPQ SET EXIT TO PROCESS PP REQUESTS
SX2 X4-12B
SX1 35B
LX7 -12
NG X2,DPP3 IF NOT SECOND BANK
IX4 X1-X4
DPP3 SB6 X4+
AX7 B6,X7
BX7 X7+X3 SET PP AVAILABLE BIT
SX4 B1 INCREMENT FREE PP COUNT
IX7 X7+X4
SA7 A3+
* CLEAR PP ASSIGNMENT.
DPP4 SA4 A5-B1 SAVE AUTO RECALL BIT
SX7 B0
SA7 A2 CLEAR *ACPP*
SA7 A5-B1 CLEAR INPUT REGISTER
SA7 A5+B1 CLEAR MB
SA7 A5 CLEAR OUTPUT REGISTER
SX7 1S4
SA7 IP SET INCREASED PRIORITY FOR JOB
* CHECK JOB STATUS.
AX6 48
LX4 59-41
ZR X6,JAV IF NO CPU/PP ACTIVITY
PL X4,RB3 IF NOT AUTO RECALL FOR THIS PP
AX6 9
SX6 X6+B1
SB6 B7+ SET EXCHANGE PACKAGE ADDRESS
NZ X6,RB3 IF NOT *I* STATUS
EQ RCC RECALL CPU
DTKM SPACE 4
*** DTKM - DROP TRACKS.
*
* ENTRY
*T, OR 12/ DTKM,12/ EQ,12/ TK,12/ SC,12/
* EQ EST ORDINAL
* IF BIT 11 OF EQUIPMENT FIELD IS SET THEN SET THE
* CHECKPOINT BIT FOR THIS EQUIPMENT UPON COMPLETION OF
* THE REQUEST.
* IF BIT 10 OF THE EQUIPMENT FIELD IS SET THE CALLER IS
* RELEASING A TRACK CHAIN LOCAL TO ANOTHER MACHINE.
* TK FIRST TRACK
* SC SECTOR NUMBER
*
* IF BIT 11 OF TK = 1, ALL TRACKS FROM TK TO END OF CHAIN ARE
* DROPPED.
* IF BIT 11 OF TK = 0, ALL TRACKS AFTER TK ARE DROPPED, AND
* SC IS INSERTED IN TRACK BYTE.
*
* EXIT
*T, OR 36/ 0,24/ PRU
* PRU = NUMBER OF PRUS RETURNED TO THE SYSTEM.
*
* *PP HUNG.* WILL OCCUR FOR THE FOLLOWING CONDITIONS.
* 1) EQUIPMENT NOT MASS STORAGE OR OUT OF EST.
* 2) ECS ADDRESS OF MST SET WHEN NOT MULTI-MAINFRAME MODE.
* 3) IF LAST SECTOR WRITTEN .GE. MAXIMUM SECTOR LIMIT.
* 4) IF ATTEMPTING TO DROP TRACKS LOCAL TO ANOTHER MACHINE.
* THIS IS DETECTED BY THE MRT BIT NOT BEING SET FOR
* THE FIRST TRACK IN THE CHAIN BEING DROPED.
* 5) THE TRACK IS BEYOND THE DEVICE TRACK LIMITS.
*
* NOTE - IF THE REQUEST IS FOR AN INDEPENDENT SHARED DEVICE,
* THE MST, TRT, AND DIT ARE READ FROM THE DEVICE TO CM BY *1RU*
* BEFORE THE DTKM IS ISSUED TO CPUMTR.
PPR DTKM,(/ISD/CHR,ISD,/MONITOR/.DTKM),DTC,FEX
* THIS FUNCTION WILL BE PERFORMED IN MONITOR MODE IF THE
* THE FOLLOWING CONDITIONS ARE MET-
*
* 1) DEVICE IS NOT MMF SHARED.
* 2) *MST* IS NOT INTERLOCKED.
* 3) REQUEST IS RESETTING EOI IN CURRENT EOI TRACK.
LX1 59-35
NG X1,PMR IF DROP ENTIRE CHAIN
MX2 -9
BX6 -X2*X1 EXTRACT EST ORDINAL
CX4 X6,EST
TA4 X4+EQDE,EST READ EST ENTRY
SX7 -7777B
BX4 -X7*X4 MST ADDRESS/10B
LX4 3
SA4 X4+SDGL CHECK SHARED DEVICE STATUS
LX4 -1
MX3 -5
NG X4,PMR IF DEVICE INTERLOCKED
BX3 -X3*X4
AX4 36-1
ZR X4,DTC1 IF NON-SHARED DEVICE
TZR X3,(/LSPMMF/CME1,LSPMMF,/MONITOR/PMR) IF MST NOT READ
DTC1 BX1 X1-X6 CLEAR EST ORDINAL
LX1 35-25
SA4 A4+TRLL-SDGL
SX4 X4 PREVENT CARRY
IX4 X4+X1
SA3 X4 READ TRT WORD
MX7 2 EXTRACT BYTE POSITION
BX1 X7*X1
LX1 2+2 BYTE * 4
LX2 X1,B1 BYTE * 8
IX1 X1+X2
SB4 X1
LX3 X3,B4
NG X3,PMR IF EOI TRACK CHANGING
UX1,B6 X5 SET TO INTERLOCK TRT
SB3 /PROGRAM/DTC1 SET TO UPDATE EOI
SX6 B2+ SAVE (B2)
SB5 PPRX
SA6 T1
EQ /PROGRAM/CTR1
EATM SPACE 4,25
*** EATM - ENTER/ACCESS EVENT TABLE.
*
* ENTRY
*T, OR 12/ EATM,12/ FN,15/,21/ EVENT
* FN EEVS = ENTER EVENT.
* SEIS = SET EVENT TABLE INTERLOCK.
*
*T, OR 12/ EATM,12/ FN,18/,1/0,17/ TINT
* FN UHSS = UPDATE 887 DISK SPIN-UP TIME.
* TINT TIME INTERVAL BEFORE NEXT EVENT ALLOWED.
*
* EXIT
* FN EEVS, UHSS.
*T, OR 12/ 0,12/ ST,36/
* ST 0 IF REQUEST HONORED.
* 1 IF SUBFUNCTION NOT PROCESSED.
*
* FN SEIS.
*T, OR 12/ 0,12/ COUNT,36/
* COUNT COUNT OF EVENTS IN TABLE PRESENTLY.
PPR EATM,,,FEX
TA1 EVT GET EVENT COUNT
MX7 1
BX3 X5 GET SUBFUNCTION
MX0 -12
LX3 24
BX7 X7+X5
BX3 -X0*X3
BX6 -X0*X1 ISOLATE COUNT AND INTERLOCK BIT
SB4 X3-UETMS
LX6 59
PL B4,EAT4 IF UPDATE EVENT TIME REQUEST
NG X6,PPR1 IF INTERLOCK SET, REISSUE REQUEST
NZ X3,EAT2 IF SET INTERLOCK REQUEST
SX3 MEVC MAXIMUM NUMBER OF EVENTS
MX0 -1
IX3 X3-X6
ZR X3,EAT3 IF TABLE FULL
AX4 X6,B1 SET TABLE INDEX
SB4 12 SET SHIFT COUNT
SX6 X6+B1 INCREMENT COUNT
BX3 -X0*X6 SAVE EVEN OR ODD FLAG
MX0 -21
SX7 B0+
ZR X3,EAT1 IF COUNT EVEN
SB4 36 SET SHIFT COUNT
EAT1 BX5 -X0*X5
SX6 B1+B1
LX5 B4
IX6 X1+X6
LX0 B4
SA6 A1 WRITE NEW COUNT
TA2 X4,EVT
BX6 X0*X2
BX6 X5+X6
SA6 A2+ WRITE EVENT TO TABLE
EQ PPR1 CLEAR OR
EAT2 SX3 B1 SET INTERLOCK
IX7 X1+X3
SA7 A1+
EAT3 LX6 36
BX7 X6
EQ PPR1 RETURN EVENT COUNT
EAT4 SA2 TSVT+B4 READ EVENT TIME
SX3 X3-UETME
SA1 RTCL FETCH SECOND COUNTER
MX0 -24
LX1 24
PL X3,HNG IF INVALID SUBFUNCTION
BX1 -X0*X1
IX3 X1-X2
NG X3,EAT5 IF EVENT TIME NOT ELAPSED
SX5 X5
IX6 X1+X5 TIME INTERVAL FOR EVENT
SA6 A2
BX7 X7-X7
EQ PPR1 SET REQUEST COMPLETE
EAT5 SX7 B1 INDICATE TIME NOT ELAPSED
LX7 36
EQ PPR1 REJECT REQUEST
TSVT BSSZ UETME-UETMS SYSTEM EVENT TIMES
ECSM SPACE 4
*** ECSM - ECS TRANSFER.
* 1.) TRANSFER FROM 1 TO 100B WORDS TO/FROM RELATIVE ECS
* USING A USER SPECIFIED CM BUFFER.
* 2.) TRANSFER FROM 1 TO 100B WORDS TO/FROM ECS
* USING A USER SPECIFIED CM BUFFER.
* 3.) TRANSFER ECS ACCORDING TO A LIST OF ADDRESSES.
* 4.) PERFORM FLAG REGISTER OPERATIONS.
*** RRES-WRES - READ/WRITE RELATIVE USER ECS.
*
* ENTRY
*T, OR 12/ ECSM,6/ WC,18/ CMA,3/ SF,21/ ECA
* WC WORD COUNT - 1.
* CMA RELATIVE+400000B OR ABSOLUTE CM ADDRESS OF BUFFER.
* SF *RRES* OR *WRES* SUBFUNCTION CODE.
* ECA RELATIVE USER ECS ADDRESS.
*
* EXIT
*T, OR 12/ 0,12/ ST,12/,24/ ECD
* ST 0 FOR TRANSFER COMPLETE.
* 1 FOR ADDRESS BEYOND RELATIVE FLX.
* 7777 FOR TRANSFER ABORTED.
* ECD ABSOLUTE USER ECS ADDRESS WHERE ERROR OCCURRED
* IF ABORTED.
*** RECS-WECS - READ/WRITE ABSOLUTE SYSTEM ECS.
*
* ENTRY
*T, OR 12/ ECSM,6/ WC,18/ CMA,3/ SF,21/ ECA
* WC NUMBER OF WORDS TO TRANSFER - 1.
* WC = 0 TRANSFER 1 WORD.
* WC = 1 TRANSFER 2 WORDS.
* .
* .
* WC = 77B TRANSFER 100B WORDS.
* CMA RELATIVE+400000B OR ABSOLUTE CM ADDRESS OF BUFFER.
* SF *RECS* OR *WECS* SUBFUNCTION CODE.
* ECA ABSOLUTE SYSTEM ECS ADDRESS OF TRANSFER.
*
* EXIT
*T, OR 12/ 0,12/ ST,12/,24/ ECD
* ST 0 FOR TRANSFER COMPLETE.
* 7777 FOR TRANSFER ABORTED.
* ECD ABSOLUTE SYSTEM ECS ADDRESS WHERE ERROR OCCURRED
* IF ABORTED.
*** SFRS-CFRS - SET/CLEAR FLAG REGISTER BITS.
* SFRM IS THE TEST AND SET FLAG REGISTER FUNCTION.
* CFRM IS THE UNCONDITIONAL CLEAR FLAG REGISTER FUNCTION.
*
* ENTRY
*T, OR 12/ ECSM,6/ ECB,18/,3/ SF,21/
* ECB ECS FLAG REGISTER BIT NUMBER TO SET/CLEAR.
* SF *SFRS* OR *CFRS* SUBFUNCTION CODE.
*
* EXIT
*T, OR 12/ 0,12/ ST,12/,12/,12/
* ST 0 IF FUNCTION COMPLETED.
* ST 7777 IF *SFRS* FUNCTION PERFORMED ON A BIT WHICH WAS
* ALREADY SET.
*** PELS - PROCESS ECS ACCORDING TO LIST.
*
* ENTRY
*T, OR 12/ ECSM,6/ WC,18/ CML,3/ SF,1/W,1/U,19/
* WC NUMBER OF LIST ENTRIES TO PROCESS.
* CML ABSOLUTE CM FWA OF LIST.
* SF *PELS* SUBFUNCTION CODE.
* W SET IF LIST OF ECS WORDS TO BE WRITTEN.
* CLEAR IF LIST OF ECS WORDS TO BE READ.
* U SET IF LIST CONTAINS ABSOLUTE USER ECS ADDRESSES.
* CLEAR IF LIST CONTAINS ABSOLUTE SYSTEM ECS ADDRESSES.
*
*T,CML 12/0,6/ CT,18/0,24/ ECS
* CT WORD COUNT TO TRANSFER (MAXIMUM OF 60D).
* ECS ABSOLUTE SYSTEM OR USER ECS ADDRESS.
*
* THE LIST OF ECS DATA WORDS IMMEDIATELY FOLLOW THE
* LIST OF ECS ADDRESSES. DATA IS WRITTEN FROM THIS
* BUFFER OR READ TO THIS BUFFER.
*
* EXIT
*T, OR 12/ 0,12/ ST,36/ 0
* ST 0 FOR TRANSFER COMPLETE.
* 7777 FOR TRANSFER ABORTED.
*
*T, CML 60/ EF
* EF ERROR FLAGS INDICATING ECS WORDS ON WHICH
* ERROR OCCURRED IF TRANSFER ABORTED.
* BIT 0 SET = ERROR OCCURRED ON ECS WORD
* AT *ECS* + 0.
* ...
* BIT *CT* - 1 SET = ERROR OCCURRED ON ECS WORD
* AT *ECS* + *CT* - 1.
PPR ECSM,(/LSPMMF/ECS,LSPMMF,/ECS/ECS)
ECXM SPACE 4,26
*** ECXM - TRANSFER EM DATA FOR ROLLIN/ROLLOUT.
*
* THIS FUNCTION IS ISSUED BY *MTR* WHEN IT DETECTS AN *RCXM*
* FUNCTION. *1RI* AND *1RO* ISSUE THE *RCXM* FUNCTION DURING
* ROLLIN/ROLLOUT OF EM. TO ACHIEVE OPTIMAL PERFORMANCE, THE
* PP POSTS THE REQUEST IN ITS OUTPUT REGISTER WITHOUT
* EXCHANGING THE CPU. *MTR* DETECTS THE REQUEST, CHANGES IT TO
* AN *ECXM* FUNCTION AND PASSES IT TO *CPUMTR* AS A PROGRAM
* MODE REQUEST.
*
* ENTRY
*T, OR 12/ ECXM,29/ ,1/T,18/ ADDR
* T FUNCTION TYPE -
* 0 READ REQUEST.
* 1 WRITE REQUEST.
* ADDR RESPONSE ADDRESS.
*
*T, MB 12/ WC,12/,12/ CMA,24/ ECA
* WC WORD COUNT.
* CMA RELATIVE CM ADDRESS / 100B FOR START OF TRANSFER.
* ECA RELATIVE EM ADDRESS / 1000B FOR START OF TRANSFER.
*
* EXIT
*T, OR 60/0
*T, ADDR 60/0 TRANSFER COMPLETED WITHOUT ERROR.
*T, ADDR 12/0,12/7777,36/0 ERROR(S) IN TRANSFER.
PPR ECXM,,(/PROGRAM/TEC,/PROGRAM/HNG,UEC)
HNGM SPACE 4,10
*** HNGM - HANG PP.
*
* ENTRY
*T, OR 12/ HNGM,48/
*
* EXIT
*T, OR 12/ HNGM,48/
PPR HNGM,.CHGM
JACM SPACE 4,25
*** JACM - JOB ADVANCEMENT CONTROL.
*
* ENTRY
*T, OR 12/ JACM,12/ FLAGS,36/
*
* FLAGS *JACM* SUBFUNCTION FLAGS (SEE *COMSCPS*).
*
* EXIT
*T, OR 60/ 0
*
* ON EXIT THE JOB ADVANCE AND JOB INTERLOCK FLAGS WILL BE
* CLEARED UNLESS THE *CCPS* OPTION WAS SELECTED AND A *PEET*
* ERROR IS PRESENT AT THE CONTROL POINT. IN THAT CASE, THE
* EJT INTERLOCK FLAGS WILL BE LEFT SET, THE CONTROL POINT
* AREA FIELDS WILL NOT BE CLEARED, THE EJT ENTRY WILL NOT BE
* RELEASED, AND THE *FZSI* SUBSYSTEM ID WILL BE SET.
*
* THE FOLLOWING CONDITIONS WILL HANG THE PP -
* UNDEFINED OPTION SPECIFIED.
* SPECIFIED OPTION COMBINATION NOT VALID.
* NO JOB PRESENT AT CONTROL POINT.
* JOB ADVANCE FLAG OR JOB INTERLOCK FLAG CLEAR ON ENTRY.
PPR JACM
SA3 B7+TFSW GET EJT ORDINAL
SX7 753200B SET VALID OPTIONS MASK
AX1 36
MX0 -12
SB3 X1+59-17 SPECIFIED OPTIONS
SX1 X1-20B
PL X1,HNG IF UNDEFINED OPTION SPECIFIED
LX7 B3
LX3 12
PL X7,HNG IF SPECIFIED OPTIONS NOT VALID
BX4 -X0*X3 EJT ORDINAL
CX3 X4,EJT CONVERT EJT ORDINAL TO OFFSET
ZR X4,HNG IF NO JOB PRESENT
TA3 X3+JSNE,EJT
SX7 101B
BX6 X3-X7 TOGGLE JOB INTERLOCK AND JOB ADVANCE
BX3 X7*X6
LX5 59-36
NZ X3,HNG IF JOB ADVANCE OR INTERLOCK CLEAR ON ENTRY
SA6 A3 UPDATE *JSNE*
NG X5,JAC3 IF RELEASE CP OPTION SPECIFIED
* PROCESS NORMAL JOB ADVANCE OR ROLLIN. THE CPU PRIORITY WILL
* BE SET TO THE NEW SERVICE CLASS PRIORITY IF THE SERVICE CLASS
* PRIORITY CHANGED WHILE THE JOB WAS ADVANCING OR ROLLED OUT.
SA2 B7+CWQW
MX7 -9
UX6,B5 X2 UNPACK CPU PRIORITY AND PARAMETERS
LX2 -27
SX3 B5
BX2 -X7*X2 SERVICE PARAMETERS INDEX
AX3 3 REMOVE FLAGS FROM CPU PRIORITY
TA2 X2+CSJT,JCB
AX2 48 SERVICE CLASS CPU PRIORITY
IX7 X2-X3
ZR X7,JAC1 IF JOB AT SERVICE CLASS PRIORITY
BX7 X6
LX7 59-45
NG X7,JAC1 IF PRIORITY NOT SET FROM SERVICE CLASS
LX2 3
SX7 B1
SB5 X2
LX7 47-0
PX6 B5,X6 SET NEW PRIORITY
BX6 X6+X7 SET INCOMPLETE EXTENDED CPU SLICE
SA6 B7+CWQW UPDATE CPU PRIORITY AND FLAGS
SX6 B0+
SA6 B7+CSAW CLEAR SERVICE CYCLE AND ACCUMULATORS
JAC1 LX5 59-39-59+36
SB6 B7 SET EXCHANGE PACKAGE ADDRESS
SB3 JAC2 SET *RCC* EXIT ADDRESS
NG X5,RCC IF REQUEST CPU OPTION
JAC2 LX5 59-37-59+39
NG X5,.DPPM IF TO DROP PP
SX7 B0
EQ PPR1 EXIT TO CLEAR OUTPUT REGISTER
* CHECK FOR CM/CPU PARITY ERROR AT CONTROL POINT TO BE
* RELEASED.
JAC3 SA1 B7+STSW
SX6 10001B SET *STSW* = 1 PP, SET RECALL STACK INDEX
SX7 B0
LX6 -12
LX1 -36
SA6 A1 UPDATE *STSW*
BX1 -X0*X1 ERROR FLAG
SB4 X1-PEET SET *PEET* ERROR INDICATOR
SX6 B0
NZ B4,JAC4 IF NO *PEET* ERROR SET
SA2 A1 RESET *PEET* ERROR FLAG
LX1 36
BX6 X2+X1
SA6 A1
SX6 100B
SA3 A3 GET *JSNE*
BX6 X3+X6 RESET JOB ADVANCE FLAG
SA6 A3 UPDATE *JSNE*
BX6 X4 SET TO PRESERVE EJT ORDINAL
SX7 FZSI SET *FZSI* ID
LX6 48
LX7 24
* CLEAR CONTROL POINT AREA WORDS.
JAC4 SA6 B7+TFSW CLEAR (IF NO *PEET* ERROR) EJT ORDINAL
SA7 B7+JCIW CLEAR (SET IF *PEET* ERROR) JOB CONTROL
BX7 X7-X7
BX6 -X6+X6
SA7 B7+CSSW CLEAR PROCEDURE FILE DISK ADDRESS
SA7 B7+RFCW CLEAR RESOURCE CONTROL
SA7 B7+EOJW CLEAR END OF JOB PROCESSING FLAGS
SA7 B7+SRUW CLEAR LIMIT FLAGS
ZR B4,JAC5 IF *PEET* ERROR
SA6 B7+PFCW SET FAMILY TO NULL
SA7 B7+MS1W CLEAR MESSAGES
JAC5 SA7 B7+MS2W
SA7 B7+SSCW CLEAR SCP CONNECTIONS
* RESET RECALL AREA LINKS.
SX7 B1
SX1 B1
SB5 B7+RCCW-2
JAC6 SX7 X7+B1
SX6 X7-LREC
SA7 B5+X7
NZ X6,JAC6 IF NOT FINISHED
* CLEAR RECALL STACK.
SB5 B5+RECW-RCCW+2
JAC7 IX7 X7-X1
SA6 B5+X7
PL X7,JAC7 IF NOT FINISHED
LX5 59-38-59+36
PL X5,JAC9 IF NOT CLEARING EJT ENTRY
ZR B4,JAC9 IF *PEET* ERROR
SX1 PEJT SET EJT PROCESSING
LX4 36 SET EJT ORDINAL
LX1 24
BX1 X1+X4
SB6 JAC8 SET *MTRM* RETURN ADDRESS
EQ MTM0 RETURN EJT ENTRY TO POOL
JAC8 SA5 A5+ RESTORE OUTPUT REGISTER
LX5 59-38
JAC9 LX5 59-37-59+38
SX7 B0
PL X5,PPR1 IF NOT DROP PP OPTION
EQ .DPPM DROP PP
LDAM SPACE 4,35
*** LDAM - LOAD ADDRESS FOR MASS STORAGE DRIVERS.
*
* ENTRY
*
*T, OR 12/ LDAM,12/ RW,36/
*T, MB 12/,12/ EQ,12/ LT,12/ LS,12/
*
* RW READ/WRITE FLAG, VALID ONLY FOR ISD DEVICES.
* 0, IF TO ISSUE SEEK ONLY.
* *RDS2*, IF TO ISSUE READ/SEEK.
* *WDS2*, IF TO ISSUE WRITE/SEEK.
* EQ EQUIPMENT.
* LT LOGICAL TRACK.
* LS LOGICAL SECTOR.
*
* EXIT
*
*T, OR 12/ 0,12/ 0,12/ 0,12/ F,12/ RS
*T, MB 60/ UNCHANGED
*T, MB+1 12/ LU,6/ RW,6/ PU,12/ PC,12/ PT,12/ PS
*T, MB+2 60/ 0
*
* F STATUS FLAGS.
* 4 = UNIT SWITCH NEEDED.
* 11 = REQUEST CHANNEL IF NOT RESERVED.
* 7777 - ADDE = ADDRESS ERROR.
* 7777 - NRDE = REDEFINITION REQUESTED.
* RS REMAINING SECTORS TILL *LDAM* REQUIRED.
* LU LOGICAL UNIT.
* RW READ/WRITE FLAG.
* 0, IF TO ISSUE SEEK ONLY (NON-ISD DEVICES).
* 1, IF TO ISSUE WRITE/SEEK.
* 2, IF TO ISSUE READ/SEEK.
* PU PHYSICAL UNIT.
* PC PHYSICAL CYLINDER.
* PT PHYSICAL TRACK.
* PS PHYSICAL SECTOR.
*
*
* HANG CONDITIONS -
*
* ILLEGAL ALGORITHM INDEX.
* ALGORITHM INDEX FOUND IN THE MST FOR THE EQUIPMENT IS OUT
* OF RANGE (.GE. AIMX) OR NO PROCESSOR IS DEFINED FOR THE
* ALGORITHM INDEX.
PPR LDAM,,,FEX
SA3 A5+B1 GET PARAMETER WORD
MX2 -12
LX3 -12
BX5 -X2*X3 LS
LX3 -24
BX0 -X2*X3 EST ORDINAL
LX3 12
CX1 X0,EST CONVERT EST ORDINAL TO OFFSET
TA1 X1+EQDE,EST READ EST ENTRY
BX1 -X2*X1 MST/10B
LX1 3
SA1 X1+DILL READ ALGORITHM INDEX
MX0 -6
BX2 -X0*X1 ALGORITHM INDEX
SX4 X2-AIIE
NG X4,LDA1 IF NOT BUFFERED DEVICE
SX4 X2-AIBD
PL X4,LDA1 IF NOT BUFFERED DEVICE
SA4 A1+DALL-DILL
SX1 3
LX1 36
BX6 X1+X4
SA6 A4+
LDA1 SA4 A1+DDLL-DILL READ UNIT LIST
SB3 X2-AIMX
SA2 TALP+X2 READ PROCESSING PARAMETERS
SB4 B0+
PL B3,HNG IF ILLEGAL ALGORITM INDEX
SB6 X2 SET PROCESSOR ADDRESS
BX1 X4
AX2 48
AX1 48
IX6 X5-X2
SB3 B0 PRESET TO LOGICAL UNIT ZERO
BX7 X7-X7
NG X6,LDA3 IF FIRST UNIT
MX7 -3
PX6 X2
BX1 -X7*X1
PX7 X5
NX6 X6
FX7 X7/X6 LU = LS / SL
UX7,B3 X7
LX7 B3
IX6 X1-X7
SB3 X7+
IX1 X7*X2
SB3 B3+X7
PL X6,LDA2 IF NO ADDRESS ERROR
SB4 7777B-ADDE SET ADDRESS ERROR
LDA2 SB3 B3+X7
SB3 B3+B3 LU * 6
IX5 X5-X1 R(LS/SL)
AX4 B3 POSITION PU
LDA3 TX1 A5-1,-FP
LX1 PPXES-PPCES
BX0 -X0*X4 EXTRACT PHYSICAL UNIT NUMBER
TA1 X1+DRQP,FPX GET CURRENT UNIT NUMBER
AX1 48
BX1 X1-X7
NG X1,LDA4 IF NULL ENTRY
ZR X1,LDA4 IF NO CHANGE IN UNIT
NZ B4,LDA4 IF ADDRESS ERROR
SB4 4
LDA4 LX7 12
SB3 B1+B1
BX6 X7+X0
MX4 -11
IX7 X2-X5 RS
LX6 36
SX1 B3+B1
BX4 -X4*X3
SX0 1
JP B6 EXIT TO PROCESSOR
LAP SPACE 4
** LAP - LOAD ADDRESS PROCESSORS.
*
* THE FUNCTION OF AN ADDRESS PROCESSOR IS TO CONVERT
* LOGICAL DISK ADDRESSES TO THE CORRESPONDING PHYSICAL
* ADDRESSES FOR A PARTICULAR EQUIPMENT TYPE. EACH ADDRESS
* PROCESSOR HAS THE FOLLOWING ENTRY AND EXIT CONDITIONS BUT
* PRODUCES THE PARAMETERS *PC*, *PT* AND *PS* USING AN
* ALGORITHM UNIQUE TO THE EQUIPMENT TYPE.
*
* LT = LOGICAL TRACK.
* LS = LOGICAL SECTOR.
* R(A/B) = REMAINDER OF A/B.
* PC = PHYSICAL CYLINDER.
* PT = PHYSICAL TRACK.
* PS = PHYSICAL SECTOR.
* PU = PHYSICAL UNIT.
* RS = REMAINING SECTOR COUNT UNTIL POSITION REQUIRED.
* SL = SECTOR LIMIT.
* SC = SECTORS FROM BEGINNING OF TRACK TO END OF CYLINDER.
*
* ENTRY (X0) = 1.
* (X1) = 3.
* (X2) = SL (SINGLE UNIT SECTOR LIMIT).
* (X4) = LT - 4000B. (LOGICAL TRACK NUMBER)
* (X5) = R(LS/SL)
* (X6) = 12/,12/PU,36/0.
* (X7) = RS (SL-R(LS/SL)) (SECTORS TO NEXT *LDAM*).
* (A5) = OUTPUT REGISTER ADDRESS.
* (B3) = 2.
* (B4) = PRESET RETURN STATUS.
*
* EXIT (MB) = 12/,12/ PU,12/ PC,12/ PT,12/ PS
* (OR) = 12/ 0,12/ F,24/,12/ RS
*
* USES ADDRESS PROCESSORS MAY USE ALL REGISTERS EXCEPT -
* A0, A5, B1, B2, B4, B7.
SPACE 4,10
** COMPLETE ADDRESS PROCESSING.
*
* ENTRY (X0) + (X5) = RELATIVE SECTOR NUMBER IN CYLINDER.
* (X1) = SECTORS PER PHYSICAL TRACK.
* (X3) = PHYSICAL CYLINDER IN BYTE 2.
* (X6) = 12/,12/PU,36/0.
* (X7) = REPLY FOR *OR*.
* (B4) = RETURN STATUS.
LDA6 IX0 X0+X5 (X0) = RELATIVE SECTOR IN CYLINDER
PX4 X1
PX2 X0
NX4 X4
FX2 X2/X4
UX2,B3 X2
LX2 B3 (X2) = PHYSICAL TRACK
IX4 X2*X1
IX4 X0-X4 (X4) = PS
* ENTRY (X1) = SECTORS PER PHYSICAL TRACK.
* (X2) = PHYSICAL TRACK.
* (X3) = PHYSICAL CYLINDER IN BYTE 2.
* (X4) = PHYSICAL SECTOR.
* (X6) = 12/,12/PU,36/0.
* (X7) = SECTORS TO NEXT *LDAM*.
* (B4) = RETURN STATUS.
LDA7 LX2 12
BX3 X3+X4
BX6 X6+X2 MERGE PT IN REPLY
BX6 X6+X3 MERGE PS AND CY IN REPLY
SX1 B4+ RETURN STATUS
SA6 A3+1 (MB+1) = PARAMETERS
NZ B4,LDA8 IF STATUS TO RETURN
SX1 11B REQUEST CHANNEL STATUS
LDA8 BX6 X6-X6
LX1 12
BX7 X7+X1
SA6 A6+B1 CLEAR (MB+2)
SA7 A5 STORE (OR)
EQ PPRX RETURN
TBLM SPACE 4,10
** TBLM - GENERATE TABLE OF LDAM PARAMETERS.
PURGMAC TBLM
TBLM MACRO EQ
IFNE LDAM_EQ,0,1
VFD 12/SL_EQ,30/0,18/LA_EQ
ENDM
TALP SPACE 4
** TALP - TABLE OF ALGORITHM PROCESSING PARAMETERS.
*
* ONE WORD ENTRIES INDEXED BY ALGORITHM INDEX.
*
*T, TALP 12/ SL,30/,18/ AP
*
* SL = SECTOR LIMIT.
* AP = ALGORITHM PROCESSOR.
TALP VFD 24/,18/1,18/HNG
LIST G
TBL "MSEQ"
LIST *
PURGMAC TBLM
LADI SPACE 4,20
** LADI - 7X54/844-21 ADDRESS CONVERSION PROCESSOR.
*
* ALGORITHM -
* SL = 153B SECTOR LIMIT
* HC = BIT 0 OF LT HALF CYLINDER BIT
* HT = BIT 1 OF LT HALF TRACK BIT
* LU = LS/SL LOGICAL UNIT
* PC = BITS 2 - 10 OF LT PHYSICAL CYLINDER
* PT = (HT+2*R(LS/SL))/30B+HC*11B PHYSICAL TRACK
* PS = R((HT+2*R(LS/SL))/30B) PHYSICAL SECTOR
* RS = SL-R(LS/SL) REMAINING SECTORS TO NEXT LDAM
*
* EXIT (X0) = HC*330B+HT
* (X5) = 2*R(LS/SL)
LADI BX3 -X1*X4 PC
LX4 -1
LX3 24-2
BX0 X0*X4 HT
PL X4,LAI1 IF IN FIRST HALF OF CYLINDER
SX0 X0+330B
LAI1 LX5 1
LX1 3 30B SECTORS PER PHYSICAL TRACK
EQ LDA6 COMPLETE ADDRESS CONVERSION
LADJ SPACE 4,20
** LADJ - 7X54/844-4X ADDRESS CONVERSION PROCESSOR.
*
* ALGORITHM -
* SL = 343B SECTOR LIMIT
* HT = BIT 0 OF LT HALF TRACK BIT
* LU = LS/SL LOGICAL UNIT
* PT = (HT+2*R(LS/SL))/30B PHYSICAL TRACK
* PC = BITS 1 - 10 OF LT PHYSICAL CYLINDER
* PS = R((HT+2*R(LS/SL))/30B) PHYSICAL SECTOR
* RS = SL-R(LS/SL) REMAINING SECTORS TO NEXT LDAM
*
* EXIT (X0) = HT
* (X5) = 2*R(LS/SL)
LADJ BX3 -X0*X4 PC
LX5 1 2*R(LS/SL)
BX0 X0*X4 HT
LX3 24-1
LAJ1 LX1 3 30B SECTORS PER PHYSICAL TRACK
EQ LDA6 COMPLETE ADDRESS CONVERSION
LDAK SPACE 4,20
** LADK - 7154/844-21 ADDRESS CONVERSION PROCESSOR.
*
* ALGORITHM -
* SL = 160B SECTOR LIMIT
* LU = LS/SL LOGICAL UNIT
* PC = BITS 2 - 10 OF LT PHYSICAL CYLINDER
* XX = BITS 0 AND 1 OF LT TRACK NUMBER WITHIN CYLINDER
* PT = (XX*162B+R(LS/SL))/30B PHYSICAL TRACK
* PS = R((XX*162B+R(LS/SL))/30B) PHYSICAL SECTOR
* RS = SL-R(LS/SL) REMAINING SECTORS TO NEXT LDAM
*
* EXIT (X0) = XX*162B
* (X5) = R(LS/SL)
LADK BX3 -X1*X4 (X3) = PC * 4
SX2 X2+B3 (X2) = 162B
BX0 X1*X4 XX
LX3 24-2
IX0 X0*X2 XX * 162B
LX1 3 30B SECTORS PER PHYSICAL TRACK
EQ LDA6 COMPLETE CONVERSION
LADL SPACE 4,15
** LADL - 7154/844-4X ADDRESS CONVERSION PROCESSOR.
*
* ALGORITHM -
* SL = 343B SECTOR LIMIT
* LU = LS/SL LOGICAL UNIT
* PC = BITS 1 - 10 OF LT PHYSICAL CYLINDER
* X = BIT 0 OF LT TRACK NUMBER WITHIN CYLINDER
* PT = (X*345B+R(LS/SL))/30B PHYSICAL TRACK
* PS = R((X*345B+R(LS/SL))/30B) PHYSICAL SECTOR
* RS = SL-R(LS/SL) R*
* EXIT (X0) = X*345B
* (X5) = R(LS/SL)
LADL BX3 -X0*X4 (X3) = PC * 2
LX4 -1
LX3 24-1
AX4 59
SX0 X2+B3 (X0) = 345B
BX0 X4*X0
EQ LAJ1 COMPLETE ADDRESS CONVERSION
LADM SPACE 4,10
** LADM - 7155/885 HALF TRACK ADDRESS CONVERSION.
*
* ALGORITHM -
* SL = 1200B SECTOR LIMIT
* HT = BIT 0 OF LT HALF TRACK BIT
* LU = LS/SL LOGICAL UNIT
* PC = BITS 1 - 10 OF LT PHYSICAL CYLINDER
* PT = (HT+2*R(LS/SL))/40B PHYSICAL TRACK
* PS = R((HT+2*R(LS/SL))/40B) PHYSICAL SECTOR
* RS = SL-R(LS/SL) REMAINING SECTORS TILL LDAM
*
* EXIT
LADM BX3 -X0*X4 PC
LX5 1
BX0 X0*X4 HT
LX3 24-1
LAM1 IX2 X0+X5 RELATIVE SECTOR IN CYLINDER
MX1 -5
BX4 -X1*X2 PS
AX2 5 PT
EQ LDA7 COMPLETE PROCESSING
LADQ SPACE 4,10
** LADQ - 7155/885 FULL TRACK ADDRESS CONVERSION.
*
* ALGORITHM -
* SL = 1200B SECTOR LIMIT
* X = BIT 0 OF LT LOGICAL TRACK IN CYLINDER
* LU = LS/SL LOGICAL UNIT
* PC = BITS 1 - 10 OF LT PHYSICAL CYLINDER
* PT = (X*SL+R(LS/SL))/40B PHYSICAL TRACK
* PS = R((X*SL+R(LS/SL))/40B) PHYSICAL SECTOR
* RS = SL-R(LS/SL) REMAINING SECTORS TILL LDAM
*
* EXIT
LADQ LX4 -1
SX3 X4 PC
AX4 59
LX3 24
BX0 X4*X2
EQ LAM1 COMPLETE CONVERSION
LADR SPACE 4,10
** LADR - CDSS II ADDRESS CONVERSION.
*
* ALGORITHM -
* SL = 3600B SECTOR LIMIT
* X = BIT 0 OF LT LOGICAL TRACK IN CYLINDER TRIAD
* SO = 1200B*X STARTING SECTOR OFFSET
* PC = LT+(LT/2)+(LS+SO)/2400B PHYSICAL CYLINDER
* SC = R((LS+SO)/2400B) SECTOR WITHIN CYLINDER
* PT = SC/40B PHYSICAL TRACK
* PS = SC-PT*40B PHYSICAL SECTOR
* RS = MAGIC SECTORS UNTIL NEXT LDAM
* EXIT
LADR AX3 X4,B1 CYLINDER TRIAD (LT/2)
MX2 -1
IX3 X4+X3 PC (WHERE TRACK STARTS) (LT+(LT/2))
BX2 -X2*X4 TRIAD HALF (X)
SB3 X2
SX2 2400B SET *LDAM* LIMIT AT END-OF-CYLINDER
AX4 X2,B3 2400B, 1200B FOR X = 0, 1. EOC SECTOR.
IX0 X2-X4 0B, 1200B FOR X = 0, 1. SECTOR OFFSET
IX2 X5-X4 LOGICAL SECTOR - END OF CYLINDER
NG X2,LAR1 IF SECTOR IS ON FIRST CYLINDER
SX4 1200B SET *LDAM* LIMIT AT END-OF-TRACK
LX4 B3 1200B, 2400B FOR X = 0, 1.
BX5 X2 SECTOR WITHIN SECOND CYLINDER
SX3 X3+1 PC (WHERE TRACK ENDS)
SX0 B0+ CLEAR STARTING SECTOR OFFSET
LAR1 IX7 X4-X5 RS
LX3 24 PC
EQ LAM1 COMPLETE CONVERSION
LADX SPACE 4,10
** LADX - 3330-1 FULL TRACK CONVERSION.
*
* ALGORITHM -
* SL = 142B SECTOR LIMIT
* LU = LS/SL LOGICAL UNIT
* PC = BITS 2 - 10 OF LT PHYSICAL CYLINDER
* XX = BITS 0 - 1 OF LT TRACK NUMBER WITHIN CYLINDER
* PT = (XX*144B+R(LS/SL))/25B PHYSICAL TRACK
* PS = R((XX*144B+R(LS/SL))/25B) PHYSICAL SECTOR
* RS = SL-R(LS/SL) REMAINING SECTORS TO NEXT LDAM
LADX BX3 -X1*X4 (X3) = PC * 4
SX2 X2+B3 (X2) = 144B
BX0 X1*X4 XX
IX0 X0*X2 XX * 144B
LAX1 SX1 25B (X1) = SECTORS PER PHYSICAL TRACK
LX3 24-2
EQ LDA6 COMPLETE ADDRESS CONVERSION
LADY SPACE 4,10
** LADY - 3330-11 FULL TRACK CONVERSION.
*
* ALGORITHM -
* SL = 306B SECTOR LIMIT
* LU = LS/SL LOGICAL UNIT
* PC = BITS 1 - 10 OF LT PHYSICAL CYLINDER
* X = BIT 0 OF LT TRACK NUMBER WITHIN CYLINDER
* PT = (X*310B+R(LS/SL))/25B PHYSICAL TRACK
* PS = R((X*310B+R(LS/SL))/25B) PHYSICAL SECTOR
* RS = SL-R(LS/SL) REMAINING SECTORS TO NEXT LDAM
LADY BX3 -X0*X4 (X3) = PC * 2
LX4 -1
LX3 1
AX4 59
SX0 X2+B3 (X0) = 310B
BX0 X4*X0
EQ LAX1 COMPLETE PROCESSING
LADZ SPACE 4,10
** LADZ - 3350 FULL TRACK CONVERSION.
*
* ALGORITHM -
* SL = 644B SECTOR LIMIT
* LU = LS/SL LOGICAL UNIT
* PC = BITS 1 - 10 OF LT PHYSICAL CYLINDER
* X = BIT 0 OF LT TRACK NUMBER WITHIN CYLINDER
* PT = (X*SL+R(LS/SL))/34B PHYSICAL TRACK
* PS = R((X*SL+R(LS/SL))/34B) PHYSICAL SECTOR
* RS = SL-R(LS/SL) REMAINING SECTOR TILL LDAM
LADZ BX3 -X0*X4 (X3) = PC * 2
LX4 -1
SX0 X2 SL
AX4 59
LX3 24-1
BX0 X4*X0
EQ LA12 COMPLETE ADDRESS CONVERSION
LAD1 SPACE 4,10
** LADA - 33502 FULL TRACK CONVERSION.
*
* ALGORITHUM -
* SL = 1510 SECTOR LIMIT
* VL = TL/2 VOLUME TRACK LIMIT
* LU = LS/SL LOGICAL UNIT
* PC = LT-(VL*(LT/VL)) PHYSICAL CYLINDER
* X = 0 LOGICAL TRACK WITHIN CYLINDER
* PT = X*SL+R(LS/SL))/34B PHYSICAL TRACK
* PS = R((X*SL+R(LS/SL))/34B) PHYSICAL SECTOR
* PU = (LT/VL)*40B+UNIT PHYSICAL UNIT
LADA BX3 X4 LT
SX0 NTDA/2 SET TRACK LIMIT PER VOLUME
IX1 X4-X0 LT MINUS TRACK LIMIT PER VOLUME
SX0 40B
SB3 B0 CLEAR VOLUME FLAG
SA2 A1 GET LAST VOLUME USED FLAG
NG X1,LA11 IF ON VOLUME 0
BX3 X1 SET CYLINDER FOR VOLUME 1
MX0 0
SB3 B1+ INDICATE VOLUME ONE
LA11 LX0 36
LX2 18
BX1 X6-X0 SWITCH TO CORRECT VOLUME
SB6 X2
SB6 B6-B3
ZR B6,LA11.1 IF NOT SWITCHING VOLUMES
SX6 B3
AX2 18
LX6 -18
NZ B4,LA11.1 IF PREVIOUS ERROR
SB4 4 SET UNIT SWITCH FOR *DSWM*
BX6 X2+X6
SA6 A2
LA11.1 BX6 X1
LX3 24 POSITION PC
SX0 B0
LA12 SX1 34B SECTORS PER PHYSICAL TRACK
EQ LDA6 COMPLETE ADDRESS PROCESSING
LADB SPACE 4,15
** LADB - 885-42 PARALLEL HEAD DEMA.
*
* ALGORITHM -
* SL = 1200B SECTOR LIMIT
* X = BIT 0 OF LT LOGICAL TRACK IN CYLINDER
* LU = LS/SL LOGICAL UNIT
* PC = 1 - 11 OF LT PHYSICAL CYLINDER
* PT = (X*SL+R(LS/SL))/200B PHYSICAL TRACK
* PS = (R(X*SL+R(LS/SL))/200B)/4 PHYSICAL SECTOR
LADB BSS 0
LX4 -1
SX3 X4 PC
AX4 59
LX3 24 PC IN BYTE 2
BX0 X4*X2
IX2 X0+X5 RELATIVE SECTOR IN CYLINDER
MX1 -7
BX4 -X1*X2
* ADD CODE HERE TO PULL OFF LOWER 2 BITS OF X4 AS
* RELATIVE LOGICAL PRU IN LARGE SECTOR.
AX4 2 PS
AX2 7 PT
EQ LDA7 COMPLETE PROCESSING
LADC SPACE 4,10
** LADC - 7165/895 FULL TRACK CONVERSION (*DC*).
*
* THIS ALGORITHM RETURNS A SMALL RECORD ADDRESS AND AS SUCH,
* IT CAN NOT BE USED TO READ LARGE RECORDS.
*
* ALGORITHM -
* SL = 1300B SECTOR LIMIT
* LU = LS/SL LOGICAL UNIT
* X = BIT 0 OF LT
* PC = BITS 1 - 10 OF LT PHYSICAL CYLINDER
* PT = (X*SL + R(LS/SL))/140B PHYSICAL TRACK
* PS = R((X*SL + R(LS/SL))/140B) PHYSICAL SECTOR
LADC LX4 -1
SX3 X4 PC
AX4 59 X
LX3 24 POSTION PC IN BYTE 2
BX4 X4*X2 X*SL
SX1 140B
IX5 X4+X5 X*SL + R(LS/SL)
PX0 X1
PX4 X5
NX0 X0
FX4 X4/X0 (X*SL + R(LS/SL))/140B
UX4,B3 X4
LX2 X4,B3 PT
IX4 X2*X1 (X*SL + R(LS/SL))/140B*140B
IX4 X5-X4 R((X*SL + R(LS/SL))/140B)
EQ LDA7 RETURN PHYSICAL DISK ADDRESS
LADD SPACE 4,10
** LADD - 7255/834 FULL TRACK ADDRESS CONVERSION.
*
* ALGORITHM -
* SL = 240B SECTOR LIMIT
* X = BIT 0 OF LT LOGICAL TRACK IN CYLINDER
* LU = LS/SL LOGICAL UNIT
* PC = BITS 1 - 10 OF LT PHYSICAL CYLINDER
* PT = (X*SL+R(LS/SL))/40B PHYSICAL TRACK
* PS = R((X*SL+R(LS/SL))/40B) PHYSICAL SECTOR
* RS = SL-R(LS/SL) REMAINING SECTORS TILL LDAM
LADD SX1 40B SECTORS PER PHYSICAL TRACK
LAD1 LX4 -1
SX3 X4 PHYSICAL CYLINDER
AX4 59
LX3 24
BX0 X4*X2 X*SL
SA2 A5
LX2 12
AX2 48
ZR X2,LDA6 IF TO ISSUE A SEEK ONLY
SX4 X2-.RDS2 CHECK FOR *RDS2*
SX2 B1+B1
ZR X4,LAD2 IF TO ISSUE A READ/SEEK
SX2 B1 ISSUE A WRITE/SEEK
LAD2 LX2 42
BX6 X2+X6
EQ LDA6 COMPLETE ADDRESS PROCESSING
LADG SPACE 4,10
** LADG - 7255/836 FULL TRACK ADDRESS CONVERSION.
*
* ALGORITHM -
* SL = 1064B SECTOR LIMIT
* X = BIT 0 OF LT LOGICAL TRACK IN CYLINDER
* LU = LS/SL LOGICAL UNIT
* PC = BITS 1 - 10 OF LT PHYSICAL CYLINDER
* PT = (X*SL+R(LS/SL))/57B PHYSICAL TRACK
* PS = R((X*SL+R(LS/SL))/57B) PHYSICAL SECTOR
* RS = SL-R(LS/SL) REMAINING SECTORS TILL LDAM
LADG SX1 57B SECTORS PER PHYSICAL TRACK
EQ LAD1 COMPLETE ADDRESS PROCESSING
LMSM SPACE 4,20
*** LMSM - LOAD MASS STORAGE DRIVERS.
*
* ENTRY
*
*T, OR 12/ LMSM,2/ ,1/C,9/ EQ,12/,6/ ,18/ SMSOP
*T, MB 12/ ,12/ WDSE,12/,12/ ,12/
*T, MB+1 12/ ,12/ ,12/,7/,5/ MSD,12/ CHRV
*
* C *6DC* REQUEST (ONLY IF CPP).
* EQ EQUIPMENT.
* SMSOP 3/ WP,12/ UERR,3/ SF
* WP 4 = WDSE ADDRESS VALID IN CALL.
* 0 = NO VALID WDSE ADDRESS IN CALL.
* UERR CALLERS ERROR PROCESSING OPTIONS.
* SF SUBFUNCTION CODE. *SETMS* OPTION
* 0 = NORMAL I/O. *IO*
* 1 = PROTECTED SECTOR I/O. *PIO*
* 2 = PROTECTED SECTOR I/O, SELECTED CHANNEL. *PIOCH*
* 3 = READ SYSTEM FILE. *READSYS*
* 4 = READ STREAM. *READSTR*
* 5 = RETURN DEVICE STATUS. *STATUS*
* 6 = NORMAL I/O ON SELECTED CHANNEL. *IOCH*
* WDSE WRITE ERROR PROCESSING BUFFER ADDRESS.
* MSD MASS STORAGE DRIVER INDEX.
* CHRV CHANNEL RESERVATION STATUS.
*
* EXIT
*
*T, OR 12/ 0,6/ 0,18/ DRA,12/ DRL,12/ 2
*T, MB 12/ DP,12/ WDSE,12/ 0,12/ RDCT,12/ STSA
*T, MB+1 12/ S,12/ UERR,12/ SLM,12/ MSD,12/ CHRV
*T, MB+2 60/ EST
*
* DRA LOAD ADDRESS OF DRIVER. ZERO IF NO DRIVER LOAD.
* DRL LENGTH OF DRIVER IN CM WORDS.
* DP DEVICE PARAMETER FROM BYTE 2 OF EST WORD *EQAE*.
* WDSE WRITE ERROR PROCESSING BUFFER, ZERO IF NO VALID
* ADDRESS PASSED ON CALL.
* RDCT 0
* STSA 2, IF DRIVER PRESET NOT TO BE EXECUTED.
* S 2000 IF FULL TRACK DEVICE.
* 2001 IF HALF TRACK DEVICE.
* UERR CALLERS ERROR PROCESSING OPTIONS.
* WHEN THE *READSYS* OPERATION TYPE IS SPECIFIED, THE
* *NS* ERROR PROCESSING OPTION IS IMPLIED. ALTHOUGH
* THE *EPNS* BIT IS NOT FORCED SET BY *READSYS*, *MTR*
* WILL NOT RETURN THE *LNRE* ERROR FLAG FOR AN OFF OR
* SUSPECT DEVICE IF THE *READSYS* BIT IS SET IN *CHRV*.
* SLM SECTOR LIMIT.
* MSD MASS STORAGE DESIGNATOR BYTE.
* DRIVER INDEX WILL BE CLEARED FOR SUBFUNCTIONS *PIO*
* AND *PIOCH*. BIT 2**6 SET IF DEVICE INACCESSIBLE
* AND JOB NOT *UTL=* OR IN UNCONDITIONAL TERMINATION
* STATE. BIT 2**11 SET IF JOB NOT SUBSYSTEM, NOT
* *UTL=*, AND NOT IN UNCONDITIONAL TERMINATION STATE.
* CHRV CHRV IS UPDATED DEPENDING ON THE SUBFUNCTION.
* 1000 BIT SET FOR *READSTR* OPTION.
* 40 BIT SET FOR *READSYS* OPTION ON A SYSTEM DEVICE.
* 4 BIT SET IF ACCESS SHOULD BE ALLOWED TO A SUSPECT
* OR OFF DEVICE.
* 2 BIT SET IF ACCESS SHOULD BE ALLOWED TO A DOWN
* DEVICE.
* EST *EQDE* WORD OF EST ENTRY.
*
*
* HANG CONDITIONS -
*
* INCORRECT SUBFUNCTION CODE.
* EST ORDINAL OUTSIDE OF EST.
* NON-MASS STORAGE EQUIPMENT (AND NOT *RD* EQUIPMENT).
* *6DC* REQUEST BIT SET BY NONCONCURRENT PP (NPP).
* *6DC* REQUEST BIT NOT SET BY CONCURRENT PP (CPP).
* NOT CALLED BY AN NPP AND THERE ARE NO CPPS.
PPR LMSM
TB3 A5,-FPC SUBTRACT *IR* ADDRESS OF FIRST CPP
MX0 -3 EXTRACT SUBFUNCTION CODE
SX6 X5 SIGN EXTEND WDSE PRESENT BIT
AX1 3
BX2 -X0*X5
MX0 -12
AX6 18
TPL B3,(/CPP/LMS13,CPP,/MONITOR/HNG) IF FROM CPP
BX5 -X0*X1 UERR
AX1 36-3 EXTRACT EQUIPMENT
SB4 X1
TB3 ESTL
SX4 -B4
ERRNZ RDEQ CODE ASSUMES *RDEQ* = 0
GE B4,B3,HNG IF *6DC* REQUEST OR IF OUTSIDE EST
SB3 X2 (B3) = SUBFUNCTION CODE
CX3 X1,EST CONVERT EST ORDINAL TO OFFSET
TA3 EQDE+X3,EST READ EST ENTRY
BX6 -X0*X6 MASK FOR WDSE EXTRACTION
BX1 -X0*X3
BX7 X3
AX7 59-0
BX7 X4+X7
SA2 A5+B1 READ WDSE
NZ X7,HNG IF NEITHER MASS STORAGE NOR *RD* EQUIPMENT
BX7 X3
SA4 A2+B1 READ MESSAGE BUFFER PARAMETERS
LX6 36
LX1 3 MST ADDRESS
BX6 X6*X2 WDSE TO SAVE FOR REPLY
SA7 A4+B1 STORE EST IN REPLY
SX2 EPAD&EPNS
SX7 211B
BX2 X2*X5 MAP *AD*/*NS* OPTIONS INTO *CHRV*
BX7 X7*X4 PRESERVE CHANNEL STATUS FROM *CHRV*
LX5 36
BX7 X2+X7 COMBINE OLD AND NEW *CHRV* DATA
SA1 X1+MDGL
BX7 X7+X5 COMBINE *CHRV* AND *UERR*
BX2 -X0*X1
SX5 370000B
LX2 24 POSITION *SLM*
BX7 X7+X2
BX4 X5*X4 OLD DRIVER INDEX
LX3 59-58
BX5 X5*X1 NEW DRIVER INDEX
LX1 59-47+12
SA2 B7+SEPW CHECK SPECIAL ENTRY POINTS
BX1 -X0*X1
AX1 11 POSITION INTERLACE
LX2 59-56
SB6 X1
NG X2,LMS3 IF *UTL=* ENTRY POINT
SA2 B7+TFSW
LX2 12
BX1 -X0*X2
CX2 X1,EJT CONVERT EJT ORDINAL TO OFFSET
TA2 X2+SCHE,EJT
LX2 59-34
ERRNZ UCTM-2 CODE ASSUMES VALUE
NG X2,LMS3 IF UNCONDITIONAL JOB TERMINATION
SA2 B7+JCIW CHECK SUBSYSTEM
LX2 -24
BX2 -X0*X2
SX2 X2-LSSI-1
MX1 1
BX2 X1*X2
LX2 23-59
BX7 X7+X2 SET SUBSYSTEM STATUS
SA2 A1+DALL-MDGL
R= B4,.READSYS
NE B3,B4,LMS2 IF NOT *READSYS* OPTION
NG X3,LMS3 IF SYSTEM DEVICE
SA3 INWL
LMS2 LX2 59-55
LX3 59-15
BX2 X1*X2
NG X3,LMS3 IF DEADSTART SEQUENCING NOT COMPLETE
LX2 18-59
BX7 X7+X2 SET SUSPECT STATUS
LMS3 SX0 11B
PX3 X7,B6 SET INTERLACE
BX1 X1-X1
NZ B3,LMS12 IF NOT FUNCTION 0
* CHECK FOR DRIVER LOAD NEEDED.
LMS4 IX2 X4-X5 OLD INDEX - NEW INDEX
BX1 X0*X3 *CHRV* CHANNEL STATUS
SX7 B1+B1 SET STATUS REPLY
IX2 X1+X2
ZR X2,LMS4.1 IF CORRECT DRIVER AND NO CHANNEL RESERVE
BX6 X6+X7 SET TO NOT EXECUTE DRIVER PRESET
MX0 18+12
NZ X1,LMS5 IF CHANNEL RESERVED
BX4 X5 SET NEW DRIVER INDEX
AX5 12
SA1 TMSD+X5 READ DRIVER LOAD
LX0 -18
SX1 X1 SET PLD ADDRESS
ZR X1,LMS9 IF LIBRARY LOCKED
ZR X5,HNG IF ILLEGAL DRIVER INDEX
SX5 X5-LA6MX
PL X5,HNG IF ILLEGAL DRIVER INDEX
SA2 X1
SX1 B1
BX2 X0*X2 CLEAR LOAD ADDRESS AND PROGRAM NAME
LX1 41
LMS4.1 IX2 X1+X2
BX6 -X7*X6 SET TO EXECUTE DRIVER PRESET
BX7 X7+X2
SA1 A3+B1
ERRNZ EQDE+1-EQAE CODE DEPENDS ON VALUE
MX5 12
LX1 24
BX5 X5*X1 EXTRACT DEVICE PARAMETER FROM EST
BX6 X5+X6
ERRNZ .PIO-1 CODE ASSUMES *.PIO* = 1
LMS5 NE B3,B1,LMS6 IF NOT *PIO*/*PIOCH* SUBFUNCTION
SX4 0 CLEAR DRIVER INDEX IN *MSD*
LMS6 SA6 A5+B1 STORE MB REPLY
BX6 X3+X4 MERGE DRIVER INDEX
SA6 A6+B1 STORE MB+1 REPLY
SA7 A5 STORE OUTPUT REGISTER
EQ PPRX RETURN
LMS7 PL X3,LMS8 IF NOT SYSTEM DEVICE
SX1 40B
LMS8 BX3 X7+X1
EQ LMS4 CHECK FOR DRIVER LOAD
LMS9 SA5 A5 REJECT REQUEST
MX7 1
BX7 X5+X7
SA7 A5
EQ PPRX RETURN
LMS10 SX7 B1+B1 SET REPLY STATUS
BX6 X6+X7 SET NO DRIVER PRESET
SA6 A5+B1 STORE MB REPLY
SA7 A5
EQ PPRX RETURN
LMS11 SB3 .PIO
EQ TLMS+.IOCH GO TO *IOCH* PROCESSOR
LMS12 BX7 X3 SAVE MB+1 IMAGE
SX1 B0
JP TLMS+B3 JUMP TO PROCESSOR
BSS 0
QUAL
TLMS EQU *-1 TABLE OF *LMSM* SUBFUNCTION PROCESSORS
LOC 1
.PIO SX5 LA6DI*4096 SUBFUNCTION 1 - *PIO*
EQ /MONITOR/LMS4 LOAD DRIVER
.PIOCH SX5 LA6DI*4096 SUBFUNCTION 2 - *PIOCH*
EQ /MONITOR/LMS11 EQUATE THIS SUBFUNCTION TO *PIO*
.READSYS SA3 A3 SUBFUNCTION 3 - *READSYS*
LX3 59-58
EQ /MONITOR/LMS7 SET SYSTEM SEARCH FLAG
.READSTR SX1 1000B SUBFUNCTION 4 - *READSTR*
EQ /MONITOR/LMS8 CHECK DRIVER LOAD
.STATUS BX7 X7+X4 SUBFUNCTION 5 - *STATUS*
SA7 A4 STORE MB+1 REPLY
EQ /MONITOR/LMS10 COMPLETE FUNCION
.IOCH SX1 20B SUBFUNCTION 6 - *IOCH*
EQ /MONITOR/LMS8 CONTINUE
+ EQ /MONITOR/HNG SUBFUNCTION 7 - INVALID
LOC *O
QUAL *
MTEM SPACE 4,15
*** MTEM - *MTE* FUNCTION REQUEST PROCESSOR.
*
* ENTRY
*T, OR 12/ MTEM,12/ SF,36/ PARAMETERS
*
* SF SUBFUNCTION CODE.
* CBRS CLEAR BAT READ ACCESS.
* CBWS CLEAR BAT READ AND WRITE ACCESS.
* CEMS CLEAR EXTENDED MEMORY TRACK.
* EBRS ENABLE BRT PROCESSING.
* SEPS SET *DAS* ERROR PROCESSING INTERLOCK.
* CEPS CLEAR *DAS* ERROR PROCESSING INTERLOCK.
* SRIS SET RECOVERY ERROR PROCESSING INTERLOCK.
* CRIS CLEAR RECOVERY ERROR PROCESSING INTERLOCK.
* RBPS RELEASE BAT/BST ACCESS PERMISSIONS.
* GRIS GET RECOVERY INTERLOCK STATUS.
* SRPS SET *DAS* RESTORE PARITY INTERLOCK.
* CRPS CLEAR *DAS* RESTORE PARITY INTERLOCK.
* GBDS GET *BDT* ENTRY.
*
*
* CBRS/CBWS - CLEAR BAT READ/WRITE ACCESS.
*
* ENTRY
*T, OR 12/ MTEM,12/ SF,12/ MI,12/ 0,12/ EQ
* SF *CBRS*/*CBWS* SUBFUNCTION.
* MI MAINFRAME INDEX FOR THE MAINFRAME BEING RECOVERED.
* EQ EST ORDINAL FOR THE DEVICE BEING RECOVERED.
*
* EXIT
*T, OR 12/ 0,48/ UNCHANGED
*
* *PP HUNG.* WILL OCCUR FOR THE FOLLOWING CONDITIONS -
* 1. THE SPECIFIED DEVICE IS NOT A SHARED BUFFERED DEVICE.
* 2. THE SPECIFIED DEVICE IS NOT IN THE *DAT*.
* 3. MACHINE INDEX IS INVALID.
*
*
* EBRS - ENABLE BRT PROCESSING.
*
* ENTRY
*T, OR 12/ MTEM,12/ *EBRS*,12/ 0,12/ BD,12/ BT
* BD TRACK NUMBER OF BDT IN EXTENDED MEMORY.
* BT TRACK NUMBER OF BRT IN EXTENDED MEMORY.
*
* EXIT
*T, OR 12/ 0,48/ UNCHANGED
*
*
* CEMS - CLEAR EXTENDED MEMORY TRACK.
*
* ENTRY
*T, OR 12/ MTEM,12/ *CEMS*,12/ FS,12/ NS,12/ TK
* FS FIRST SECTOR TO CLEAR.
* NS NUMBER OF SECTORS TO CLEAR.
* TK EXTENDED MEMORY TRACK TO CLEAR.
*
* EXIT
*T, OR 12/ 0,48/ UNCHANGED
*
* *PP HUNG.* WILL OCCUR IF THE LAST SECTOR TO CLEAR
* IS PAST THE TRACK BOUNDARY OF THE SPECIFIED TRACK.
*
*
* SEPS - SET *DAS* ERROR PROCESSING INTERLOCK.
*
* ENTRY
*T, OR 12/ MTEM,12/ *SEPS*,24/ 0,12/ EQ
* EQ EST ORDINAL OF DEVICE TO BE PROCESSED.
*
* EXIT
*T, OR 12/ 0,36/ UNCHANGED,12/ ST
* ST STATUS = 0, IF SUCCESSFUL.
* = 1, IF REJECT.
*
* *PP HUNG.* WILL OCCUR FOR THE FOLLOWING CONDITIONS -
* 1. THE SPECIFIED DEVICE IS NOT A SHARED BUFFERED DEVICE.
* 2. THE SPECIFIED DEVICE IS NOT IN THE *DAT*.
*
*
* CEPS - CLEAR *DAS* ERROR PROCESSING INTERLOCK.
*
* ENTRY
*T, OR 12/ MTEM,12/ *CEPS*,24/ 0,12/ EQ
* EQ EST ORDINAL OF DEVICE TO BE PROCESSED.
*
* EXIT
*T, OR 12/ 0,36/ UNCHANGED,12/ 0
*
* *PP HUNG.* WILL OCCUR FOR THE FOLLOWING CONDITIONS -
* 1. THE SPECIFIED DEVICE IS NOT A SHARED BUFFERED DEVICE.
* 2. THE SPECIFIED DEVICE IS NOT IN THE *DAT*.
*
*
* SRIS - SET RECOVERY ERROR PROCESSING INTERLOCK.
*
* ENTRY
*T, OR 12/ MTEM,12/ *SRIS*,36/ 0
*
* EXIT
*T, OR 12/ 0,36/ UNCHANGED,12/ ST
* ST STATUS = 0, IF SUCCESSFUL.
* = 1, IF INCOMPLETE (RECOVERY INTERLOCK IS SET,
* BUT CONFLICTING *BDT* INTERLOCKS ARE SET).
* = 2, IF REJECT.
*
*
* CRIS - CLEAR RECOVERY ERROR PROCESSING INTERLOCK.
*
* ENTRY
*T, OR 12/ MTEM,12/ *CRIS*,36/ 0
*
* EXIT
*T, OR 12/ 0,48/ UNCHANGED
*
*
* RBPS - RELEASE BAT/BST ACCESS PERMISSIONS.
*
* ENTRY
*T, OR 12/ MTEM,12/ *RBPS*,24/ 0,12/ EQ
* EQ EST ORDINAL FOR THE DEVICE TO BE PROCESSED.
*
* EXIT
*T, OR 12/ 0,36/ UNCHANGED,12/ ST
* ST STATUS .EQ. 0, IF SUCCESSFUL.
* .NE. 0, IF NOT ALL PERMISSIONS WERE RELEASED.
*
* *PP HUNG.* WILL OCCUR FOR THE FOLLOWING CONDITIONS -
* 1. THE SPECIFIED DEVICE IS NOT A SHARED BUFFERED DEVICE.
* 2. THE SPECIFIED DEVICE IS NOT IN THE *DAT*.
*
*
* GRIS - GET RECOVERY INTERLOCK STATUS.
*
* ENTRY
*T, OR 12/ MTEM,12/ *GRIS*,36/ 0
*
* EXIT
*T, OR 12/ 0,36/ UNCHANGED,12/ ST
* ST STATUS = 0, IF NO CONFLICTING *BDT* INTERLOCKS SET.
* = 1, IF CONFLICTING *BDT* INTERLOCKS STILL SET.
*
*
* SRPS - SET *DAS* RESTORE PARITY INTERLOCK.
*
* ENTRY
*T, OR 12/ MTEM,12/ *SRPS*,24/ 0,12/ EQ
*T, MB 24/ ,36/ CID
* EQ EST ORDINAL FOR THE DEVICE TO BE PROCESSED.
* CID SERIAL NUMBER FOR CONTROLLER PERFORMING *RESTORE*.
*
* EXIT
*T, OR 12/ 0,36/ UNCHANGED,12/ ST
* ST STATUS .EQ. 0, IF SUCCESSFUL.
* .NE. 0, IF REJECT.
*
* *PP HUNG.* WILL OCCUR FOR THE FOLLOWING CONDITIONS -
* 1. THE SPECIFIED DEVICE IS NOT A SHARED BUFFERED DEVICE.
* 2. THE SPECIFIED DEVICE IS NOT IN THE *DAT*.
*
*
* CRPS - CLEAR *DAS* RESTORE PARITY INTERLOCK.
*
* ENTRY
*T, OR 12/ MTEM,12/ *CRPS*,24/ 0,12/ EQ
* EQ EST ORDINAL FOR THE DEVICE TO BE PROCESSED.
* CID CONTROLLER SERIAL NUMBER (FOR *SRPS*).
*
* EXIT
*T, OR 12/ 0,48/ UNCHANGED
*
* *PP HUNG.* WILL OCCUR FOR THE FOLLOWING CONDITIONS -
* 1. THE SPECIFIED DEVICE IS NOT A SHARED BUFFERED DEVICE.
* 2. THE SPECIFIED DEVICE IS NOT IN THE *DAT*.
*
*
* GBDS - GET *BDT* ENTRY.
*
* ENTRY
*T, OR 12/ MTEM,12/ *GCIS*,24/ 0,12/ EQ
* EQ EST ORDINAL FOR THE DEVICE TO BE PROCESSED.
*
* EXIT
*T, OR 12/ 0,48/ UNCHANGED
*T, MB 60/ BDT
* BDT BDT ENTRY FOR SPECIFIED DEVICE (SEE *COMSMMF*).
*
* *PP HUNG.* WILL OCCUR FOR THE FOLLOWING CONDITIONS -
* 1. THE SPECIFIED DEVICE IS NOT A SHARED BUFFERED DEVICE.
* 2. THE SPECIFIED DEVICE IS NOT IN THE *DAT*.
PPR MTEM,(/BUFIO/MTE,BIOMMF,/MONITOR/HNG)
MTRM SPACE 4,35
*** MTRM - MANAGE TABLE REQUEST PROCESSOR.
*
* ENTRY
*T, OR 12/ MTRM,12/ FPARM,1/ SF,11/ TABLE,24/
*T, MB 60/ FWORD
*
* FPARM FUNCTION PARAMETER.
* = 0, IF RESERVE TABLE ENTRY FOR USE (REMOVE AN ENTRY
* FROM POOL OF AVAILABLE ENTRIES FOR THIS TABLE).
* = ORDINAL, IF NONZERO. TABLE ENTRY SPECIFIED WILL
* BE RETURNED TO POOL OF AVAILABLE ENTRIES.
* SF SYSTEM JOB FLAG.
* IF SET, AND *FPARM* = 0, ONE OF THE *RESERVED FOR
* SYSTEM JOB* ENTRIES WILL BE ASSIGNED IF THE TABLE
* IS FULL.
* TABLE TABLE IDENTIFICATION.
* *PEJT* IF EJT ENTRY TO BE PROCESSED.
* *PFNT* IF SYSTEM FNT ENTRY TO BE PROCESSED.
* *PFOT* IF FAMILY ORDINAL TABLE TO BE PROCESSED.
* *PQFT* IF QFT ENTRY TO BE PROCESSED.
* *PODT* IF ORT ENTRY TO BE PROCESSED.
*
* FWORD INFORMATION TO STORE IN FIRST WORD OF TABLE
* ENTRY RESERVED FOR *FPARM* = 0 REQUEST.
*
* EXIT
*T, OR 12/ 0,12/ STAT,12/,24/ ADDR
*
* STAT RETURN STATUS.
* = 0 FOR *FPARM* = ORDINAL OPTION.
* = 0 FOR *FPARM* = 0 OPTION, IF NO TABLE ENTRY
* AVAILABLE.
* = ORDINAL FOR *FPARM* = 0 OPTION, IF THIS TABLE
* ENTRY HAS BEEN RESERVED FOR USE BY CALLER.
* ADDR ABSOLUTE ADDRESS OF TABLE ENTRY RESERVED FOR
* USE FOR *FPARM* = 0 OPTION.
*
* *PP HUNG* WILL OCCUR FOR THE FOLLOWING CONDITIONS.
* 1. INVALID TABLE IDENTIFICATION.
* 2. ORDINAL OF ENTRY TO RETURN TO POOL IS INVALID.
* 3. ENTRY TO RETURN TO POOL IS NOT IN USE (BYTE 0 = 0).
PPR MTRM,,,FEX
SB6 PPR1 SET *MTRM* EXIT ADDRESS
* ENTRY FROM *JACM* AND *RJSM* PROCESSORS.
* (B6) = RETURN ADDRESS.
MTM0 AX1 24
MX3 -11
MX0 -12
BX6 -X0*X1 SYSTEM JOB FLAG
BX2 -X3*X1 TABLE IDENTIFICATION
AX1 12
SX2 X2-PFOT
SX3 X2-TMTDL
BX3 -X3+X2
SB3 -B1 DECREMENT NUMBER OF FREE ENTRIES
NG X3,HNG IF INVALID TABLE IDENTIFICATION
SA4 TMTD+X2 GET TABLE POINTER AND ENTRY LENGTH
BX5 -X0*X4
AX4 12
BX7 -X0*X4
SB4 X7 NUMBER OF RESERVED ENTRIES
AX4 12
SA4 X4 GET TABLE FWA AND LINKED LIST POINTER
LX4 -12
BX2 -X0*X4 COUNT OF AVAILABLE ENTRIES
LX4 -24
NZ X1,MTM1 IF RETURN ENTRY TO AVAILABLE POOL
* REMOVE ENTRY FROM POOL OF AVAILABLE ENTRIES.
SA3 A4 GET FIRST AVAILABLE ENTRY
BX7 -X0*X3
ZR X7,PPR1 IF NO ENTRIES AVAILABLE
SX1 B4
IX2 X1-X2
NG X2,MTM0.1 IF TABLE NOT FULL
AX6 11
NZ X6,MTM0.1 IF SYSTEM JOB CALL
SX7 B0+
EQ PPR1 CLEAR OUTPUT REGISTER
MTM0.1 SX4 X4
IX5 X7*X5
IX5 X5+X4 ABSOLUTE ADDRESS OF FIRST AVAILABLE ENTRY
SA2 A5+B1 RESERVE NEXT AVAILABLE ENTRY
LX7 36
SA1 X5 GET NEXT LINK
BX7 X7+X5
LX6 X2
BX1 -X0*X1
EQ MTM4 UPDATE POINTER FOR NEXT AVAILABLE ENTRY
* RETURN ENTRY TO POOL OF AVAILABLE ENTRIES.
MTM1 LX4 12
BX2 -X0*X4 MAXIMUM NUMBER OF ENTRIES
SX7 A4+
LX4 -12
IX2 X1-X2
PL X2,HNG IF ORDINAL OUT OF RANGE
MTM2 SA3 X7
MX2 1
BX6 -X0*X3
IX7 X6*X5
ZR X6,MTM3 IF END OF LINKED LIST
IX2 X1-X6
IX7 X7+X4
MTM3 PL X2,MTM2 IF ORDINAL .GT. NEXT POINTER
SB4 X5
IX5 X1*X5
SB3 B1 INCREMENT NUMBER OF FREE ENTRIES
IX5 X5+X4 ABSOLUTE ADDRESS OF ENTRY TO RETURN
BX7 X7-X7
SA2 X5 CHECK IF ENTRY ALREADY IN POOL
LX2 12
BX2 -X0*X2
ZR X2,HNG IF ENTRY IS NOT IN USE
MTM4 BX3 X0*X3 ADD/REMOVE ENTRY IN LIST
SX2 B3
LX2 12
+ SA6 X5 UPDATE TABLE IN ONE WORD OF CODE
BX6 X3+X1
SA6 A3
SA4 A4
IX6 X4+X2 INCREMENT/DECREMENT FREE ENTRIES
SA6 A4
NZ X7,RB6 IF NOT CLEARING ENTRY
MTM5 SB4 B4-B1 CLEAR REMAINDER OF ENTRY
SA7 X5+B4
GT B4,B1,MTM5 IF MORE WORDS TO CLEAR
JP B6 EXIT
TMTD SPACE 4,10
** TMTD - TABLE OF MANAGED TABLE DESCRIPTORS.
*
* ONE WORD PER ENTRY -
*T 18/,18/ PTRA,12/ RSEN,12/ ENTL
* PTRA MANAGED TABLE POINTER ADDRESS.
* RSEN NUMBER OF ENTRIES RESERVED FOR SYSTEM JOBS.
* ENTL TABLE ENTRY LENGTH.
TMTD BSS 0
LOC 1
ERRNZ *-PFOT TABLE POSITION DEPENDS ON VALUE
VFD 18/0,18/FOTP,12/0,12/1 FAMILY ORDINAL TABLE
ERRNZ *-PFNT TABLE POSITION DEPENDS ON VALUE
VFD 18/0,18/FNTP,12/0,12/FNTE SYSTEM FNT
ERRNZ *-PQFT TABLE POSITION DEPENDS ON VALUE
VFD 18/0,18/QFTP,12/QFTR,12/QFTE QUEUE FILE TABLE
ERRNZ *-PEJT TABLE POSITION DEPENDS ON VALUE
VFD 18/0,18/EJTP,12/EJTR,12/EJTE EXECUTING JOB TABLE
ERRNZ *-PODT TABLE POSITION DEPENDS ON VALUE
VFD 18/0,18/ORTP,12/0,12/ORTE OPTICAL DISK REQUEST TABLE
LOC *O
TMTDL EQU *-TMTD TABLE LENGTH
PIOM SPACE 4,20
*** PIOM - PP I/O VIA CPU TRANSFERS.
*
* ENTRY
*
* FOR PP I/O BUFFER SUBFUNCTIONS (SF = 0, 1, 2) -
*T, OR 12/ PIOM,6/ SF,6/ FF,24/,12/ CH
*T, MB 12/ T4,12/ T5,12/ T6,12/ T7,12/ CHRV
*
* FOR DIRECT READ OR WRITE OF SPECIFIED NUMBER OF SECTORS
* (SF = 3 WITH FF BIT 38 = 0, AND SF = 4) -
*T, OR 12/ PIOM,6/ SF,6/ FF,12/ SC,6/,18/ CMR
*T, MB 12/ T4,12/ T5,12/ T6,12/ T7,12/ CHRV
*
* FOR DIRECT READ TO EOR (SF = 3 WITH FF BIT 38 = 1) -
*T, OR 12/ PIOM,6/ SF,6/ FF,18/ LWR,18/ CMR
*T, MB 12/ T4,12/ T5,12/ T6,12/ T7,12/ CHRV
*
* FOR WRITE BUFFER FLUSH (SF = 5) -
*T, OR 12/ PIOM,6/ SF,6/,24/,12/ FNTO
*
* FOR CM RESIDENT CODE TRANSFER SUBFUNCTION (SF = 6) -
*T, OR 12/ PIOM,6/ SF,6/,18/ LWR,18/ CMR
*T, MB 24/,24/ CMA,12/
*
* SF SUBFUNCTION CODE AS DEFINED IN *COMSCPS*.
* SUBFUNCTIONS 0 THRU 4 APPLY TO ECS/LCM (DE)
* AND BUFFERED I/O DEVICES (DV, DW, DB, DC, ETC.).
* SUBFUNCTION 5 APPLIES TO 819 EQUIPMENT ONLY.
* SUBFUNCTION 6 APPLIES TO CM RESIDENT CODE ONLY.
* 0 = REBS = RESERVE WRITE BUFFER.
* 1 = RESS = READ SECTOR.
* 2 = WESS = WRITE SECTOR.
* 3 = RDDS = READ DIRECT.
* 4 = WDDS = WRITE DIRECT.
* 5 = FLBS = FLUSH 819 I/O LCM BUFFERS.
* 6 = LCRS = LOAD CM RESIDENT CODE.
* FF FUNCTION FLAGS.
* BIT 36 = REWRITE (SF = 2 ONLY).
* BIT 37 = LAST SECTOR BUFFER FLUSH FOR SECTOR WRITE
* (SF = 2), WRITE EOI AND FLUSH BUFFER FOR DIRECT
* WRITE ON BUFFERED DEVICE (SF = 4).
* BIT 38 = READ TO EOR (SF = 3 ONLY), TERMINATES ON
* ANY SHORT SECTOR - EOR/EOF/EOI.
* CH CHANNEL NUMBER TO BE USED IN PROCESSING REQUEST, VALID
* ONLY WHEN BIT 4 OF *CHRV* IS SET.
* SC SECTOR COUNT TO BE TRANSFERRED (SF = 3 WITH
* FF BIT 38 = 0 AND SF =4).
* LWR LWA+1 OF TRANSFER (SF = 3 WITH FF BIT 38 = 1
* AND SF = 6). IF ZERO, LWA+1 TRANSFER = FL.
* CMR RELATIVE CM ADDRESS OF TRANSFER (SF = 3, 4, 6 ONLY).
* T4 PP I/O BUFFER INCREMENT, IF PP I/O BUFFER RESERVED.
* T5 EQUIPMENT (EST ORDINAL OF ECS/LCM OR BUFFERED DEVICE).
* T6 CURRENT TRACK (LOGICAL).
* T7 CURRENT SECTOR (LOGICAL).
* CMA ABSOLUTE CM ADDRESS OF CM RESIDENT CODE TO TRANSFER.
* CHRV CHANNEL RESERVATION INDICATOR.
* BIT 5 = SYSTEM FILE REQUEST.
* BIT 6 = PP I/O BUFFER RESERVED (BUFFER
* INCREMENT IN T4).
* BIT 7 = BUFFER I/O LINK SET.
* BIT 8 = DIRECT TRANSFER CONTINUATION (CLEAR IF
* INITIAL CALL).
* BIT 9 = STREAM DATA ON PRU READ.
* FNTO FNT ORDINAL FOR FNT NEEDING A BUFFER FLUSHED.
*
* EXIT
*
* FOR PP I/O BUFFER SUBFUNCTIONS (SF = 0, 1, 2) -
*T, OR 12/ 0,6/ ST,6/ EC,6/,30/ EEA
*T, MB 12/ T4,12/ T5,12/ T6,12/ T7,12/ CHRV
*T, MB+1 60/ SAME AS (OR).
*
* FOR DIRECT READ OR WRITE OF SPECIFIED NUMBER OF SECTORS
* (SF = 3 WITH FF BIT 38 = 0, AND SF = 4) -
*T, OR 12/ 0,6/ ST,6/ EC,12/ SC,6/,18/ CMR
*T, MB 12/ T4, 12/ T5, 12/ T6, 12/ T7, 12/ CHRV
*T, MB+1 60/ SAME AS (OR)
*
* FOR DIRECT READ TO EOR (SF = 3 WITH FF BIT 38 = 1) -
*T, OR 12/ 0,6/ ST,6/ EC,18/ LWR,18/ CMR
*T, MB 12/ T4,12/ T5,12/ T6,12/ T7,12/ CHRV
*T, MB+1 60/ SAME AS (OR)
*
* FOR WRITE BUFFER FLUSH (SF = 5) =
*T, OR 60/ 0
*
* FOR CM RESIDENT CODE TRANSFER SUBFUNCTION (SF = 6) -
*T, OR 12/ 0,6/ ST,6/,18/ LWR,18/ CMR
*T, MB 30/,18/ CMA,12/
*
* ST RETURN STATUS. IF A NONZERO STATUS IS PRESENT, THE
* ERROR CODE FIELD IS ALWAYS CLEAR.
* 04XX = *IFLS* = INSUFFICIENT FIELD LENGTH FOR LOAD
* (SF = 3 WITH FF BIT 38 = 1, OR SF = 6).
* 60XX = *REIS* = REISSUE FUNCTION (SET IN MB+1 ONLY,
* I/O OR *PAUSE* IS REQUIRED) (SF = 0, 1, 2, 3, 4).
* EC ERROR CODE. SEE *COMSMSP* FOR A DESCRIPTION OF MASS
* STORAGE ERROR CODES.
* SC REMAINING SECTOR COUNT (SF = 3, 4 ONLY).
* LWR SAME AS ON ENTRY.
* CMR RELATIVE CM ADDRESS UPDATED TO LWA+1 TRANSFER
* (SF = 3, 4, 6 ONLY).
* EEA ERROR ADDRESS IF ECS/ESM ERROR.
* T4 PP I/O BUFFER INCREMENT, IF BUFFER RESERVED
* (SF = 0, 1, 2).
* NUMBER OF SECTORS TRANSFERRED (SF = 3, 4).
* T5 EQUIPMENT.
* T6 TRACK. UPDATED TO NEXT TRACK, IF NECESSARY,
* FOR DIRECT TRANSFER (SF = 3, 4). NOT ADVANCED
* PAST EOI TRACK.
* T7 SECTOR. UPDATED TO NEXT SECTOR, FOR DIRECT
* TRANSFER (SF = 3, 4). NOT ADVANCED PAST EOI SECTOR.
* CMA SAME AS ON ENTRY.
* CHRV BITS UPDATED TO REFLECT CURRENT RESERVATION
* STATUS.
*
* NOTES 1. MB+1 IS USED BY CPUMTR TO KEEP PROGRAM OR
* MONITOR MODE FLAGS. MB+2 AND MB+3 ARE USED
* TO CONTAIN A PSEUDO FNT FOR A BUFFERED DISK
* REQUEST.
*
* 2. IF *RCLS* STATUS IS RETURNED, THE PP SHOULD
* LOOP ISSUING *PAUSE* AND CHECKING MB+1 BYTE 1
* UNTIL STATUS = *REIS*. BIT 46 OF MB+1 IS SET
* WHEN A *PAUSE* IS REQUIRED OR PENDING BUFFERED I/O
* IS COMPLETE. THE *PIOM* FUNCTION SHOULD THEN BE
* REISSUED TO COMPLETE THE TRANSFER. NOTE THAT A
* DIRECT TRANSFER IS PREMATURELY TERMINATED IF
* NONZERO STATUS IS RETURNED.
*
* 3. THE PP SHOULD RELEASE THE PP I/O BUFFER AFTER
* TRANSFER OF SECTOR TO PP IS COMPLETE (SF = 1).
* DRIVER *ENDMS* PROCESSING SHOULD RELEASE THE
* PP I/O BUFFER IF IT IS RESERVED. CPUMTR WILL
* RELEASE THE BUFFER IN THE FOLLOWING CASES -
* (1) DIRECT TRANSFER IS REQUESTED (SF = 3, 4).
* (2) BUFFERED I/O IS PENDING (ST = 4000).
* (3) ADDRESS ERROR, I/O ERROR OR INACCESSIBLE
* DEVICE.
* (4) LAST SECTOR BUFFER FLUSH REQUESTED ON
* WRITE (SF = 2).
* NOTE THAT THE PP WILL HAVE TO RE-RESERVE AN
* I/O BUFFER (SF = 0) AND REWRITE THE DATA TO
* THE BUFFER FOR SF = 2, WHEN BUFFERED I/O IS
* PENDING (ST = 4000).
*
* 4. *PIOM* WILL HANG FOR FOLLOWING CONDITIONS -
* (1) ILLEGAL SUBFUNCTION CODE.
* (2) *CHRV* BIT 0 SET INDICATING PP I/O BUFFER
* RESERVED, BUT BUFFER INTERLOCK DOES NOT
* CORRESPOND TO THIS PP.
* (3) SF = 0 AND PP I/O BUFFER PREVIOUSLY
* RESERVED.
* (4) SF = 2 AND PP I/O BUFFER NOT PREVIOUSLY
* RESERVED.
* (5) SECTOR SPECIFICATION INVALID.
* (6) EOR, EOF, OR EOI ENCOUNTERED ON DIRECT READ
* WITH SECTOR COUNT (SF = 3).
* (7) NEXT TRACK IS NOT RESERVED, WHEN DIRECT
* TRANSFER HAS TO CROSS LOGICAL TRACK
* BOUNDARY.
* (8) LWA+1 LOAD .GT. FL (SF = 3 WITH FF BIT
* 38 = 1, OR SF = 6).
* (9) DIRECT TRANSFER OF SPECIFIED NUMBER OF
* SECTORS ATTEMPTED BEYOND CP FL.
* (10) FUNCTION FLAG SELECTION IS NOT LEGAL FOR
* THIS SUBFUNCTION.
* READ TO EOR FLAG (BIT 38) ALLOWED ONLY
* FOR SF=3.
* LAST SECTOR BUFFER FLUSH (BIT 37) ALLOWED
* ONLY FOR SF = 0, 2, 4.
* REWRITE FLAG (BIT 36) ALLOWED ONLY FOR
* SF = 0, 2, 4.
PPR PIOM,,PIP
AX1 42 GET SUBFUNCTION CODE
MX2 -12
SB4 X1-LCRS CHECK FOR CM RESIDENT CODE LOAD
SB5 X1-1
TNZ B4,(/ECS/PIO,ECS,/MONITOR/HNG) IF NOT CM FUNCTION
EQ PMR SWITCH TO PROGRAM MODE
ERRNZ REBS CODE DEPENDS ON VALUE
ERRNZ RESS-1 CODE DEPENDS ON VALUE
ERRNZ WESS-2 CODE DEPENDS ON VALUE
ERRNZ RDDS-3 CODE DEPENDS ON VALUE
ERRNZ WDDS-4 CODE DEPENDS ON VALUE
ERRNZ FLBS-5 CODE DEPENDS ON VALUE
PLFM SPACE 4,40
*** PLFM - PROCESS LOCAL FNT ENTRY.
*
* CREATE OR DELETE LOCAL FNT ENTRY IN NEGATIVE FL.
*
*T OR 12/ PLFM,6/,1/S,2/,3/SF,24/,12/ ADDR
*
*T,MB 42/ FN,18/
*
* S CREATE SPECIAL FILE USING ONE OF THE RESERVED FNT
* ENTRIES. SEE SYMBOL *SRFE* IN *PPCOM* FOR A LIST
* OF SPECIAL FILES.
*
* SF SUBFUNCTION -
* DLFS (0) DELETE LOCAL FNT ENTRY.
* DLCS (1) RETURN FILE COUNT.
* CRFS (2) CREATE LOCAL FNT ENTRY.
*
* ADDR NFL ADDRESS OF FNT ENTRY (SF = DLFS, DLCS).
*
* FN FILE NAME (SF = CRFS).
*
*
*T OR 12/ 0,12/ ADDR,12/,12/ COUNT,12/ STAT
*
* ADDR NFL ADDRESS OF LOCAL FNT ENTRY (SF = CRFS).
*
* COUNT NUMBER OF LOCAL FILES REMAINING ON SAME
* EQUIPMENT (SF = DLCS).
*
* STAT RETURN STATUS (SF = CRFS).
* 0 = FILE CREATED.
* 1 = FILE ALREADY EXISTS.
* 2 = LOCAL FILE LIMIT (MAXIMUM NFL REACHED).
* 4 = NFL INCREASE NEEDED.
*
*
* WHEN DELETING AN FNT ENTRY (SF = DLFS), IF THE NFL
* ADDRESS OF THE ENTRY MATCHES THE ADDRESS IN THE FIRST BYTE
* OF *EOCW* IN THE CONTROL POINT AREA, THAT FIELD IS CLEARED.
PPR PLFM,(/CME/PLF,CME,/0CME/PLF)
RCLM SPACE 4,10
*** RCLM - RECALL CPU.
*
* ENTRY
*T, OR 12/ RCLM,12/,12/,12/,12/
*
* EXIT
*T, OR 60/ 0
PPR RCLM
SA1 B7+CWQW CHECK RECALL STATUS
SA7 A5+ CLEAR OUTPUT REGISTER
SX6 1S4 SET INCREASED PRIORITY FOR JOB
SA6 IP
SB3 PPRX SET *RCC* RETURN ADDRESS
LX1 59-46
SB6 B7 SET EXCHANGE PACKAGE ADDRESS
PL X1,RCC IF TO RECALL CPU
EQ PPRX RETURN
RCPM SPACE 4
*** RCPM - REQUEST CPU.
*
* ENTRY
*T, OR 12/ RCPM,12/,12/,12/,12/
*
* EXIT
*T, OR 60/ 0
PPR RCPM
* ENTER HERE FROM RLMM FOR JOB STEP START.
SA1 B7+STSW READ STATUS
SA3 SMRL
SB3 PPRX SET *RCC* RETURN ADDRESS
MX0 -12
BX0 -X0*X3
SX5 B7 CONTROL POINT ADDRESS
LX0 7
AX1 57
BX5 X5-X0
SB6 X1+1
ZR X5,HNG IF STORAGE MOVE IN PROGRESS
ZR X1,RCP1 IF NO STATUS
NZ B6,HNG IF NOT *I* STATUS
SA2 A5-B1
LX1 41
BX6 X1*X2 CLEAR PP AUTO RECALL
SA6 A2
RCP1 SA7 A5 CLEAR OUTPUT REGISTER
SB6 B7 SET EXCHANGE PACKAGE ADDRESS
EQ RCC RECALL CPU
RDCM SPACE 4,25
*** RDCM - REQUEST DATA CONVERSION.
*
* ENTRY
*T, OR 12/ RDCM, 12/ SF, 36/
*
* SF = 0 - 6 (RCIS) - CONVERT INTEGER(S) TO F10.3 FORMAT.
* SF = 7 (RCDS) - CONVERT INTEGER TO F20.3 FORMAT.
* SF = 10 (RIDS) - INCREMENT PACKED DATE BY SPECIFIED TERM.
* SF = 11 (REPS) - ENCRYPT PASSWORD.
*
*
* 0 - 6 RCIS - CONVERT INTEGER(S) TO F10.3 FORMAT.
*
* CONVERT 30 BIT INTEGER TO DISPLAY CODE IN F10.3 FORMAT.
* CAUTION - ONLY NINE DIGITS OF ACCURACY ARE RETURNED. VALUES
* GREATER THAN 999999.999 ARE TRUNCATED TO THE LOW ORDER NINE
* DIGITS.
*
* ENTRY
*T, OR 12/ RDCM,12/ C,6/ M,6/ W,24/
* C = NUMBER OF VALUES TO CONVERT (1-6),
* IF C=0, ONLY THE VALUE IN MB+0 IS CONVERTED.
* M = WORD CONTAINING QUARTER NANOUNIT COUNT TO BE CONVERTED TO
* MILLIUNITS. THIS WORD IS A 60 BIT VALUE.
* MB+M-1 POINTS TO THE WORD REQUIRING CONVERSION.
* IF C=0, M IS IGNORED.
* W = WORD CONTAINING SRU ACCUMULATOR (1-6).
* MB+W-1 POINTS TO THE WORD REQUIRING CONVERSION.
* IF C=0, W IS IGNORED.
*
*T, MB+0 60/ 30 BIT INTEGER (RIGHT JUSTIFIED)
*T, MB+I 60/ 30 BIT INTEGER (RIGHT JUSTIFIED)
*T, MB+5 60/ 30 BIT INTEGER (RIGHT JUSTIFIED)
*
* EXIT
*T, OR 60/ 0
*
*T, MB+0 60/ CONVERSION
*T, MB+I 60/ CONVERSION
*T, MB+5 60/ CONVERSION
*
*
* 7 RDCS - CONVERT INTEGER TO F20.3 FORMAT.
*
* CONVERT A 60-BIT INTEGER TO DISPLAY CODE IN F20.3 FORMAT.
* CAUTION - ONLY 15 DIGITS OF ACCURACY ARE RETURNED. VALUES
* GREATER THAN 999999999999.999 ARE TRUNCATED TO THE LOW ORDER
* 15 DIGITS.
*
* ENTRY
*T, OR 12/ RDCM, 12/ RCDS, 6/, 6/ Q, 24/
* Q = CONVERT QUARTER NANOUNITS TO CYBER 176 CLOCK CYCLES FLAG.
*
*T, MB+0 60/ 60-BIT INTEGER
*
* EXIT
*T, OR 60/ 0
*
*T, MB+0 60/ CONVERSION (FIRST WORD)
*T, MB+1 60/ CONVERSION (SECOND WORD)
*
*
* 10 RIDS - INCREMENT CURRENT PACKED DATE BY SPECIFIED TERM.
*
* ENTRY
*T, OR 12/ RDCM, 12/ RIDS, 24/, 12/ TERM
* TERM - NUMBER OF DAYS TO ADD TO PACKED DATE.
*
* EXIT
*T, OR 60/ 0
*
*T, MB+0 42/ 0, 18/ NEW PACKED DATE
*
*
* 11 REPS - ENCRYPT PASSWORD.
*
* ENTRY
*T, OR 12/ RDCM, 12/ REPS, 36/
*
*T, MB+0 60/ PASSWORD
*
* EXIT
*T, OR 60/ 0
*
*T, MB+0 60/ ENCRYPTED PASSWORD
PPR RDCM,PMR,RDC,FEX
RECM SPACE 4,10
** RECM - RECALL PP REQUEST.
*
* ENTRY
*T, OR 12/ RECM,1/ ND,11/ RF,36/ RC
*T, MB 60/ IR
*T, MB+1 1/Q,59/ PAR
*
* IR = INPUT REGISTER OF PP, CONTROL POINT NEED NOT BE SET.
* ND = SET IF PP IS NOT TO BE DROPPED.
* RF = RECALL FUNCTION NUMBER AS DEFINED IN *COMSCPS*.
* RC = RECALL CRITERION, UNIQUE TO EACH RECALL FUNCTION.
* RF = RC = 0, IF TO SET 1 SECOND TIMED RECALL.
* Q = RECALL FLAG, SET BY *CPUMTR* WHEN CALL IS QUEUED.
* PAR = PARAMETER DATA TO BE PASSED TO ASSIGNED PP IN *MB*.
*
* EXIT
*T, OR 12/ 0,48/
*
* HANG CONDITIONS -
* RECALL FUNCTION IS UNDEFINED.
* NO-DROP OPTION SELECTED WHEN PP CALLED WITH AUTO-RECALL.
* PP REQUEST (MB) IS ZERO.
*
* NOTE -
* THE AUTO RECALL IN THE CALLING PP-S INPUT
* REGISTER IS PROPAGATED TO THE RECALLED REQUEST,
* AND THE AUTO-RECALL BIT (IF ANY) IS CLEARED FROM
* THE CALLING PP-S INPUT REGISTER IF THE NO-DROP
* OPTION IS NOT SELECTED.
PPR RECM
SA3 A5+2 FETCH PARAMETER WORD
LX1 59-47
BX6 X3
SA6 AQRA
SB3 REC5 *AQR* RETURN ADDRESS
SX0 B1
SA3 A5-B1 READ INPUT REGISTER
LX0 41
BX2 X3*X0 EXTRACT AUTO RECALL BIT
LX3 59-41
BX6 X3*X1
NG X6,HNG IF AUTO RECALL AND NO-DROP
NG X1,REC1 IF NO-DROP PP
SB3 .DPPM *AQR* RETURN ADDRESS
LX3 41-59
BX6 -X0*X3 REMOVE AUTO RECALL BIT
SA6 A3+
REC1 MX6 1 CLEAR DROP INHIBIT BIT
BX1 -X6*X1
BX0 X1
SA4 A5+B1
ZR X4,HNG IF PP CALL ZERO
BX6 X2+X4 PROPAGATE AUTO-RECALL BIT
AX1 48
SB4 X1-TRECL
PL B4,HNG IF CRITERION OUT OF RANGE
JP TREC+TRECL+B4
TREC BSS 0
LOC 0
+ ZR X0,REC2 IF DEFAULT CALL - (PTMF)
EQ HNG ILLEGAL CRITERION
+ EQ HNG (PCBF) - ILLEGAL FROM PP
+ SA1 RTCL COMPUTE EXTRACTION TIME
EQ REC6 (PTRF) - TIMED RECALL / NO ROLLOUT
+ SA1 RTCL COMPUTE EXTRACTION TIME
EQ REC3 (PTMF) - TIMED RECALL
+ EQ REC7 (PBMF) - BUFFER MANAGER RECALL
TRECL BSS 0
LOC *O
* ENTER HERE FROM *CPUCIO* TO QUEUE *CIO* REQUEST FOR
* SUSPENDED DETTACHED TERMINAL JOB.
* ENTER HERE FROM *PRQ* TO REQUEUE *1AJ* WHEN ACTIVITY
* ON JOB OR JOB INTERLOCK SET.
REC2 SA2 MSCL GET DEFAULT PP RECALL TIME
MX0 -12
AX2 24
BX2 -X0*X2
SX0 PTMF SET TIMED RECALL CRITERION
LX0 36
IX0 X2+X0
LX0 12
SA1 RTCL
REC3 MX3 -36 ADD TO REAL TIME CLOCK
BX1 -X3*X1
LX1 12
IX0 X0+X1
REC4 SA1 B7+STSW CHECK FOR ROLLOUT
R= X2,RQ SET RECALL QUEUE
LX1 59-24
PL X1,AQR IF ROLLOUT NOT SET
LX1 24-59
* PUT ENTRY IN RECALL AREA BUT NOT IN QUEUE WHEN ROLLOUT SET.
MX7 -4
NO
BX4 -X7*X1 NEXT FREE RECALL SLOT
SB4 B7+RCCW-1
BX7 X7*X1
SA3 B4+X4 READ NEXT FREE RECALL SLOT
SA6 A3+RECW-RCCW STORE REQUEST TO RECALL
SA4 AQRA GET PARAMETER WORD
MX6 1
BX6 X6+X4 SET RECALL BIT FLAG
SA6 A3+REPW-RCCW STORE PARAMETER WORD
SX3 X3+20B
IX7 X7+X3
SA7 A1
JP B3 EXIT
REC5 BX7 X7-X7 CLEAR *OR*
SA7 A5
EQ MTRX EXIT
REC6 MX3 -36
BX1 -X3*X1
LX1 12
IX0 X0+X1
R= X2,NRQ INHIBIT ROLLOUT
EQ AQR ASSIGN QUEUE REQUEST
REC7 MX3 -12
SA4 A5-B1
LX3 12
BX3 -X3*X0 CBT ORDINAL PASSED IN *RECM* CALL
AX3 12-CBTLS
MX2 -5
TA3 X3+LSLK,CBT
LX4 -18
LX2 18
BX4 -X2*X4 CONTROL POINT NUMBER OF CALLER
BX3 -X2*X3 CONTROL POINT NUMBER FROM CBT ENTRY
R= X2,BQ SET BUFFER MANAGER RECALL QUEUE
BX4 X4-X3 COMPARE CONTROL POINT NUMBERS
ZR X4,AQR IF RECALL STILL SET FOR THIS JOB
BX7 X7-X7
SA6 A5-B1 RESET INPUT REGISTER
SA1 A5+2 RESTORE MB+4
SA7 A5 CLEAR OR
BX7 X1
SA7 A5+5
EQ MTRX RESTART PSEUDO-PP
REQM SPACE 4,25
*** REQM - REQUEST EQUIPMENT.
*
* REQUEST ASSIGNMENT OF EQUIPMENT TO JOB.
*
* ENTRY
*T, OR 12/ REQM,12/ EQ,12/ SF,12/ EJT,12/
* EQ EST ORDINAL (IF 4000B + EQ, EJT IS PRESENT).
* SF SUBFUNCTION.
* = REQS TO REQUEST ACTIVE NON-MS EQUIPMENT.
* = RDES TO REQUEST DOWN EQUIPMENT.
* = RVES TO ASSIGN ANY EQUIPMENT.
* EJT EJT ORDINAL TO ASSIGN EQUIPMENT TO.
*
* EXIT
*T, OR 12/ 0,12/ ST,12/,12/,12/
* ST .NE. 0 IF EQUIPMENT ASSIGNED.
* ST = 0 IF EQUIPMENT NOT AVAILABLE.
* COUNTER IN *EACW* INCREMENTED, IF EQUIPMENT ASSIGNED TO
* CALLER.
*
*
* HANG CONDITIONS -
*
* INCORRECT EST ORDINAL.
* INCORRECT SUBFUNCTION.
PPR REQM
LX5 24
MX2 -9
BX0 -X2*X5 EST ORDINAL
LX5 59-47-24
TX3 X0,-ESTL
PL X3,HNG IF INCORRECT EST ORDINAL
CX2 X0,EST CONVERT EST ORDINAL TO OFFSET
TA2 X2+EQDE,EST READ EST ENTRY
LX1 36
TX4 B7,-SCA
SA3 A2+B1
ERRNZ EQDE+1-EQAE CODE DEPENDS ON VALUE
MX0 -12
NG X5,REQ1 IF ALTERNATE EJT SPECIFIED
MX1 12
ZR X4,REQ1 IF PP AT SYSTEM CONTROL POINT
SA1 B7+TFSW GET JOB EJT
REQ1 LX1 12
BX1 -X0*X1 EJT ORDINAL
BX6 X1+X3 INSERT EQUIPMENT ASSIGNMENT
BX3 -X0*X3
NZ X3,PPR1 IF EQUIPMENT ALREADY ASSIGNED
LX5 47-59-24
BX4 -X0*X5 EXTRACT SUBFUNCTION
LX3 X2
SB3 X4-1 CHECK SUBFUNCTION
LX2 59-49
PL X2,REQ2 IF EQUIPMENT ON OR IDLE
NO
LX2 1
REQ2 GT B3,B1,HNG IF INVALID SUBFUNCTION
ERRNZ RVES-2 CODE DEPENDS ON VALUE
PL B3,REQ3 IF NOT *REQS*
ERRNZ REQS CODE DEPENDS ON VALUE
BX2 X3+X2
NO
NG X2,PPR1 IF EQUIPMENT MASS STORAGE AND/OR DOWN
REQ3 NZ B3,REQ4 IF NOT SUBFUNCTION *RDES*
ERRNZ RDES-1 CODE DEPENDS ON VALUE
PL X2,PPR1 IF EQUIPMENT NOT DOWN
REQ4 SX7 B1
LX5 24+59-47
SA6 A3 STORE EQUIPMENT ASSIGNMENT
LX7 36
NG X5,PPR1 IF ALTERNATE EJT SPECIFIED
SA1 B7+EACW UPDATE ASSIGNED EQUIPMENT COUNT
SX6 B1
LX6 48
IX6 X1+X6
SA6 A1
EQ PPR1 RETURN
RJSM SPACE 4,20
*** RJSM - REQUEST JOB SEQUENCE NUMBER.
*
* ASSIGN A JOB SEQUENCE NUMBER.
*
* ENTRY
*T, OR 12/ RJSM,12/ SF,1/ F,11/ TABLE,12/,12/
*T, MB 24/,36/ QFT ENTRY VALUE
* SF = 0 IF REQUESTING QFT ENTRY.
* IF SF = 0, F = 1 IF SYSTEM JOB CALL (RESERVED QFT ENTRY
* WILL BE ASSIGNED IF TABLE FULL).
* TABLE = *PQFT*.
*
* EXIT (SF = 0)
*T, OR RESPONSE FROM *MTRM*
*T, MB 24/ SEQUENCE NUMBER,36/ QFT ENTRY VALUE
*
* EXIT (SF .NE. 0)
*T, OR 12/ 0,12/ SF,12/ PQFT,24/ SEQUENCE NUMBER
*T, MB 24/ SEQUENCE NUMBER,36/ QFT ENTRY VALUE
*
* *RJSM* HAS BEEN SET UP TO ALLOW A SITE TO AVOID GENERATING
* POTENTIALLY OFFENSIVE JSN-S BY THE SELECTION OF CHARACTERS
* WHICH ARE TO BE EXCLUDED FROM EACH CHARACTER POSITION OF
* JSN-S (VOWELS, FOR EXAMPLE).
PPR RJSM
SA4 JSNL FETCH CURRENT SEQUENCE NUMBER
SA3 A5+B1
MX0 -24
BX4 -X0*X4
BX7 X0*X1
BX7 X7+X4
LX4 36
MX0 -36
BX6 -X0*X3
BX6 X4+X6
BX4 X0*X1 GET SUBFUNCTION
SA6 A3+ SET SEQUENCE NUMBER IN MB
NZ X4,RJS1 IF NOT REQUESTING QFT ENTRY
SB6 RJS1 SET *MTRM* RETURN ADDRESS
EQ MTM0 REQUEST QFT ENTRY
RJS1 SA1 JSNL ADVANCE JOB SEQUENCE NUMBER
MX0 -6
SA7 A5 WRITE OR
SA2 RJSA+3 FOURTH CHARACTER EXCLUSION MASK
SB5 B0+
RJS2 BX3 -X0*X1 GET CHARACTER
BX4 X0*X1
AX3 X3,B5
SB6 X3+B1 INCREMENT TO NEXT CHARACTER
RJS2.1 AX7 X2,B6
LX7 -1
PL X7,RJS3 IF USABLE CHARACTER
SB6 B6+B1 SKIP A CHARACTER
NZ X7,RJS2.1 IF NO OVERFLOW
LX0 6
SB6 1RA-1 RESET CHARACTER
SX5 B5-18
RJS2.2 SB6 B6+1
AX7 X2,B6
LX7 -1
NG X7,RJS2.2 IF EXCLUDED CHARACTER
SX7 B6
LX7 X7,B5
BX1 X4+X7
SB5 B5+6
SA2 A2-B1 NEXT EXCLUSION MASK
NZ X5,RJS2 IF NOT END OF SEQUENCE NUMBER
EQ RJS4 WRITE NEXT SEQUENCE NUMBER
RJS3 SX3 B6+
LX3 X3,B5
BX1 X3+X4
RJS4 BX6 X1
SA6 A1 WRITE NEXT SEQUENCE NUMBER
EQ PPRX EXIT
* DEFINE THE RANGE OF CHARACTERS ALLOWABLE IN EACH CHARACTER
* POSITION IN JSN-S BY SETTING THE FIRST AND SECOND PARAMETERS
* OF THE *JSNMASK* MACRO FOR THAT POSITION TO THE LOWEST AND
* HIGHEST ALLOWABLE CHARACTERS FOR THAT POSITION.
* THE FIRST PARAMETER MUST BE EQUAL TO OR HIGHER THAN *A*, AND
* THE SECOND PARAMETER MUST BE EQUAL TO OR LOWER THAN *9*.
* THE LOW AND HIGH DEFAULTS ARE *A* AND *9*, RESPECTIVELY.
*
* TO EXCLUDE A CHARACTER FROM USE IN A PARTICULAR CHARACTER
* POSITION IN JSN-S, ADD IT TO THE LIST IN THE THIRD PARAMETER
* OF THE *JSNMASK* MACRO FOR THAT POSITION. TO ALLOW A
* CHARACTER TO BE USED, OMIT OR REMOVE IT FROM THE LIST.
*
* NOTE - IF THE LETTER *A* IS TO BE EXCLUDED, IT WILL ALSO BE
* NECESSARY TO CHANGE THE INITIAL JSN, WHICH CAN BE FOUND AT
* LABEL *.JSN* IN THE DECK *SET*.
RJSA BSS 0 JSN CHARACTER EXCLUSION MASKS
JSNMASK A,9,(0,1,2,3,4,5,6,7,8,9) 1ST CHARACTER MASK (X---)
JSNMASK A,9,(0,1,2,3,4,5,6,7,8,9) 2ND CHARACTER MASK (-X--)
JSNMASK A,9,(0,1,2,3,4,5,6,7,8,9) 3RD CHARACTER MASK (--X-)
JSNMASK A,9,(0,1,2,3,4,5,6,7,8,9) 4TH CHARACTER MASK (---X)
RLMM SPACE 4,25
*** RLMM - REQUEST LIMIT.
*
* ENTRY
*T,OR 12/ RLMM,12/ FN,18/0,18/VL
*
* FN SUBFUNCTION CODE.
* RLCO CLEAR OVERFLOW FLAGS.
* RLIT INCREMENT TIME LIMIT.
* RLIS INCREMENT JOB STEP SRU LIMIT.
* RLJS START JOB STEP.
* RLTL SET TIME LIMIT
* RLSL SET SRU LIMIT
* RLIA INCREMENT ACCOUNT BLOCK SRU LIMIT.
*
* VL VALUE OF INCREMENT OR LIMIT REQUESTED
* EXIT
*
*T,OR 52/ 0,8/ OF FOR SUBFUNCTION RLCO
* OF OVERFLOW FLAGS IN SRUW BEFORE CLEARING.
*
*T,OR 48/ 0,12/ EF FOR SUBFUNCTIONS RLIT AND RLIS
*
* EF ERROR FLAG (0 IF NO ERRORS)
*
*T,OR 60/ 0 FOR SUBFUNCTION RLJS
PPR RLMM
MX3 -18 GET VALUE REQUESTED
SB3 PPR1 PRESET RETURN ADDRESS
BX5 -X3*X1
LX1 24 GET SUBFUNCTION NUMBER
SB4 X1-TRLML
MX0 -30
PL B4,HNG IF ILLEGAL PROCESSOR
JP TRLM+TRLML+B4 JUMP TO PROCESSOR
** EXIT TO PROCESSOR WITH -
*
* (X0) = 30/-0,30/0
* (X3) = 42/-0,18/0
* (X5) = PARAMETER VALUE
* (B3) = RETURN ADDRESS
* SUBFUNCTION TABLE.
TRLM BSS 0
LOC 0
+ SA2 B7+SRUW
EQ RLM1 (RLCO) - CLEAR OVERFLOW FLAGS
+ SA1 B7+CPLW
EQ RLM2 (RLIT) - INCREMENT TIME LIMIT
+ SA1 B7+STLW
EQ RLM3 (RLIS) - INCREMENT JOB STEP SRU LIMIT
+ SA2 B7+SRUW
EQ RLM8 (RLJS) - START JOB STEP
+ SA2 B7+CPJW (RLTL) - SET TIME LIMIT
EQ RLM11
+ SA1 B7+SRJW (RLSL) - SET SRU LIMIT
EQ RLM12
+ SA1 B7+STLW
EQ RLM16 (RLIA) - INCREMENT ACCOUNT BLOCK SRU LIMIT
TRLML BSS 0
LOC *O
* RETURN AND CLEAR OVERFLOW FLAGS
RLM1 MX3 -9
LX2 19
BX7 -X3*X2 ISOLATE FLAGS FOR CALLER
BX6 X3*X2 CLEAR FLAGS
LX6 41
SA6 A2
JP PPR1 EXIT
* INCREMENT TIME LIMIT.
RLM2 BX6 X1
SB4 RLM2.1 SET *MSB* RETURN ADDRESS
SA2 CPTB CONVERT QUARTER NANOUNITS TO MILLIUNITS
EQ /PROGRAM/MSB MULTIPLY 60 BIT INTEGER
RLM2.1 SX2 1000 CONVERT INCREMENT TO MILLISECONDS
BX3 X6
IX5 X2*X5
SA4 B7+CPJW GET ACCUMULATOR AT JOB STEP START
SA1 B7+ALMW GET VALIDATION LIMIT
MX6 -6
BX4 -X0*X4 JOB START
LX6 30
LX4 8 RESTORE FIELD SIZE
IX3 X3+X5 REQUESTED NEW LIMIT
BX1 -X6*X1
BX6 X6+X1
ZR X6,STL IF UNLIMITED VALIDATION
LX1 -30+6+3 CONVERT AS COMCCVI BUT CONVERT TO SECONDS
SX6 X1+KTLI*10B (X6) = VALIDATION LIMIT IN SECONDS
IX6 X2*X6 CONVERT TO MILLISECONDS
IX6 X6+X4 VALIDATION LIMIT
IX1 X6-X3
PL X1,STL IF VALIDATION .GE. REQUESTED
SA1 A5-B1 CHECK FOR *1AJ* CALL
BX7 X3 SAVE NEW LIMIT
SA2 B7+EECW
LX1 18
BX3 X6 SET LIMIT TO VALIDATION LIMIT
SX6 B1+
LX6 48
SX1 X1-3R1AJ
NZ X1,RLM2.2 IF NOT A *1AJ* CALL
BX3 X7 SET LIMIT TO NEW LIMIT
BX6 X6+X2 SET VALIDATION EXTENDED FLAG
SA6 A2+
RLM2.2 SA1 B7+SRUW SET VALIDATION LIMIT FLAG
MX2 1
BX6 X1+X2
SA6 A1
EQ STL SET TIME LIMIT
* INCREMENT JOB STEP SRU LIMIT.
RLM3 MX2 -42 GET CURRENT COMPUTED LIMIT
BX4 -X2*X1
* CONVERT REQUESTED INCREMENT TO MICRO-UNITS*10.
SX1 10000000/200B
LX1 7
IX3 X1*X5 REQUESTED INCREMENT (MICRO-UNITS*10)
JP RLM13
* BEGIN JOB STEP.
RLM8 MX4 -59 CLEAR TIME LIMIT VALIDATION FLAG
BX6 -X4*X2
SA1 B7+MP3W ENSURE SRU ACCUMULATION ENABLED
SA6 A2
BX6 -X4*X1
SA6 A1
MX4 -42 ISOLATE SRU ACCUMULATOR
BX4 -X4*X2
SA1 B7+SRJW SET SRU AT JOB STEP START
BX2 X4
AX2 12
BX6 X0*X1 CLEAR OLD VALUE
BX6 X2+X6 INSERT NEW ONE
SA6 A1
SB3 RLM9 SET RETURN ADDRESS
LX1 30
MX6 -3
BX5 -X3*X1 JOB STEP LIMIT
BX6 -X6+X5 ADD LOWER THREE BITS FOR CHECK
BX1 X6+X3
SX3 -B1 PRESET UNLIMITED JOB STEP LIMIT
ZR X1,RLM13 IF UNLIMITED JOB STEP LIMIT
SX2 10000000/200B
MX3 -18 RESTORE MASK
LX2 7
SA1 B7+STLW GET ACCOUNT BLOCK LIMIT
LX1 18
BX1 -X3*X1
IX3 X2*X5 JOB STEP LIMIT (MICRO-UNITS*10)
IX6 X2*X1
IX6 X6-X4 ACCOUNT BLOCK LIMIT - ACCUMULATOR
IX5 X6-X3 REMAINING - NORMAL JOB STEP
PL X5,RLM13 IF ENOUGH IN ACCOUNT BLOCK FOR JOB STEP
BX3 X6 USE REMAINING AS JOB STEP LIMIT
PL X6,RLM13 IF NOT OVER ACCOUNT BLOCK LIMIT
R= X3,TSLI ALLOW USER TO RAISE LIMIT
IX3 X3*X2 CONVERT TO MICRO-UNITS*10
EQ RLM13 SET SRU LIMIT
RLM9 SA4 B7+CPTW GET CP ACCUMULATOR
BX6 X4
SB4 RLM9.1 SET *MSB* RETURN ADDRESS
SA2 CPTB CONVERT QUARTER NANOUNITS TO MILLIUNITS
EQ /PROGRAM/MSB MULTIPLY 60 BIT INTEGER
RLM9.1 BX4 X6
MX2 30
SA1 B7+CPJW SET TIME AT JOB STEP START
AX6 8
BX2 X2*X1
BX6 X6+X2
SA6 A1+
MX3 -18 GET JOB STEP TIME LIMIT
AX1 30
BX5 -X3*X1
BX1 X3-X5
SB3 .RCPM *STL* RETURN ADDRESS
ZR X1,STL IF LIMIT INDEFINITE
RLM10 SX2 1000 CONVERT LIMIT VALUE TO MILLISECONDS
IX5 X2*X5
IX3 X4+X5 NEW COMPUTED TIME LIMIT IN MILLISECONDS
JP STL SET TIME LIMIT
* SET TIME LIMIT.
RLM11 LX2 30
BX1 X3*X2 CLEAR OLD VALUE
BX6 X1+X5 INSERT NEW LIMIT VALUE
LX6 30
SA6 A2
BX1 X3-X5
ZR X1,STL IF INDEFINITE
BX4 -X0*X6
LX4 8
JP RLM10
* SET SRU LIMIT.
RLM12 BX4 -X0*X1 SRU ACCUMULATOR AT JOB STEP START
LX4 12 RESTORE 42 BIT VALUE
LX1 30
BX1 X3*X1 CLEAR OLD VALUE
SX2 10000000/200B
BX6 X1+X5 INSERT NEW VALUE
BX1 X3-X5 CHECK FOR INDEFINITE REQUEST
LX6 30
SA6 A1+
ZR X1,RLM13 IF INDEFINITE
LX2 7
IX3 X2*X5 CONVERT TO MICRO-UNITS*10
* SET SRU LIMIT, CLEAR LIMIT FLAGS.
* (X3) = INCREMENT (MICRO-UNITS*10).
* (X4) = ACCUMULATOR (MICRO-UNITS*10).
RLM13 SA2 B7+FPFW GET SRU VALIDATION LIMIT
MX1 -12
LX2 11-47
BX2 -X1*X2
SX0 B0+ CLEAR SRU VALIDATION LIMIT FLAG
BX5 -X1-X2
SX1 10000000/200B
MX6 42
LX1 7 MULTIPLY BY 200B
LX6 -18 PRESET UNLIMITED SRU VALIDATION
ZR X5,RLM14 IF SRU VALIDATION UNLIMITED
LX2 6 CONVERT VALIDATION TO SRU-S
SX6 KSLI*10B-KSLI*10B/100B*100B APPLY REST OF SRU FORMULA
IX2 X6+X2 VALIDATION IN SRU-S
IX6 X1*X2 CONVERT TO MICRO-UNITS*10
IX2 X3+X4 ADD INCREMENT TO LIMIT
IX1 X6-X2 VALIDATION LIMIT - REQUESTED LIMIT
PL X1,RLM14 IF WITHIN ALLOWED RANGE
SA1 A5-B1 CHECK FOR *1AJ* CALL
LX1 18
SX1 X1-3R1AJ
MX0 1 SET SRU VALIDATION LIMIT FLAG
ZR X1,RLM14 IF *1AJ* ALLOW FULL INCREMENT
IX3 X6-X4 USE REMAINING VALIDATION AMOUNT
RLM14 LX0 57-59
SA1 B7+STLW SET NEW JOB STEP SRU LIMIT
MX2 18 USED FOR LOW ORDER 42-BIT FIELD
BX2 X2*X1 CLEAR OLD VALUE
PL X3,RLM15 IF NOT INFINITE
IX3 X6-X4 COMPUTE REMAINING VALIDATION AMOUNT
RLM15 IX5 X3+X4 NEW SRU LIMIT
BX6 X5+X2 INSERT NEW VALUE
SA6 A1
MX5 2
SA1 B7+SRUW CLEAR SRU LIMIT FLAG
LX5 57-59
BX6 -X5*X1
BX6 X6+X0 CONDITIONAL SET SRU VALIDATION LIMIT FLAG
SA6 A1
JP B3
* INCREMENT ACCOUNT BLOCK SRU LIMIT.
RLM16 MX2 18
SX3 10000000/200B
BX0 X2*X1 EXTRACT ACCOUNT BLOCK SRU LIMIT
LX3 7
BX4 -X2*X1 EXTRACT COMPUTED JOB STEP SRU LIMIT
BX0 -X2+X0
IX3 X3*X5 REQUESTED INCREMENT (MICRO-UNITS*10)
ZR X0,RLM13 IF ACCOUNT BLOCK SRU UNLIMITED
LX5 -18
IX6 X5+X1 ADD REQUESTED INCREMENT TO LIMIT
SA6 A1 UPDATE ACCOUNT BLOCK SRU LIMIT
EQ RLM13 SET SRU LIMIT
ROCM SPACE 4,35
** ROCM - ROLLOUT JOB.
*
* ENTRY
*T, OR 12/ ROCM,1/C,11/ OP,12/ CPN,24/
* C = 1, IF JOB AT CP/PCP *CPN* TO BE ROLLED.
* C = 0, IF CP TO WHICH PP IS ASSIGNED TO BE ROLLED. IF AN
* ALTERNATE CP ASSIGNMENT IS IN EFFECT, THE ALTERNATE CP
* WILL BE USED. ROLLOUT OF A PCP MUST BE REQUESTED WITH
* *C = 1* (ALTERNATE PCP ASSIGNMENT WILL NOT BE
* PROCESSED WITH *C = 0*).
* OP BIT SELECTION(S) SPECIFYING OPTION(S) REQUESTED
* (DEFINED IN *COMSCPS*).
* *ROTE* = BIT 36 SET = TIMED/EVENT ROLLOUT FLAG TO
* BE SET IN *STSW*.
* *RODS* = BIT 37 SET = DISABLE JOB FLAG TO BE SET
* IN *STSW*.
* *ROSC* = BIT 38 SET = SCP ROLLOUT FLAG TO BE SET
* IN *STSW*.
* *ROSU* = BIT 39 SET = SUSPEND JOB FLAG TO BE SET
* IN *STSW*.
* *ROPR* = BIT 40 SET = ROLL JOB TO PSEUDO-CONTROL
* POINT IF POSSIBLE.
* CPN CP/PCP NUMBER OF JOB TO BE ROLLED IF *C* SELECTED.
*
*T, MB 24/,12/ T,12/ EQ,12/ EV
* T TIMED/EVENT ROLLOUT TIME.
* EQ TIMED/EVENT EST ORDINAL.
* EV TIMED/EVENT EVENT DESCRIPTOR.
* MESSAGE BUFFER PARAMETERS ARE MEANINGFUL ONLY WHEN THE *ROTE*
* OPTION IS SELECTED.
*
* EXIT
*T, OR 12/ 0,12/ ST,36/
* ST = 0 IF FUNCTION ACCEPTED, OTHERWISE NON-ZERO.
*
* HANG CONDITIONS -
* INVALID CONNECTION STATUS IN EJT ENTRY.
* SELECTED ROLLOUT OPTIONS ARE INVALID DUE TO THE JOB-S
* CONNECTION STATUS.
ERRNZ ROSR CHECK SCHEDULER ROLLOUT BIT
ERRNZ ROTE-1 CHECK TIMED/EVENT ROLLOUT BIT
ERRNZ RODS-2 CHECK DISABLE JOB BIT
ERRNZ ROSC-4 CHECK SCP ROLLOUT BIT
ERRNZ ROSU-10B CHECK SUSPEND JOB BIT
ERRNZ ROPR-20B CHECK PSEUDO-ROLL BIT
PPR ROCM
* CHECK CP/PCP NUMBER SPECIFIED, DUAL CPU ACTIVITY, AND JOB
* PRESENT AT CP/PCP.
BX7 X1
LX7 59-47
PL X7,ROC0.1 IF CP/PCP NOT SPECIFIED BY CALLER
LX7 59-35-59+47
AX7 48 SPECIFIED CP/PCP NUMBER
LX7 7
TB5 X7-200B,-SCA
SB7 X7+ CP ADDRESS
LT B5,ROC0.1 IF CP SPECIFIED
TB7 B5,PCPA SET PCP ADDRESS
ROC0.1 SA3 B7+TFSW GET EJT ORDINAL
BX7 X1 SET REJECT STATUS
MX0 -12
LX3 -48
BX3 -X0*X3
SB6 ROC0.2 SET *CPE* RETURN ADDRESS
ZR X3,PPR1 IF NO JOB PRESENT
TNO /DCP/CPE,DCP IF DUAL CPU PRESENT
* GET JOB STATE AND CONNECTION STATUS AND PROCESS TIMED/EVENT
* PARAMETERS.
ROC0.2 SB4 TROCL
CX6 X3,EJT CONVERT EJT ORDINAL INTO OFFSET
TA3 X6+JSNE,EJT
MX4 -11
BX3 -X4*X3
SA4 B7+TERW
LX3 -7
BX6 X4
LX5 59-36
SB6 X3+ CONNECTION STATUS
MX1 30
PL X5,ROC1 IF NOT TIMED/EVENT ROLLOUT
SA2 A5+1 GET TIMED/EVENT PARAMETERS
BX4 X1*X4 CLEAR OLD TIMED/EVENT DATA
MX6 -24
BX6 -X6*X2 ISOLATE EST ORDINAL AND EVENT DESCRIPTOR
AX2 24
BX2 -X0*X2 ISOLATE TIME
LX2 21
BX6 X2+X6 MERGE TIME, EST ORDINAL AND EVENT
BX6 X4+X6 MERGE TIMED/EVENT DATA INTO *TERW*
* VALIDATE ROLLOUT OPTION FOR CURRENT CONNECTION STATUS.
ROC1 SA2 B6+TROC
SX1 EXJS*2
LX5 59-47-59+36
AX3 59-6
BX4 X1-X3
BX2 X2*X5
SX1 PCJS*2
BX3 X1-X3
MX1 1
NZ X2,HNG IF INVALID OPTION
GE B6,B4,HNG IF INVALID CONNECTION STATUS
PL X5,ROC3 IF CP/PCP NOT SPECIFIED BY CALLER
* CHECK FOR JOB CONDITIONS INHIBITING ROLLOUT IF CALLER
* SPECIFIED CP/PCP.
SB3 PPRX SET *RPC* EXIT ADDRESS
ZR X4,ROC2 IF *EXJS* AND NOT ADVANCING/INTERLOCKED
NZ X3,PPR1 IF NOT *PCJS* OR ADVANCING/INTERLOCKED
ROC2 SA3 CMCL CHECK FOR MOVE IN PROGRESS
BX2 X5
LX3 -48
LX2 -24-59+47
BX4 X3-X2
BX4 -X0*X4
BX3 -X0*X2
ZR X4,PPR1 IF CP/PCP MOVING
SA1 B7+JCIW CHECK FOR ROLLOUT INHIBITED
LX1 59-39
NG X1,PPR1 IF *CPUPFM* ACTIVE
TB4 B7,-SCA
SB4 -B4
SX7 B0+
SB6 B1 SET *RPC* ENTRY CONDITION
* INITIATE ROLLOUT OF PCP.
ROC3 TA1 STSW,SCA CHECK FOR AVAILABLE RECALL SLOT
PL B4,ROC3.1 IF NOT PCP ROLL
MX4 -4
BX4 -X4*X1
ZR X4,PPR1 IF NO RECALL SLOTS AVAILABLE
ROC3.1 SA6 A4 UPDATE *TERW*
PL B4,ROC4 IF NOT PCP ROLL
SA7 A5 RELEASE CALLING PP
SB4 B7 PCPA ADDRESS FOR *RPC*
SB5 X3 PCP NUMBER
TEQ (/PCP/RPC,PCP,/MONITOR/HNG) IF PCP ROLL
* CPUCIO ENTRY FOR DETACHED INTERACTIVE I/O.
* (B6) = -1.
* (X5) = ROLLOUT CONTROL OPTIONS.
ROC4 SA1 B7+STSW
SX0 B1+ CLEAR EXISTING PSEUDO-ROLLOUT ALLOWED FLAG
LX0 31-0
BX1 -X0*X1
MX0 3 EXTRACT CPU STATUS
BX6 X1
BX3 X0*X1
AX6 24 EXTRACT CURRENT ROLLOUT STATUS
MX0 -2
BX0 -X0*X6
MX2 5
BX6 -X0
NZ X0,ROC5 IF ROLLOUT REQUESTED ALREADY SET
MX6 -1
ZR X3,ROC5 IF NULL STATUS
MX6 -2
ROC5 LX6 24
LX0 59-0
BX6 -X6+X1
BX0 X2*X0
LX5 59-40-59+47
BX2 X2*X5 GET ROLLOUT FLAGS
MX4 -4
BX2 -X0*X2 DISALLOW PSEUDO-ROLL IF MULTIPLE *ROCM*-S
LX2 31-59
BX6 X6+X2
SA6 A1+
LX1 -4
BX3 -X4*X1 REQUESTS IN PQ, RQ, BQ, CQ PLUS TAPES
LX1 -4
BX0 -X4*X1 REQUESTS IN BQ AND CQ
IX3 X3-X0 REQUESTS IN PQ, RQ, AND TAPE ACTIVITY
ZR X3,ROC11 IF NO REQUESTS IN PQ OR RQ
MX0 -7
SX3 RQRL
MX4 -12
SB4 B0
* DELETE REQUESTS FROM RQ AND PQ.
ROC6 ZR X3,ROC10 IF END OF QUEUE
SA2 X3 READ NEXT QUEUE ENTRY
BX3 -X4*X2
ROC7 BX5 X0*X3
SB5 X5
NE B5,B7,ROC6 IF NOT THIS CP
SA1 X3 READ NEXT ENTRY
NZ B4,ROC9 IF PROCESSING PQ
LX1 12
BX6 -X4*X1
SX6 X6-PTRF
LX1 -12
ZR X6,ROC6 IF ROLLOUT INHIBITED
BX2 X4*X2 DELINK ENTRY FROM SYSTEM-WIDE QUEUE
BX3 -X4*X1
ROC8 BX6 X3+X2
SA6 A2
EQ ROC7 CONTINUE
ROC9 BX6 X4*X1
NZ X6,ROC6 IF PRIORITY PP REQUEST
BX2 X4*X2 DELINK ENTRY FROM SYSTEM-WIDE QUEUE
BX3 -X4*X1
EQ ROC8 COMPLETE PROCESS
ROC10 SX3 PQRL
SB4 B4+1
EQ B4,B1,ROC6 IF PQ NOT PROCESSED
ROC11 SX5 B0 SET NO CLEAR OF ROLLOUT CPU STATUS
NG B6,.DCPM IF *CPUCIO* REQUEST
SB6 B1 SET TO CLEAR OUTPUT REGISTER
EQ .DCPM DROP CPU
SPACE 4,10
* THE FOLLOWING TABLE CONTAINS AN ENTRY FOR EACH CONNECTION
* STATUS. EACH ENTRY INDICATES WHAT ROLLOUT CONTROL OPTIONS
* ARE INVALID FOR JOBS HAVING THE CORRESPONDING CONNECTION
* STATUS. THE OPTION IS INVALID IF THE FLAG IS SET.
TROC BSS 0
VFD 12/ROSU+RODS,48/0 CONNECTION STATUS = *NICS*
VFD 12/RODS,48/0 CONNECTION STATUS = *DTCS*
VFD 12/0,48/0 CONNECTION STATUS = *OLCS*
TROCL EQU *-TROC MAXIMUM CONNECTION STATUS + 1
ERRNZ TROCL-MXCS ERROR IN TABLE DEFINITION
RPNM SPACE 4,30
*** RPNM - READ P REGISTER/BREAKPOINT.
*
* READ P REGISTER.
*
* ENTRY
*T, OR 12/ RPNM,30/,18/ 0
*
* EXIT
*T, OR 12/ 0,12/ STAT,12/ CP,24/ P
*
* STAT BYTE 0 OF STSW OF THE ACTIVE JOB.
* CP CONTROL POINT NUMBER OF JOB CURRENTLY ACTIVE ON
* CPU-0 (UNLESS ASSIGNED JOB IS ACTIVE).
* P PROGRAM ADDRESS OF ACTIVE JOB.
*
* BREAKPOINT.
*
* ENTRY
*T, OR 12/ RPNM,30/ 0,18/ BA
*
* BA BREAKPOINT ADDRESS.
*
* EXIT
*T, OR 12/ 0,3/ ST,33/ 0,12/ RV
*
* BA IS COMPARED TO THE PROGRAM COUNTER OF THE JOB TO
* WHICH THE CALLING PP IS ASSIGNED.
*
* ST = 0 IF COMPARISON FAILS.
* ST = CPU STATUS FROM *STSW* IF COMPARISON SUCCEEDS.
* RV = 1 IF COMPARISON FAILS.
* RV = 0 IF COMPARISON SUCCEEDS.
PPR RPNM,,,DCP
SA3 CPAL+A0 ACTIVE JOB
SA2 B2 PROGRAM COUNTER OF ACTIVE XP
AX3 24
NZ X1,RPN1 IF BREAKPOINT REQUEST
SA1 X3+STSW CONTROL POINT-S STATUS
AX2 36 CURRENT PROGRAM COUNTER
LX3 24 ACTIVE EXCHANGE PACKAGE
BX2 X3+X2
MX4 12
BX1 X4*X1 EXTRACT CONTROL POINT STATUS
LX1 -12
BX7 X1+X2 FORM RESPONSE
EQ PPR1 RETURN
RPN1 SB5 X3 CP ASSIGNED TO CPU-0
EQ B5,B7,RPN2 IF JOB IS EXECUTING
SA2 B7 GET PROGRAM COUNTER FROM CP AREA
RPN2 SA3 B7+STSW CONTROL POINT STATUS
AX2 36
BX0 X2-X1 COMPARE PROGRAM COUNTER TO BA
LX3 59-56
SX7 B1 PRESET COMPARISON FAILED
NG X3,PPR1 IF SUBCONTROL POINT ACTIVE
NZ X0,PPR1 IF PROGRAM COUNTER DOES NOT MATCH BA
EQ .DCPM DROP THE CPU
RPPM SPACE 4,30
*** RPPM - REQUEST PPU TO BE ASSIGNED.
*
* ENTRY
*T, OR 12/ RPPM, 8/, 1/A, 1/S, 1/D, 1/P, 36/
*T, MB 60/ IR
*T, MB+1 1/Q,59/ PAR
*
* IR INPUT REGISTER OF PP, CONTROL POINT NEED NOT BE SET.
* P PP PRIORITY REQUEST.
* D IF SET, DROP PP.
* S IF SET, SPECIAL *1VP* REQUEST FOR PARTNER PP-S.
* THIS REQUEST MUST ALSO BE A PRIORITY REQUEST.
* A IF SET, ASSIGN PP TO SYSTEM CONTROL POINT.
* Q RECALL FLAG, SET BY *CPUMTR* WHEN CALL IS QUEUED.
* PAR PARAMETER DATA TO BE PASSED TO ASSIGNED PP IN *MB*.
*
* EXIT
*T, OR 12/ 0, 12/ ST, 12/ ST2, 24/
* ST = ADDRESS OF ASSIGNED PPU-S INPUT REGISTER.
* ST = ADDRESS OF REQUEST IN RECALL STACK IF NOT ASSIGNED.
* ST = 0 IF RECALL STACK FULL.
* ST = 0 IF PRIORITY REQUEST AND NO PP AVAILABLE.
* ST = 1 IF *CIO* REQUEST PROCESSED.
* ST2 = ADDRESS OF SECOND ASSIGNED PP-S INPUT REGISTER, IF
* PARTNER PAIR ASSIGNED FOR SPECIAL *1VP* REQUEST.
*
* NOTE -
* THE AUTO RECALL BIT IN THE CALLING PP-S INPUT
* REGISTER IS PROPAGATED TO THE RECALLED REQUEST
* AND THE AUTO RECALL BIT IS REMOVED FROM THE
* CALLING PP-S INPUT REGISTER, IF THE DROP-PP
* OPTION IS SET.
*
* A REJECT STATUS WILL BE RETURNED ON A PRIORITY PP REQUEST
* IF THERE IS CURRENTLY A PRIORITY REQUEST IN THE QUEUE.
* THIS LIMITS THE NUMBER OF PRIORITY REQUESTS IN THE QUEUE
* TO ONE, WHICH WILL ALWAYS BE AT THE TOP, AND WILL BE THE
* NEXT ENTRY TO BE PROCESSED WHEN A PP BECOMES AVAILABLE.
* THE PRIORITY PP REQUEST OPTION IS MEANT TO BE USED
* ONLY BY PP-S THAT REQUIRE KNOWLEDGE OF THE PP TO WHICH
* ITS REQUEST WAS ASSIGNED (SUCH AS *DSD*, *1MT*, ETC.).
* USAGE OF THIS OPTION FOR OTHER PURPOSES WILL SERIOUSLY
* IMPACT PERFORMANCE, AND MAY CAUSE SYSTEM DEADLOCK.
*
* * PP HUNG.* WILL OCCUR IF MB = 0.
PPR RPPM
* NOTE - THIS SWITCH LOGIC IS ALSO USED IN THE *DCP* BLOCK.
LX5 59-39
TX4 A5-1,-SP
PL X5,RPP0.1 IF NOT FORCED CP ASSIGNMENT
TB7 SCA SET SYSTEM CONTROL POINT
RPP0.1 ZR X4,RPP1 IF PSEUDO PP CALL
TB4 B7,-SCA
ZR B4,RPP1 IF REQUEST FOR SYSTEM CONTROL POINT
SB4 A0-CPAL-1
SA4 -B4
AX4 24
SB4 X4+
NE B4,B7,RPP1 IF NO CPU SWITCH REQUIRED
TNO /DCP/SAX,DCP
RPP1 SA4 A5+B1 READ REQUEST
LX1 59-36
SB3 RPP7 *APQ* *ACQ* RETURN ADDRESS
ZR X4,HNG IF PP CALL ZERO
SB4 B0+ PRESET REQUEST TO BE QUEUED
PL X1,RPP2 IF NOT PRIORITY PP REQUEST
SB4 -1 PRESET NO QUEUEING
RPP2 LX1 36-37
PL X1,RPP4 IF NO DROP PP
SX7 B1
SB3 .DPPM *APQ* *ACQ* RETURN ADDRESS
SA1 A5-B1 READ INPUT REGISTER
LX7 41
BX5 X7*X1 PROPAGATE AUTO RECALL STATUS
BX4 X4+X5
BX6 -X7*X1 CLEAR AUTO RECALL BIT FROM *IR*
SA6 A1
RPP4 SA1 B7+STSW FETCH CP STATUS WORD
MX0 -4
BX6 X4
LX1 -4
LX4 18
BX2 -X0*X1 RECALL COUNT
LX1 4-48
BX3 -X0*X1 PP COUNT
LX1 48-60+59-24
NZ X7,RPP5 IF DROP OPTION
TB5 B7,-SCA
SX0 X2-NPPCP-1
ZR B5,RPP5 IF SYSTEM CONTROL POINT
NO
IX0 X0+X3
RPP5 PL X0,PPR1 IF LIMIT OF PP-S
NG X1,RPP10 IF ROLLOUT REQUESTED
RPP6 SX3 X4-3RCIO
ZR X3,RPP8 IF *CIO* REQUEST
SA3 A5+2 MB+1 TO MB
BX7 X3
SA7 APQA
SX3 X4-3R1VP
NZ X3,APQ IF NOT *1VP* REQUEST
SA2 A5 CHECK FOR SPECIAL REQUEST
LX2 59-38
TNG X2,(/NVE/AVP,NVE,/MONITOR/HNG) IF SPECIAL REQUEST
EQ APQ ASSIGN PP
RPP7 ZR X1,RPP9 IF NO PP ASSIGNED AND PRIORITY REQUEST
BX7 X1 RETURN ASSIGNMENT ADDRESS
LX7 36
SA7 A5 STORE *OR*
EQ MTRX RETURN
RPP8 SA4 A5+2 SET MESSAGE BUFFER
SA6 /CPUCIO/IR SET IR
BX7 X4
SA7 A6+B1 CLEAR MB
ERRNZ /CPUCIO/MB-/CPUCIO/IR-1
EQ /CPUCIO/CPC PROCESS *CIO* REQUEST
RPP9 BX7 X7-X7
NG X1,PPR1 IF REJECT ON STORAGE MOVE
MX0 -18 CHECK FOR PRIORITY REQUEST PENDING
SA2 PQRL
SA2 X2
AX2 18
BX2 -X0*X2
NZ X2,PPR1 IF REQUEST ALREADY PENDING
SB3 MTRX *AQR* RETURN ADDRESS
SX2 PRP
* NOTE - PARAMETER WORD IS NOT SAVED IN *REPW*.
EQ AQR ASSIGN QUEUE REQUEST
* PUT REQUEST IN CONTROL POINT AREA IF ROLLOUT SET.
RPP10 TX3 A5-1,-SP
ZR X3,RPP6 IF PSEUDO-PP REQUESTING
SX3 X4-3R1AJ
ZR X3,RPP6 IF *1AJ*
NG B4,RPP9 IF PRIORITY PP REQUEST
LX1 24-59
MX0 -4
BX4 -X0*X1 NEXT FREE RECALL SLOT
SB4 B7+RCCW-1
BX7 X0*X1
SA3 B4+X4 READ NEXT FREE RECALL SLOT
SA6 A3+RECW-RCCW STORE REQUEST TO RECALL
SA4 A5+2 GET MB+1
SX3 X3+20B
MX6 1
IX7 X7+X3
BX6 X6+X4 SET RECALL FLAG
SA7 A1 UPDATE STSW
SA6 A3+REPW-RCCW STORE PARAMETER WORD
SX1 A3 SET ASSIGNMENT ADDRESS
JP B3 COMPLETE PROCESSING
RSJM SPACE 4
*** RSJM - REQUEST JOB SCHEDULER.
*
* ENTRY
*T, OR 12/ RSJM, 12/,10/,1/R,1/F,12/,12/
* R IF SET, RESET THE RECALL CYCLE.
* F IF SET, QFT/EJT SCHEDULING SHOULD BE PERFORMED.
*
* EXIT
*T, OR 60/ 0
PPR RSJM
* SET QFT/EJT SCHEDULING FLAG IN SCHEDULER CALL IF SET IN
* *RSJM* REQUEST.
SA7 A5 CLEAR OUTPUT REGISTER
SX0 B1
SA1 SJSA
LX0 24-0
BX6 X0*X5
BX6 X6+X1
SA6 A1
LX0 25-24
BX6 -X5*X0 ISOLATE FORCED RESET FLAG
NZ X6,SJS IF FORCED RESET NOT SPECIFIED
ERRNZ SJSB-SJSA-1 CODE ASSUMES *SJSB* = *SJSA* + 1
SA6 A6+B1
EQ SJS
RTCM SPACE 4,105
*** RTCM - REQUEST TRACK CHAIN.
*
* ENTRY
*T, OR 12/RTCM, 1/C, 2/, 9/ EQ, 12/ TK, 1/ A, 2/, 3/ AL, 18/ SC
* C SET CHECKPOINT UPON FUNCTION COMPLETION.
* EQ EST ORDINAL.
* IF EQ IS ZERO TK BYTE CONTAINS SELECTION PARAMETER.
* TK CURRENT TRACK IF EQ IS NON-ZERO
* TK DEVICE SELECTION PARAMETER AS FOLLOWS. (EQ IS ZERO)
* 0 = TMPS = SELECT TEMP DEVICE.
* 1 = INPS = SELECT INPUT FILE DEVICE.
* 2 = OUTS = SELECT OUTPUT FILE DEVICE.
* 3 = ROLS = SELECT ROLLOUT DEVICE.
* 4 = DAYS = SELECT USER DAYFILE DEVICE.
* 5 = PRIS = SELECT PRIMARY FILE DEVICE.
* 6 = LOCS = SELECT LOCAL FILE DEVICE.
* 7 = LGOS = SELECT LGO FILE DEVICE.
* 10 = SROS = SECONDARY ROLLOUT FILE DEVICE.
* 11 = R1OS = RESERVED FOR CDC.
* 12 = R2OS = RESERVED FOR CDC.
* 13 = TNDS = TEMPORARY NON-SHARED FILE DEVICE.
* A ACCESS LEVEL SELECTION SPECIFIED.
* AL ACCESS LEVEL.
* SC SECTOR COUNT.
* -1 IF ALL SECTORS ON DEVICE REQUESTED.
* 0 IF REQUESTING 1 TRACK.
*
* A DEVICE ELIGIBLE FOR SELECTION MUST BE *ON*, HAVE ENOUGH
* SPACE TO SATISFY THE REQUEST, MUST NOT HAVE ERROR IDLE SET,
* AND, IF ACCESS LEVEL SELECTION IS SPECIFIED, MUST HAVE
* THE REQUESTED ACCESS LEVEL WITHIN THE DEVICE ACCESS LEVEL
* RANGE. THE ALGORITHM SEARCHES FOR AN ELIGIBLE DEVICE
* STARTING WITH THE NEXT EQUIPMENT AFTER THE LAST ELIGIBLE
* DEVICE. THE PRESENCE OF A COPY OF THE SYSTEM ON A DEVICE
* IS CONSIDERED AS ADDITIONAL ACTIVITY IN THOSE DECISIONS
* MADE BASED ON ACTIVITY. THIS IS DONE SUCH THAT A DEVICE
* WITHOUT A COPY OF THE SYSTEM WILL USUALLY BE GIVEN PREFERENCE
* OVER A DEVICE WITH THE SYSTEM PROVIDING ACTIVITY IS EQUAL.
* HOWEVER, NON-SYSTEM DEVICES HAVE NO PREFERENCE OVER
* SYSTEM DEVICES IN COMPARING ACTIVITIES OF ZERO.
*
* THE SELECTION ALGORITHM IS AS FOLLOWS.
*
* 1) SELECT ELIGIBLE DEVICE WITH .GT. 1/8 OF SPACE LEFT
* AND NO ACTIVITY SET.
* 2) SELECT ELIGIBLE DEVICE WITH .GT. 1/8 OF SPACE LEFT.
* IF *ROLS* OR *SROS* DEVICE SELECTION, SELECT DEVICE
* WITH .GT. 1/8 OF SPACE LEFT AND LEAST ACTIVITY.
* 3) SELECT BEST ELIGIBLE DEVICE OF ALLOCATION TYPE.
* 4) IF SELECTION TYPE IS *TMPS*, REJECT REQUEST AND EXIT.
* IF SELECTION TYPE IS NOT *SROS*, SET SELECTION TYPE
* *TMPS* AND RETURN TO STEP 1. IF SELECTION TYPE IS
* *SROS*, SET SELECTION TYPE *ROLS* AND RETURN TO STEP
* 1.
*
* EXIT
*T, OR 12/ 0, 12/ EQ, 12/ TKE, 12/ SCE, 12/ TKF
*
* EQ EST ORDINAL ASSIGNED.
* ( = 4000 IF NO EQUIPMENT ASSIGNED).
* TKE TRACK NUMBER OF EOI SECTOR.
* SCE SECTOR NUMBER OF EOI SECTOR.
* (REJECT REASON CODE IF NO TRACKS ALLOCATED).
* ( = 1 IF REJECT BECAUSE OF TRACK LIMIT).
* ( = 2 IF REJECT BECAUSE OF ACCESS LEVEL CONFLICT).
* TKF FIRST TRACK ASSIGNED.
* ( = 0 IF NO TRACKS ALLOCATED).
* BITS 59 AND 57 OF OR WILL BE SET ALONG WITH THE SELECTED
* EST ORDINAL IF MONITOR SELECTED AN INDEPENDENT
* SHARED DEVICE.
*
* *PP HUNG.* WILL OCCUR FOR THE FOLLOWING CONDITIONS.
* 1) EQUIPMENT NOT MASS STORAGE OR OUT OF EST.
* 2) ECS ADDRESS OF MST SET WHEN NOT MULTI-MAINFRAME MODE.
* 3) IF CURRENT TRACK IS NOT RESERVED OR IS LINKED.
* 4) IF DEVICE SELECTION PARAMETER IS OUT OF RANGE.
*
* NOTE - IF THE REQUEST IS FOR AN INDEPENDENT SHARED DEVICE,
* THE MST, TRT, AND DIT ARE READ FROM THE DEVICE TO CM BY *1RU*
* BEFORE THE RTCM IS ISSUED TO CPUMTR.
PPR RTCM,(/ISD/CHR,ISD,/LSPMMF/CME,LSPMMF,/MONITOR/PMR),RTC
,,FEX
SCDM SPACE 4,10
** SCDM - SEARCH CENTRAL DIRECTORY.
*
* ENTRY
*T,OR 12/ SCDM, 48/ 0
*T,MB 42/ EPN, 18/ 0
* EPN ENTRY POINT NAME.
*
* EXIT
*T,OR 42/ 0, 18/ADDR
*T,MB 42/ EPN, 18/ 0
* ADDR ADDRESS OF PST ENTRY.
* EPN ENTRY POINT NAME.
PPR SCDM,,,FEX
SA2 A5+1 GET ENTRY POINT NAME
SB6 PPR1 SET *SCD* RETURN ADDRESS
EQ SCD SEARCH CENTRAL DIRECTORY
SCSM SPACE 4,45
*** SCSM - SET CHANNEL STATE.
*
* ENTRY
*T, OR 12/ SCSM,12/ EQ,12/ CH1,12/ SF,12/ CH2
*
* EQ EST ORDINAL.
* CH1 CHANNEL 1 DATA.
* FOR SUBFUNCTIONS *UPSS*, *DWSS*, *SUCS*, *SICS*,
* *DAPS* AND *EAPS* -
* CHANNEL NUMBER (INCLUDING CONCURRENCY FLAG).
* FOR SUBFUNCTION *SCHS* -
* DATA TO BE STORED IN CHANNEL 1 FIELD.
* FOR SUBFUNCTION *RVCS* -
* UNUSED.
* SF SUBFUNCTION.
* UPSS = 0 = REINSTATE CHANNEL.
* DWSS = 1 = REMOVE CHANNEL FROM SYSTEM USE.
* SCHS = 2 = SET CHANNEL DATA.
* SUCS = 3 = SET *UP* CHANNEL STATE.
* SICS = 4 = SET *IDLE* CHANNEL STATE.
* RVCS = 5 = REVERSE CHANNELS IN MST.
* DAPS = 6 = DISABLE ACCESS PATH.
* EAPS = 7 = ENABLE ACCESS PATH.
* CH2 CHANNEL 2 DATA.
* FOR SUBFUNCTION *SCHS* -
* DATA TO BE STORED IN CHANNEL 2 FIELD.
* FOR SUBFUNCTIONS *UPSS*, *DWSS*, *SUCS*, *SICS*,
* *RVCS*, *DAPS* AND *EAPS* -
* UNUSED.
*
* EXIT
*T, OR 12/ 0,12/ ST,36/
*
* ST REPLY STATUS.
*
* FOR SUBFUNCTION *UPSS* -
* EQ IF REQUEST HONORED.
* 0 IF REQUEST REJECTED DUE TO NO PP AVAILABLE
* FOR BUFFERED DRIVER OR *1MV*.
*
* FOR SUBFUNCTION *DWSS* -
* EQ IF REQUEST HONORED. 4000 BIT SET IF
* CHANNEL IS GLOBALLY DOWN.
* 0 IF REQUEST REJECTED DUE TO *1MV* ACTIVE ON
* DEVICE OR CHANNEL SPECIFIC REQUESTS
* PRESENT.
*
* FOR SUBFUNCTIONS *SCHS*, *SUCS*, *SICS*, *RVCS* AND
* *EAPS* -
* EQ THERE ARE NO REJECT CONDITIONS FOR THESE
* SUBFUNCTIONS.
*
* FOR SUBFUNCTION *DAPS* -
* EQ IF REQUEST HONORED.
* 0 IF REQUEST REJECTED DUE TO NO ALTERNATE
* PATH TO NON-DOWN DEVICE.
*
* *PP HUNG* WILL OCCUR FOR THE FOLLOWING CONDITIONS -
*
* 1. UNDEFINED SUBFUNCTION.
* 2. INVALID EST ORDINAL.
* 3. NON-MASS STORAGE EST ORDINAL SPECIFIED FOR ANY
* SUBFUNCTION OTHER THAN *UPSS*, *DWSS*, *SCHS* OR *SUCS*.
* 4. CHANNEL NOT DEFINED FOR SPECIFIED DEVICE FOR ANY
* SUBFUNCTION OTHER THAN *SCHS* OR *RVCS*.
PPR SCSM
BX7 X1
LX1 -12
MX0 -12
BX2 -X0*X1 SUBFUNCTION
SB4 X2-TSCSL
PL B4,HNG IF INVALID SUBFUNCTION
SB6 X2
LX1 -12
BX2 -X0*X1 CHANNEL NUMBER (CHANNEL 1 DATA)
LX1 -12
TB5 ESTL
BX1 -X0*X1
SB3 X1 EST ORDINAL
GE B3,B5,HNG IF EST ORDINAL TOO LARGE
SB5 B3-NOPE
SB4 B6-SCHS
CX3 X1,EST CONVERT EST ORDINAL TO OFFSET
MX6 -6
TA3 X3+EQDE,EST
BX5 -X0*X3
LX5 3 MST ENTRY ADDRESS
EQ B4,B0,SCS4 IF SUBFUNCTION *SCHS*
PL B5,SCS0 IF EST ORDINAL IN RANGE
NZ B3,HNG IF NOT EST ORDINAL ZERO
BX4 X3
MX1 -12
LX4 -12
BX4 -X1*X4 DEVICE MNEMONIC
SB5 B6-RVCS
SB4 X4-2RRD
ZR B4,HNG IF *RD* PSEUDO-EQUIPMENT
EQ SCS1 CONTINUE
SCS0 SB4 B6-SUCS
SB5 B6-RVCS
LE B4,B0,SCS1 IF DEVICE MAY BE NON-MASS STORAGE
ERRNZ DWSS-UPSS-1 CODE DEPENDS ON VALUE
ERRNZ SCHS-DWSS-1 CODE DEPENDS ON VALUE
ERRNZ SUCS-SCHS-1 CODE DEPENDS ON VALUE
PL X3,HNG IF NOT MASS STORAGE DEVICE
SCS1 ZR B5,SCS3 IF CHANNEL NOT SPECIFIED
LX3 -24
BX1 -X0*X3
SB5 24 SET CHANNEL BYTE SHIFT COUNT
ZR X1,SCS2 IF CHANNEL 2 NOT PRESENT
BX4 X2-X1
BX4 -X6*X4
ZR X4,SCS3 IF CHANNEL 2 MATCHES SPECIFIED CHANNEL
SCS2 LX3 -12
BX4 X2-X3
SB5 36 ADJUST CHANNEL BYTE SHIFT COUNT
BX4 -X6*X4
NZ X4,HNG IF CHANNEL 1 DOESN-T MATCH
SCS3 SX1 3000B CHANNEL STATE MASK
LX1 B5 POSITION CHANNEL STATE MASK
SA3 A3 REREAD EST ENTRY WORD *EQDE*
BX1 X1*X3 CHANNEL STATE
SB4 48+1
SB4 B4-B5
SCS4 JP TSCS+B6 ENTER SUBFUNCTION PROCESSOR
* ENTER PROCESSOR WITH -
*
* (A3) = ADDRESS OF EST ENTRY WORD *EQDE*.
* (A5) = PP OUTPUT REGISTER ADDRESS.
* (B4) = 48+1-B5.
* (B5) = CHANNEL BYTE SHIFT COUNT.
* (B6) = SUBFUNCTION.
* (X0) = MASK OF -12.
* (X1) = CHANNEL STATE POSITIONED AS IN EST ENTRY.
* (X2) = CHANNEL NUMBER (CHANNEL 1 DATA).
* (X3) = EST ENTRY WORD *EQDE*.
* (X5) = MST ENTRY ADDRESS (IF MASS STORAGE).
* (X6) = MASK OF -6.
* (X7) = PP OUTPUT REGISTER WITH BYTE 0 CLEAR.
TSCS BSS 0
BSS 0 FORCE UPPER
UPSS EQU *-TSCS
UPSS EQU //UPSS ENSURE SUBFUNCTION CORRECT
SB6 SCS11 *SCH* EXIT ADDRESS
EQ SCS10 REINSTATE CHANNEL
BSS 0 FORCE UPPER
DWSS EQU *-TSCS
DWSS EQU //DWSS ENSURE SUBFUNCTION CORRECT
SA4 X5+STLL
EQ SCS20 REMOVE CHANNEL FROM SYSTEM USE
BSS 0 FORCE UPPER
SCHS EQU *-TSCS
SCHS EQU //SCHS ENSURE SUBFUNCTION CORRECT
SA4 A5
BX4 -X0*X4 CHANNEL 2 DATA
EQ SCS30 SET CHANNEL DATA
BSS 0 FORCE UPPER
SUCS EQU *-TSCS
SUCS EQU //SUCS ENSURE SUBFUNCTION CORRECT
SB6 PPR1 *SCH* EXIT ADDRESS
EQ SCS40 SET *UP* CHANNEL STATE
BSS 0 FORCE UPPER
SICS EQU *-TSCS
SICS EQU //SICS ENSURE SUBFUNCTION CORRECT
SB6 PPR1 *SCH* EXIT ADDRESS
EQ SCS50 SET *IDLE* CHANNEL STATE
BSS 0 FORCE UPPER
RVCS EQU *-TSCS
RVCS EQU //RVCS ENSURE SUBFUNCTION CORRECT
SA1 X5+DALL
EQ SCS60 REVERSE CHANNELS IN MST
BSS 0 FORCE UPPER
DAPS EQU *-TSCS
DAPS EQU //DAPS ENSURE SUBFUNCTION CORRECT
SX1 B0
EQ SCS70 DISABLE ACCESS PATH
BSS 0 FORCE UPPER
EAPS EQU *-TSCS
EAPS EQU //EAPS ENSURE SUBFUNCTION CORRECT
SX1 4000B
EQ SCS80 ENABLE ACCESS PATH
BSS 0 FORCE UPPER
TSCSL EQU *-TSCS
* SUBFUNCTION *UPSS* - REINSTATE CHANNEL.
SCS10 LX1 B4
PL X1,PPR1 IF CHANNEL NOT DOWN ON DEVICE
SX6 B1
EQ SCH SET *IDLE* CHANNEL STATE
SCS11 SB6 PPR1 *RCB* EXIT ADDRESS
EQ RCB RECONSTRUCT CHANNEL ACCESS BYTE IN MST
* SUBFUNCTION *DWSS* - REMOVE CHANNEL FROM SYSTEM USE.
SCS20 LX1 B4
NG X1,SCS26 IF CHANNEL STATE IS DOWN
LX4 59-43
PL X3,SCS24 IF NOT MASS STORAGE
PL X4,SCS22 IF *1MV* NOT ACTIVE ON DEVICE
SCS21 SX7 B0 SET REJECT STATUS
EQ PPR1 EXIT
SCS22 SA1 X5+DILL
LX1 -24
BX1 -X0*X1 *PUT* ORDINAL
MX6 -6
LX1 PUTLS
ZR X1,SCS24 IF NON-BUFFERED DEVICE
TA4 X1+UNCT,PUT
SCS23 BX1 -X0*X4 NEXT CBT ORDINAL
ZR X1,SCS24 IF END OF SCAN
LX1 CBTLS
TA4 X1+IOLK,CBT
SA1 A4-IOLK+HSLK
LX4 -24
LX1 59-58
PL X1,SCS23 IF NOT CHANNEL SPECIFIC REQUEST
SA1 A4-IOLK+PAD4
LX1 -54
BX1 X2-X1
BX1 -X6*X1
ZR X1,SCS21 IF REQUEST IS FOR IDLED CHANNEL
EQ SCS23 CHECK NEXT QUEUE ENTRY
SCS24 SB6 SCS25 *SCH* RETURN ADDRESS
SX6 3
EQ SCH SET *DOWN* CHANNEL STATE
SCS25 SB6 SCS26 *RCB* RETURN ADDRESS
EQ RCB RECONSTRUCT MST CHANNEL ACCESS BYTE
SCS26 TX1 ESTL
SX3 NOPE-1
SCS27 SX3 X3+B1 INCREMENT EST ORDINAL
BX4 X3-X1
NZ X4,SCS28 IF NOT END OF SCAN
SX1 B1+ SET GLOBAL DOWN STATUS
LX1 47-0
BX7 X7+X1
EQ PPR1 EXIT
SCS28 CX4 X3,EST CONVERT EST ORDINAL TO OFFSET
MX6 -6
TA4 EQDE+X4,EST
PL X4,SCS27 IF NOT MASS STORAGE
LX4 59-47
LX5 X4,B1
PL X4,SCS29 IF CHANNEL 1 NOT PRESENT AND ENABLED
NG X5,SCS29 IF CHANNEL 1 DOWN
LX4 -48
BX4 X4-X2
BX4 -X6*X4
ZR X4,PPR1 IF CHANNEL IN USE ON DEVICE
SCS29 LX5 59-35-59+47-1
LX4 X5,B1
PL X5,SCS27 IF CHANNEL 2 NOT PRESENT AND ENABLED
NG X4,SCS27 IF CHANNEL 2 DOWN
LX5 -48
BX5 X5-X2
BX5 -X6*X5
ZR X5,PPR1 IF CHANNEL IN USE ON DEVICE
EQ SCS27 CHECK NEXT EST ENTRY
* SUBFUNCTION *SCHS* - SET CHANNEL DATA.
SCS30 MX1 -24
LX1 24
BX6 X1*X3 CLEAR CHANNEL FIELDS
LX2 12 POSITION CHANNEL 1 DATA
BX2 X4+X2 MERGE WITH CHANNEL 2 DATA
LX2 24
BX6 X2+X6 MERGE NEW CHANNEL DATA
SA6 A3 UPDATE EST ENTRY
SB6 PPR1 SET *RCB* EXIT ADDRESS
SA3 A3+ REREAD EST ENTRY
EQ RCB RECONSTRUCT MST CHANNEL ACCESS BYTE
* SUBFUNCTION *SUCS* - SET *UP* CHANNEL STATE.
SCS40 SX6 B0+
EQ SCH SET *UP* CHANNEL STATE
* SUBFUNCTION *SICS* - SET *IDLE* CHANNEL STATE.
SCS50 NZ X1,PPR1 IF CHANNEL NOT UP
SX6 B1+
EQ SCH SET *IDLE* CHANNEL STATE
* SUBFUNCTION *RVCS* - REVERSE CHANNELS IN MST.
SCS60 BX4 -X0*X1
BX1 X0*X1
BX6 X4
AX4 6
LX6 6
BX4 X4+X6
BX4 -X0*X4
BX6 X4+X1
SA6 A1
EQ PPR1 EXIT
* SUBFUNCTIONS *DAPS* - DISABLE ACCESS PATH.
SCS70 SB4 B5-12
LX4 X3,B4
PL X4,SCS21 IF NO ALTERNATE ACCESS
LX4 1
NG X4,SCS21 IF ALTERNATE ACCESS IS DOWN
* SUBFUNCTIONS *EAPS* - ENABLE ACCESS PATH.
SCS80 SX6 4000B
LX6 B5
BX6 -X6*X3 CLEAR ENABLED BIT
LX1 B5
BX6 X1+X6 SET ENABLED FLAG IF SUBFUNCTION *EAPS*
SA6 A3+ UPDATE EST ENTRY
EQ PPR1 EXIT
RCB SPACE 4,10
** RCB - RECONSTRUCT CHANNEL ACCESS BYTE IN MST.
*
* ENTRY (A3) = EST ENTRY ADDRESS.
* (B6) = RETURN ADDRESS.
* (X0) = MASK OF -12.
* (X3) = *EQDE* WORD OF EST ENTRY.
* (X5) = MST ENTRY ADDRESS.
*
* USES X - 0, 1, 2, 3, 4, 6.
* A - 2, 3, 6.
* B - 3, 5.
RCB SB5 X2
TB3 EST
SB3 A3-B3
NG X3,RCB0 IF MASS STORAGE
NE B3,B0,RCB5 IF NOT *RD* DEVICE
ERRNZ RDEQ CODE DEPENDS ON VALUE
RCB0 MX6 60
LX3 59-47
MX1 60
LX4 X3,B1
PL X3,RCB1 IF CHANNEL 1 NOT PRESENT AND ENABLED
NG X4,RCB1 IF CHANNEL 1 DOWN
LX3 59-41-59+47
NG X3,RCB1 IF CHANNEL 1 IS CONCURRENT
AX3 54 CHANNEL 1
SX6 X3+
RCB1 LX4 59-35-59+47-1
LX3 X4,B1
PL X4,RCB2 IF CHANNEL 2 NOT PRESENT AND ENABLED
NG X3,RCB2 IF CHANNEL 2 DOWN
LX4 59-29-59+35
AX4 54 CHANNEL 2
NG X4,RCB2 IF CHANNEL 2 IS CONCURRENT
SX1 X4+
RCB2 BX3 X1
SA2 X5+DALL
LX3 6
BX4 X3+X6
PL X4,RCB4 IF BOTH CHANNELS AVAILABLE
BX4 X1*X6
PL X4,RCB3 IF SINGLE CHANNEL PRESENT
SX4 B0+
RCB3 SX3 X4+
LX4 6
BX4 X3+X4
RCB4 BX4 -X0*X4
BX1 X0*X2 UPDATE CHANNEL ACCESS BYTE IN MST
BX6 X1+X4
SA6 A2
RCB5 SA3 A3 RESTORE *X3*
SX2 B5 RESTORE *X2*
JP B6 EXIT
SCH SPACE 4,15
** SCH - SET CHANNEL STATE.
*
* ENTRY (A3) = EST ENTRY ADDRESS.
* (B5) = CHANNEL BYTE SHIFT COUNT.
* (B6) = EXIT ADDRESS.
* (X0) = MASK OF -12.
* (X3) = WORD *EQDE* OF EST ENTRY.
* (X6) = CHANNEL STATE TO BE SET.
*
* USES X - 1, 4, 6.
* A - 6.
* B - 3.
SCH SX1 3000B CHANNEL STATE MASK
LX1 B5
BX4 -X1*X3 CLEAR CURRENT CHANNEL STATE
SB3 B5+9
LX6 B3
BX6 X6+X4 SET NEW CHANNEL STATE
SA6 A3
SA3 A3 UPDATED *EQDE*
JP B6 EXIT
SCTM SPACE 4,30
*** SCTM - SET SYSTEM CONTROL PARAMETERS.
*
* ENTRY
*T, OR 12/ SCTM,12/ SF,24/ P2,12/ P1
*
* SF SUBFUNCTION CODE.
* CCSS CONVERT CPU SCHEDULING PARAMETERS.
*
* P1 SERVICE CLASS FOR SF = CCSS.
*
* P2 RESERVED.
*
* EXIT
*T, OR 12/ 0,12/ ST,36/ 0
*
* ST = 0 IF FUNCTION PERFORMED.
*
* *PP HUNG.* WILL OCCUR FOR THE FOLLOWING CONDITIONS.
*
* 1) ILLEGAL SUBFUNCTION.
* 2) SERVICE CLASS OUT OF RANGE (CCSS).
PPR SCTM
BX2 X1 GET SUBFUNCTION
AX2 36
SB4 X2-TSCTL
PL B4,HNG IF ILLEGAL SUBFUNCTION
JP TSCT+TSCTL+B4 JUMP TO PROCESSOR
* SUBFUNCTION TABLE.
TSCT BSS 0
LOC 0
+ MX6 -12
ERRNZ *-CCSS TABLE POSITION DEPENDS ON VALUE
BX4 -X6*X1 GET SERVICE CLASS
EQ SCT1 (CCSS) - CONVERT CPU SCHEDULING PARAMETERS
TSCTL BSS 0
LOC *O
* *CCSS* - CONVERT CPU SCHEDULING PARAMETERS.
SCT1 ZR X4,HNG IF ZERO SERVICE CLASS
SX6 X4-MXJC
PL X6,HNG IF INCORRECT SERVICE CLASS
SB3 SCT2 SET *CCP* RETURN ADDRESS
EQ CCP CONVERT CPU SCHEDULING PARAMETERS
* CHECK CONTROL POINTS FOR JOBS WITH CPU PRIORITY UPDATE
* REQUIRED. JOBS WITH JOB ADVANCE SET ARE BYPASSED. *JACM*
* PROCESSING WILL UPDATE THE CPU PRIORITY WHEN JOB ADVANCE IS
* CLEARED.
SCT2 SB7 200B INITIALIZE CONTROL POINT ADDRESS
SCT3 SA1 B7+TFSW GET EJT ORDINAL
SA3 B7+CWQW GET CPU SCHEDULING PARAMETERS
MX6 -12
MX7 -9
LX1 -48
LX3 -27
BX1 -X6*X1 EJT ORDINAL
BX7 -X7*X3 *JCB* OFFSET
ZR X1,SCT4 IF CONTROL POINT NOT OCCUPIED
TA2 X7+CSJT,JCB GET SERVICE CLASS CPU PRIORITY
LX3 27
UX0,B4 X3 UNPACK CPU PRIORITY
SX7 B4+
LX0 59-45
AX7 3 JOB CPU PRIORITY WITHOUT FLAGS
NG X0,SCT4 IF PRIORITY NOT SET FROM SERVICE CLASS
AX2 48 SERVICE CLASS CPU PRIORITY
IX6 X7-X2
ZR X6,SCT4 IF CURRENT PRIORITY MATCHES SERVICE CLASS
CX6 X1,EJT SET EJT ENTRY OFFSET
TA1 X6+JSNE,EJT GET JOB ADVANCE STATUS
SX5 X2 SET CPU PRIORITY
LX1 59-6
SB3 SCT4 SET *SPR* RETURN ADDRESS
PL X1,SPR IF JOB ADVANCE NOT SET
SCT4 SB7 B7+200B ADVANCE CONTROL POINT ADDRESS
TX7 B7,-SCA
NZ X7,SCT3 IF NOT SYSTEM CONTROL POINT
EQ PPR1 CLEAR OUTPUT REGISTER AND EXIT
SFBM SPACE 4
*** SFBM - SET FILE BUSY.
*
* ENTRY
*T, OR 12/ SFBM,12/,12/ EQ,6/,18/ ADDR
*T, MB 42/ FILE NAME,18/
* ADDR NFL ADDRESS OF FNT ENTRY.
* EQ IF EQ .NE. 0, SET IT IN THE EST ORDINAL
* FIELD OF THE FST IF THE FILE IS NOT BUSY. THE
* FST IS NOT SET BUSY WHEN THIS OPTION IS USED.
*
*
* EXIT
*T, OR 12/ 0,12/ ST,36/ 0
* ST = 0 IF FILE WAS NOT PREVIOUSLY BUSY.
* ST = 1 IF FILE WAS PREVIOUSLY BUSY.
* ST = 2 IF COMPARISON FAILED.
*
* *PP HUNG.* WILL OCCUR FOR THE FOLLOWING CONDITIONS.
* 1) IF ADDRESS BEYOND NFL SIZE
PPR SFBM
SA3 B7+FLSW GET NFL/100
MX0 -RMSK
AX3 RSHF
BX2 -X0*X3 RA / 100
MX0 -18
AX3 36
LX3 6
SB4 X3 NFL SIZE
BX3 -X0*X1 NFL ADDRESS
SB6 X1
GT B6,B4,HNG IF BEYOND NFL SIZE
LX2 6
SX7 B1
IX2 X2-X3 ABSOLUTE ADDRESS FNT
IX3 X2+X7 ABSOLUTE ADDRESS FST
ERX4 X3 READ FST
BX5 X7*X4
BX6 -X7*X4 CLEAR BUSY BIT
LX7 36 SET BUSY STATUS
ZR X5,PPR1 IF BUSY
MX0 12
LX1 24
BX5 X0*X1
ERX1 X2 READ FNT
LX7 1 SET NO COMPARE STATUS
SA4 A5+B1 READ COMPARE WORD FROM MESSAGE BUFFER
BX4 X1-X4
LX4 -12
AX4 6
NZ X4,PPR1 IF NO COMPARE
ZR X5,SFB1 IF NO EST ORDINAL CHANGE
SX7 B1
BX6 -X0*X6
BX6 X7+X6
BX6 X5+X6
SFB1 EWX6 X3 SET FST BUSY
BX7 X7-X7 SET RESPONSE
JP PPR1 EXIT
SJCM SPACE 4,50
*** SJCM - SELECT JOB CONTROL PARAMETERS.
*
* ENTRY
*T, OR 12/ SJCM,12/ SF,24/ P2,12/ P1
*
* SF SUBFUNCTION CODE.
* CPRS SET CPU PRIORITY.
* CPUS SELECT CPU FOR JOB.
* SCTS SET JOB CONTROL FLAG(S).
* CCTS CLEAR JOB CONTROL FLAG(S).
* SSIS SET SUBSYSTEM IDENTIFICATION.
* SBKS SET PP BREAKPOINT.
* CBKS CLEAR PP BREAKPOINT.
* SAPS SET *CPUPFM* ACTIVE.
* CAPS CLEAR *CPUPFM* ACTIVE.
* SSPS SET SCHEDULING PARAMETER INDEX.
*
* P1 CPU PRIORITY FOR SF = CPRS.
* 0 = SET CPU PRIORITY TO SERVICE CLASS VALUE.
*
* P1 CPU SELECTION FOR SF = CPUS.
* 0 = USE ANY CPU.
* 2 = USE CPU 0 ONLY.
* 1 = USE CPU 1 ONLY.
*
* P1 6 BIT MASK FOR SF = SCTS, CCTS.
* (APPLIED TO *JCIW* BITS 18 - 23).
*
* P1 SUBSYSTEM IDENTIFICATION FOR SF = SSIS.
*
* P1 CP NUMBER (OPTIONAL) FOR SF = SBKS.
*
* P1 SCHEDULING PARAMETER INDEX FOR SF = SSPS.
*
* P2 PP NAME (LEFT JUSTIFIED) FOR SF = SBKS.
*
* EXIT
*T, OR 12/ 0,12/ ST,36/ 0
*
* ST = 0 IF FUNCTION COMPLETE.
* ST = 1 IF FUNCTION REJECTED (SF = SBKS, CBKS ONLY).
* BREAKPOINT DISABLED (*0BK*/*7BK* NOT CM RESIDENT).
* ATTEMPT TO SET BREAKPOINT WHEN ONE ALREADY SET.
* ATTEMPT TO CLEAR BREAKPOINT WHEN NONE IS SET.
* LIBRARY IS LOCKED (*SYSEDIT* RUNNING).
*
* *PP HUNG.* WILL OCCUR FOR THE FOLLOWING CONDITIONS.
* 1) REQUESTED CPU PRIORITY .GE. *MPRS* (CPRS).
* 2) REQUESTED CPU PRIORITY .LT. *LJCS* (CPRS).
* 3) REQUESTED CPU SELECTION .GT. 2 (CPUS).
PPR SJCM
MX3 -12
BX5 -X3*X1 EXTRACT PARAMETER
LX1 11-47 POSITION TO SUBFUNCTION
MX6 -6
SA2 B7+JCIW GET JOB CONTROL WORD
BX1 -X3*X1 EXTRACT SUBFUNCTION
BX6 -X6*X5
SB4 X1-TSJCL
PL B4,HNG IF ILLEGAL SUBFUNCTION
JP TSJC+TSJCL+B4 JUMP TO PROCESSOR
** EXIT TO PROCESSOR WITH-
*
* (A2) = ADDRESS OF *JCIW*.
* (X2) = CONTENTS OF *JCIW*.
* (X3) = 48/-0,12/0.
* (X5) = PARAMETER VALUE.
* (X6) = LOWER 6 BITS OF PARAMETER VALUE.
* (X7) = 0.
* SUBFUNCTION TABLE
TSJC BSS 0
LOC 0
ERRNZ *-CPRS TABLE POSITION DEPENDS ON VALUE
+ SA3 B7+CWQW GET CPU PRIORITY
EQ SJC1 (CPRS) - SET CPU PRIORITY
ERRNZ *-CPUS TABLE POSITION DEPENDS ON VALUE
+ SA1 B7+CWQW GET CPU ASSIGNMENT FLAGS
EQ SJC2 (CPUS) - SELECT CPU FOR JOB
ERRNZ *-SCTS TABLE POSITION DEPENDS ON VALUE
+ LX6 23-5 POSITION BIT MASK
BX6 X6+X2 SET REQUESTED BITS
EQ SJC5 (SCTS) - SET JOB CONTROL FLAG(S)
ERRNZ *-CCTS TABLE POSITION DEPENDS ON VALUE
+ LX6 23-5 POSITION BIT MASK
BX6 -X6*X2 CLEAR REQUESTED BITS
EQ SJC5 (CCTS) - CLEAR JOB CONTROL FLAG(S)
ERRNZ *-SSIS TABLE POSITION DEPENDS ON VALUE
+ LX3 35-11 POSITION MASK TO BYTE 2
LX5 35-11 POSITION PARAMETER TO BYTE 2
EQ SJC4 (SSIS) - SET SUBSYSTEM IDENTIFICATION
ERRNZ *-SBKS TABLE POSITION DEPENDS ON VALUE
+ SX6 1
EQ SJC6 (SBKS) - SET PP BREAKPOINT
ERRNZ *-CBKS TABLE POSITION DEPENDS ON VALUE
+ SX6 -1
EQ SJC6 (CBKS) - CLEAR PP BREAKPOINT
ERRNZ *-SAPS TABLE POSITION DEPENDS ON VALUE
+ SX6 1
EQ SJC12 (SAPS) - SET *CPUPFM* ACTIVE
ERRNZ *-CAPS TABLE POSITION DEPENDS ON VALUE
+ SX6 B0+
EQ SJC12 (CAPS) - CLEAR *CPUPFM* ACTIVE
ERRNZ *-SSPS TABLE POSITION DEPENDS ON VALUE
+ SA2 B7+TFSW GET EJT ORDINAL
EQ SJC13 (SSPS) - SET SCHEDULING PARAMETER INDEX
TSJCL BSS 0
LOC *O
* SET CPU PRIORITY.
SJC1 SX0 B1+
SB3 RZX SET *SPR* RETURN ADDRESS
LX0 45-0
ZR X5,SJC1.1 IF SET PRIORITY FROM SERVICE CLASS
BX3 X3+X0 INDICATE PRIORITY NOT FROM SERVICE CLASS
SX6 X5-MPRS
SX7 X5-LJCS
PL X6,HNG IF PRIORITY NOT VALID
NG X7,HNG IF PRIORITY NOT VALID
EQ SPR SET CPU PRIORITY
SJC1.1 BX3 -X0*X3 INDICATE PRIORITY SET FROM SERVICE CLASS
MX6 -9
LX3 -27
BX1 -X6*X3
TA1 X1+CSJT,JCB GET SERVICE CLASS CPU PRIORITY
LX3 27
AX1 48
SX5 X1 SERVICE CLASS CPU PRIORITY
EQ SPR SET CPU PRIORITY
* SET CPU SELECTION.
SJC2 SX6 X5-3
MX3 -2
LX5 24
PL X6,HNG IF CPU SELECTION NOT VALID
LX3 24
BX6 X3*X1 CLEAR CPU ASSIGNMENT FLAGS
BX6 X6+X5 MERGE SELECTION FLAGS
TJP (/DCP/SJC,DCPC,/MONITOR/SJC3)
SJC3 LX3 36-24
LX5 36-24
SA6 B7+CWQW UPDATE *CWQW*
* SET PARAMETER IN *JCIW*.
SJC4 BX6 X3*X2 CLEAR OLD PARAMETER
SB0 0
BX6 X6+X5 INSERT PARAMETER
* COMPLETE PROCESSING OF FUNCTION.
SJC5 BX7 X7-X7 CLEAR OUTPUT REGISTER
SA6 A2 UPDATE *JCIW*
EQ PPR1 RETURN
* SET / CLEAR PP BREAKPOINT.
SJC6 SA5 A5+ REREAD OUTPUT REGISTER
SA3 PSTP
SA2 PLDP FETCH PLD POINTER
AX3 12
LX5 24 POSITION NAME
MX0 18
SB4 X3-2 LWA+1 PLD
AX2 36
BX5 X0*X5 ISOLATE NAME
SB3 X2
ZR X2,SJC7 IF NO PLD POINTER (LIBRARY LOCKED)
SA3 B3-3
BX1 -X0*X3 *0BK* LOAD INFORMATION
SA4 A3+B1
AX3 42
BX2 -X0*X4 BREAKPOINTED PP STATUS
SX3 X3-3R"PBK0"
PL X6,SJC8 IF SETTING BREAKPOINT
BX5 X0*X4
NO
NZ X2,SJC9 IF BREAKPOINT SET
SB0 0
SJC7 SX7 B1 FLAG ERROR
LX7 37
EQ PPR1 RETURN
SJC8 NZ X2,SJC7 IF BREAKPOINT ALREADY SET
SJC9 NZ X3,SJC7 IF *0BK* NOT FOUND
SJC10 SA2 B3
GE B3,B4,SJC7 IF PP ROUTINE NOT FOUND
BX3 X0*X2
SB3 B3+B1 ADVANCE PLD ADDRESS
IX3 X3-X5
NZ X3,SJC10 IF NOT MATCHING NAME
MX3 -12
PL X6,SJC11 IF SETTING BREAKPOINT
BX6 X4
SA6 A2 RESTORE CORRECT ENTRY
MX6 1
SA6 A4 CLEAR OUT BREAKPOINT
SA6 A6+B1
EQ PPR1 RETURN
SJC11 BX1 X5+X1 MERGE NAME AND *0BK* LOAD DATA
BX6 -X3*X2
BX6 X6+X1 APPEND PP LOAD ADDRESS
SA6 A2
SA1 A5 REREAD OUTPUT REGISTER
BX6 X2
SX4 B1
BX1 -X3*X1 EXTRACT CP NUMBER (IF ANY)
SA6 A4
LX4 41
BX6 -X0*X2 PP LOAD INFORMATION
LX1 48+7
IX6 X6+X4 ADD IN RESIDENCY FLAG
BX6 -X4*X6
BX6 X1+X6 MERGE IN CPA ADDRESS
SA6 A4+B1
EQ PPR1 RETURN
* SET/CLEAR *CPUPFM* ACTIVE FLAG.
SJC12 MX7 59 SET/CLEAR *CPUPFM* ACTIVE FLAG
LX6 39-0
LX7 39-0
BX7 X7*X2
BX6 X7+X6
EQ SJC5 COMPLETE PROCESSING
* SET SCHEDULING PARAMETER INDEX.
SJC13 SX6 X5-MXJC*JCBE
PL X6,HNG IF INDEX OUT OF RANGE
LX2 12
BX2 -X3*X2 EJT ORDINAL
CX0 X2,EJT
TA1 X5+EXQT,JCB GET UPPER BOUND SCHEDULING PRIORITY
TA2 X0+SCHE,EJT GET EJT SCHEDULING DATA
LX1 -24
BX2 X3*X2
BX1 -X3*X1
BX6 X2+X1 SET SCHEDULING PRIORITY TO UPPER BOUND
SA3 B7+CWQW GET CPU SCHEDULING PARAMETERS
SA6 A2 UPDATE *SCHE*
MX0 -9
LX3 -27
BX6 X0*X3
BX6 X6+X5 SET PARAMETER IN *CWQW*
LX3 59-45+27
LX6 27
SA6 A3 UPDATE *CWQW*
NG X3,PPR1 IF CPU PRIORITY NOT SET FROM SERVICE CLASS
TA1 X5+CSJT,JCB GET SERVICE CLASS CPU PRIORITY
SB3 RZX SET *SPR* RETURN ADDRESS
AX1 48
BX3 X6
SX5 X1 SERVICE CLASS CPU PRIORITY
EQ SPR SET CPU PRIORITY
SMDM SPACE 4,30
*** SMDM - SET MST DATA.
* THIS FUNCTION PERFORMS MST UPDATING FUNCTIONS THAT DO NOT
* REQUIRE THE MST TO BE INTERLOCKED.
*
* ENTRY
*T, OR 12/ SMDM,12/ EQ,12/ PA,12/ SF,12/ PB
*
* EQ EST ORDINAL.
* PA PARAMETER WHOSE USE DEPENDS ON THE SUBFUNCTION
* BEING PERFORMED.
* PA = BIT NUMBER FOR SF = CLBS/SLBS.
* PA = ERROR STATUS FOR SF = SERS/CERS.
* PA = TRACK NUMBER FOR SF = USTS/SFTS/CFTS.
* PA = STATUS BITS FOR SF = SSTS.
* PA = BYTE NUMBER FOR SF = ICTS.
* SF SUBFUNCTION CODE.
* SLBS = 0 = SET LOCAL BIT. (STLL)
* CLBS = 1 = CLEAR LOCAL BIT. (STLL)
* IUCS = 2 = INCREMENT USER COUNT FIELD. (STLL)
* DUCS = 3 = DECREMENT USER COUNT FIELD. (STLL)
* SERS = 4 = SET ERROR STATUS. (STLL)
* CERS = 5 = CONDITIONALLY CLEAR ERROR STATUS. (STLL)
* IFCS = 6 = INCREMENT FAMILY COUNT. (DULL)
* DFCS = 7 = DECREMENT FAMILY COUNT. (DULL)
* TFIS = 10B = TOGGLE FAMILY IDLE STATUS. (DULL)
* USTS = 11B = UPDATE SYSTEM TABLE TRACK. (DULL)
* SFTS = 12B = SET FAILING TRACK. (NVGL)
* CFTS = 13B = CLEAR FAILING TRACK. (NVGL)
* SSTS = 14B = SET EQUIPMENT STATE. (DALL)
* ICTS = 15B = INCREMENT ERROR COUNTER. (CTLL/EDLL)
* CTCS = 16B = CLEAR TABLES-CURRENT (ISHARED). (SDGL)
* C1AS = 17B = CLEAR *1RU* ACTIVITY (ISHARED). (MCLL)
* PB PARAMETER WHOSE USE DEPENDS ON THE SUBFUNCTION
* BEING PERFORMED.
* PB = BIT MASK FOR BITS TO CHANGE FOR SF = SSTS.
*
* EXIT
*T, OR 12/ 0,12/ ST,36/
* ST = 0, IF FUNCTION PERFORMED.
* ST = 1 IF BIT ALREADY SET FOR SLBS.
* ST = 1 IF MATCHING TRACK NUMBER FOR SFTS.
* ST = 1 IF NON-MATCHING TRACK NUMBER FOR CFTS.
* ST = 1 IF DEVICE ASSIGNED AND DOWN FOR SSTS.
* ST = BYTE 4 OF *DULL* FOR TFIS.
*
* *PP HUNG.* WILL OCCUR IF -
* 1) IF BIT NUMBER OUT OF RANGE. (SLBS/CLBS)
* 2) IF ERROR CODE OUT OF RANGE. (SERS/CERS)
SMDM SPACE 4,20
** TSMD - TABLE OF SMDM SUBFUNCTION PARAMETERS.
* THERE IS A *TSMD* ENTRY FOR EVERY TWO CONSECUTIVE SMDM
* SUBFUNCTION CODES. EACH ENTRY CONTAINS THE RETURN ADDRESS
* FOR ROUTINE *CTR*. THE SECOND ENTRY IS CORRECTLY POSITIONED
* IN THE WORD. THE FIRST ENTRY IS POSITIONED BY LEFT SHIFTING
* THE WORD BY 30 BITS.
*
* THE ENTRIES ARE BUILT BY THE *SMD* MACRO.
*
* SMD SF1,SF2,BLOCK
*
* SF1,SF2 TWO CONSECUTIVE SUBFUNCTION CODES.
* BLOCK THE NAME OF THE *CPUMTR* BLOCK THAT CONTAINS
* THE PROCESSOR WHEN IT IS CONDITIONALLY
* LOADED. THE DEFAULT ASSUMES THE PROCESSOR IS
* UNCONDITIONALLY LOADED.
SMD SFMACRO PAIRED DEFINE THE *SMD* MACRO
TSMD BSS 0 TABLE OF SMDM OPTION PARAMETERS.
SMD SLBS,CLBS
SMD IUCS,DUCS
SMD SERS,CERS
SMD IFCS,DFCS
SMD TFIS,USTS
SMD SFTS,CFTS
SMD SSTS,ICTS
SMD CTCS,C1AS,ISD
LOC *O
TSMDL EQU *-TSMD END OF TABLE
PPR SMDM
SX4 X1 CHECK SUBFUNCTION
ERRPL TSMDL-11B CODE ASSUMES NO SUBFUNCTION .GT. 37B
SB5 PPRX SET ERROR EXIT ADDRESS
LX4 -14
SA2 X4+TSMD READ OPTION TABLE
SB6 X4-TSMDL CHECK LEGALITY OF OPTION
NG X4,SMD1 IF SECOND ENTRY IN OPTION TABLE WORD
LX2 30 SHIFT TO SECOND ENTRY
SMD1 PL B6,HNG IF ILLEGAL OPTION
SB3 X2 SET *CTR* RETURN
SB6 B0 SET *CTR* PARAMETER
NG X2,HNG IF UNUSED SUBFUNCTION
EQ /PROGRAM/CTR1 CHECK TRACK REQUEST
* SET LOCAL MST BIT.
SUBFUN SMDM,(SLBS,CLBS)
SX7 X1-60
PL X7,HNG IF BIT NUMBER OUT OF RANGE
SA4 A3+STLL READ MST WORD
SX7 B1
SB3 X1
BX2 X7*X2 CHECK FOR INCREMENT/DECREMENT
LX1 X7,B3 POSITION MST BIT
UX0 X0 GET SHARED STATUS
BX6 -X1*X4
NZ X2,SMD2 IF CLEARING BIT
BX4 X1*X4
BX6 X6+X1
ZR X4,SMD2 IF BIT NOT PREVIOUSLY SET
LX7 36 POSITION REJECT STATUS
SMD2 SA6 A4 STORE MST WORD
SA7 A5 STORE OUTPUT REGISTER
NG X0,PPRX IF NON-SHARED
TNZ X0,(/PROGRAM/CLM,MMF,/MONITOR/PPRX) IF MMF DEVICE
EQ PPRX EXIT
* INCREMENT/DECREMENT USER COUNTS.
SUBFUN SMDM,(IUCS,DUCS)
SX3 10000B
SA4 A3+STLL READ USER COUNT WORD
SMD3 LX2 -1 POSITION INCREMENT/DECREMENT BIT
AX2 59
BX2 X2-X3 (X2) = 1 IF INCREMENT, -1 IF DECREMENT
LX3 11
IX6 X4+X2 PERFORM INCREMENT/DECREMENT
BX7 X4-X6 CHECK FOR OVERFLOW/UNDERFLOW
BX7 X3*X7
SB6 B0
ZR X7,SMD2 IF NO OVERFLOW/UNDERFLOW
EQ SMD8 RETURN OVERFLOW STATUS
* SET ERROR STATUS / CONDITIONALLY CLEAR ERROR STATUS.
SUBFUN SMDM,(SERS,CERS)
SX7 X1-MXEC
PL X7,HNG IF ERROR CODE OUT OF RANGE
SA4 A3+STLL READ ERROR STATUS WORD
LX2 -1
MX0 -6
LX4 -36 POSITION ERROR STATUS
BX6 X0*X4 CLEAR OLD ERROR STATUS
PL X2,SMD4 IF *SERS* SUBFUNCTION
BX7 -X0*X4 COMPARE ERROR STATUS
BX1 X7-X1
NZ X1,PPR1 IF NOT CLEARING DIFFERENT STATUS
SMD4 BX7 X6+X1 MERGE ERROR STATUS
LX7 36
EQ SMD6 STORE NEW ERROR STATUS AND EXIT
* INCREMENT / DECREMENT FAMILY COUNT SUBFUNCTIONS.
SUBFUN SMDM,(IFCS,DFCS)
SA4 A3+DULL READ MST WORD
SX3 B1+ SET INCREMENT/DECREMENT VALUE
EQ SMD3 INCREMENT/DECREMENT FIELD
* TOGGLE FAMILY IDLE STATUS.
SUBFUN SMDM,(TFIS,USTS)
LX2 -1 TEST FUNCTION CODE
MX3 1
SA4 A3+DULL-TDGL
NG X2,SMD5 IF *USTS* SUBFUNCTION
LX3 12
BX6 X4-X3
MX7 -48
LX4 36
BX7 -X7*X4
SA6 A4 STORE RESULT
SA7 A5 STORE OUTPUT REGISTER
EQ PPRX EXIT TO STORE OUTPUT REGISTER
* UPDATE SYSTEM TABLE TRACK.
SMD5 LX4 -12
BX4 X5*X4 CLEAR OLD SYSTEM TABLE TRACK
BX7 X1+X4 MERGE NEW SYSTEM TABLE TRACK
LX7 12
SMD6 SA7 A4 STORE MST WORD
BX7 X7-X7 CLEAR OUTPUT REGISTER
EQ PPR1 EXIT AND STORE OUTPUT REGISTER
* SET / CLEAR FAULTY TRACK.
SUBFUN SMDM,(SFTS,CFTS)
MX7 -11 CHECK TRACK WITHIN TRT
AX3 48
BX7 -X7*X1 CLEAR UPPER BIT OF REQUESTED TRACK
IX7 X7-X3
PL X7,PPR1 IF INCORRECT TRACK NUMBER
SA4 A3+NVGL-TDGL GET CURRENT TRACK-TO-FLAW
MX7 1
LX1 48 POSITION TRACK NUMBER
LX2 -1
ERRNZ SFTS-SFTS/2*2 CODE ASSUMES *SFTS* IS EVEN
ERRZR CFTS-CFTS/2*2 CODE ASSUMES *CFTS* IS ODD
BX1 X1+X7 ENSURE THAT BIT 11 IS SET IN TRACK NUMBER
MX6 12
BX3 X6*X4
BX6 -X6*X4
BX3 X3-X1 COMPARE TRACK NUMBER WITH CURRENT TRACK
SA4 A3+STLL-TDGL
NG X2,SMD7 IF *CFTS*
ZR X3,SMD8 IF SETTING SAME TRACK
SX3 B0
BX6 X1+X6 SET NEW TRACK
SMD7 NZ X3,SMD8 IF CLEARING WRONG TRACK
SA6 A3+NVGL-TDGL
LX7 50-59 SET CHECKPOINT REQUEST FLAG
BX7 X4+X7
EQ SMD6 STORE CHECKPOINT REQUEST FLAG AND RETURN
* SSTS - SET EQUIPMENT STATE.
SUBFUN SMDM,(SSTS,ICTS)
SX2 X2-SSTS
SA4 A3+DALL-TDGL UPDATE STATE BITS IN *DALL*
NZ X2,SMD9 IF *ICTS*
BX7 -X5*X7 GET BIT MASK
LX1 54-0 GET NEW STATUS
LX7 54-0
LX3 X4,B1 SAVE PREVIOUS STATE
BX3 X3*X4
BX4 -X7*X4 CLEAR BITS TO SET
LX3 59-57
BX7 X4+X1 MERGE BITS TO SET
PL X3,SMD6 IF PREVIOUS STATE NOT DOWN
SA1 A5 REREAD OUTPUT REGISTER
MX3 -9
LX1 24
BX3 -X3*X1 EST ORDINAL
CX2 X3,EST CONVERT EST ORDINAL TO OFFSET
TA2 X2+EQAE,EST
BX2 -X5*X2
ZR X2,SMD6 IF DEVICE NOT ASSIGNED
SMD8 SX7 B1 SET REJECT STATUS
LX7 36
EQ PPR1 EXIT TO RETURN REJECT STATUS
* ICTS - INCREMENT ERROR COUNTER.
SMD9 SA2 A3+EDLL-TDGL
SA4 PDTL
BX6 X4
SA6 A2 SET PACKED DATE AND TIME OF LAST ERROR
SX6 4
SA4 A2-B1
ERRNZ EDLL-CTLL-1 CODE DEPENDS ON VALUE
AX5 1 SET MASK = -3777
IX2 X6-X1 4 - BYTE NUMBER
LX3 X2,B1 *2
IX3 X2+X3 *3
LX3 2 (4 - BYTE NUMBER) * 12
SB3 X3
SX2 B1
LX5 B3 POSITION MASK
LX2 B3 POSITION INCREMENT
BX3 X5*X4 CLEAR COUNTER FIELD
IX7 X2+X4 INCREMENT COUNTER
BX7 -X5*X7 MASK OFF OVERFLOW
BX7 X7+X3 MERGE COUNTER FIELD AND REST OF WORD
EQ SMD6 UPDATE *CTLL* WORD AND EXIT
SPLM SPACE 4
*** SPLM - SEARCH PERIPHERAL LIBRARY.
*
* ENTRY
*T, OR 12/ SPLM,12/,5/0,1/A,18/ PN,12/
* A IF SET, *PLD* ADDRESS AND PP NAME RETURNED ON EXIT,
* RATHER THAN LOAD PARAMETERS.
* PN PP PACKAGE NAME.
*
* EXIT
*T, OR 12/ 0,6/ RT,6/ EQ,12/ TK,12/ SN,12/ LA (MS)
*T, OR 12/ 0,6/ RT,18/ PA,12/ PL,12/ LA (RPL)
*T, OR 12/ 0,6/ RT,18/ SA,12/ PL,12/ LA (SFP)
*T, OR 12/ 0,5/0,1/1,18/ PN,24/ DA
* EQ EST ORDINAL.
* SA ADDRESS OF *SFP* IN *RPL*.
* PA PROGRAM ADDRESS.
* LA LOAD ADDRESS.
* PL PROGRAM LENGTH.
* TK TRACK.
* SN SECTOR.
* RT RESIDENCE AND TYPE CODE.
* 0 = 12-BIT, MS RESIDENT (NPP).
* 1 = 12-BIT, *RPL* RESIDENT.
* 2 = *SFP*.
* 10 = 16-BIT, *RPL* RESIDENT.
* 14 = 16-BIT, MS RESIDENT (NPP).
* MS RESIDENT (CPP).
* PN PP PACKAGE NAME.
* DA PP PACKAGE *PLD* ADDRESS (0 IF NOT FOUND).
PPR SPLM,,,FEX
BX6 X5
SB6 CSM SET EXIT ADDRESS
LX6 30 POSITION PROGRAM NAME
SX1 B1
BX1 X1*X6
TZR X1,(/CPP/SPL,CPP,/MONITOR/SPL) IF NOT *PLD*/PP NAME
SB6 SPM1 SET RETURN ADDRESS
TEQ (/CPP/SPL,CPP,/MONITOR/SPL) SEARCH PERIPHERAL LIBRARY
SPM1 NG X1,PPR1 IF LIBRARY LOCKED
MX4 19
LX4 1
BX7 X4*X6 PROGRAM NAME AND ADDRESS FLAG
LX7 -18
SX1 A1 RETURN *PLD* ENTRY ADDRESS
BX7 X7+X1
EQ CSM CHECK FOR STORAGE MOVE
STBM SPACE 4,30
*** STBM - SET TRACK BIT.
* THIS FUNCTION PERFORMS MST AND TRT UPDATING FUNCTIONS.
* THE MST/TRT MUST BE INTERLOCKED TO PREVENT A PROGRAM MODE
* REQUEST FROM WORKING WITH THE SAME MST/TRT.
*
* ENTRY
*T, OR 12/ STBM,1/ CK,1/ RT,10/ EQ,12/ PM,12/ SF,12/
*
* CK IF CK = 1 SET CHECKPOINT BIT.
* RT RETURN TRACK NOT RESERVED STATUS.
* EQ EQUIPMENT.
* PM PARAMETER WHOSE USE DEPENDS ON THE SUBFUNCTION
* BEING PERFORMED.
* PM = TRACK FOR SF = STFS/CTFS/STIS/CTIS/SPFS/CPFS.
* PM = IQFT TRACK FOR SIQS SUBFUNCTIONS.
* PM = BIT NUMBER FOR CGBS/SGBS SUBFUNCTIONS.
* PM = NEW UNIT/COUNT FOR SOUS/SRCS SUBFUNCTIONS.
* SF SUBFUNCTION CODE.
* STFS = 0 = SET TRACK FLAWED STATUS.
* CTFS = 1 = CLEAR TRACK FLAWED STATUS.
* STIS = 2 = SET TRACK INTERLOCKED BIT.
* CTIS = 3 = CLEAR TRACK INTERLOCKED STATUS.
* SPFS = 4 = SET PRESERVED FILE STATUS BIT.
* CPFS = 5 = CLEAR PRESERVED FILE STATUS BIT.
* UTRS = 6 = UPDATE TRT FROM ECS.
* UITS = 7 = UPDATE ISHARED TABLES.
* IIQS = 10B = INTERLOCK IQFT TRACK.
* SIQS = 11B = SET IQFT TRACK.
* SGBS = 12B = SET GLOBAL MST BIT. (ACGL)
* CGBS = 13B = CLEAR GLOBAL MST BIT. (ACGL)
* IPAS = 14B = INCREMENT PF ACTIVITY COUNT. (DULL)
* DPAS = 15B = DECREMENT PF ACTIVITY COUNT. (DULL)
* SPIS = 16B = SET PF INTERLOCK. (DULL)
* CPIS = 17B = CLEAR PF INTERLOCK. (DULL)
* SIIS = 20B = SET *INSTALL* INTERLOCK. (DULL)
* CIIS = 21B = CLEAR *INSTALL* INTERLOCK. (DULL)
* SLTS = 22B = SET LONG-TERM INTERLOCK. (MCLL)
* CDIS = 23B = CLEAR DEVICE INTERLOCK. (SDGL)
* SDIS = 24B = SET DEVICE INTERLOCK. (SDGL)
* SVIS = 26B = SET VERIFICATION INTERLOCK. (DULL)
* CVIS = 27B = CLEAR VERIFICATION INTERLOCK. (DULL)
* SOUS = 30B = SET OFFLINE DAS PARITY UNIT. (ACGL)
* SRCS = 31B = SET REMAINING CYLINDERS. (ACGL)
*
* EXIT
*T, OR 12/ 0,12/ ST,36/
* ST = 0, IF FUNCTION PERFORMED.
* ST = 1 IF BIT ALREADY SET FOR STFS/STIS/SPFS/SGBS.
* ST = 1 IF NO IQFT TRACK OR IQFT TRACK PREVIOUSLY INTERLOCKED
* FOR *IIQS* OPTION.
* ST = 1 IF CANNOT HONOR PF REQUEST DUE TO
* PF SYSTEM INTERLOCK OR TOO MANY PFM,S ACTIVE.
* ST = 2 IF TRACK NOT RESERVED.
* ST = IPC FOR *SPIS* SUBFUNCTION WHERE -
* I = 1/0, SET IF PF INTERLOCK SET BY REQUEST.
* PC = 6/0, IF NO PFM,S ACTIVE.
*
* *PP HUNG.* WILL OCCUR IF -
* 1) IF TRACK NOT RESERVED. (CTFS/STIS/CTIS/SPFS/CPFS/IIQS)
* 2) IF TRACK NOT INTERLOCKED. (CTIS)
* 3) IF TRACK NOT PRESERVED. (CPFS)
* 4) IF TRACK NOT FLAWED. (CTFS)
* 5) IF TRACK INFORMATION NOT ZERO. (STFS)
* 6) IF MST/TRT INTERLOCK NOT SET. (SLTS/CDIS)
* 7) IF BIT NUMBER OUT OF RANGE. (SGBS/CGBS)
* 8) IF PARAMETER VALUE TOO LARGE. (SOUS/SRCS)
*
* THIS FUNCTION MAY BE REJECTED IF THE MST/TRT IS INTERLOCKED.
* WHEN THIS OCCURS BIT 59 OF *OR* IS SET AND *PPR* WILL RECALL
* *CPUMTR* TO RETRY THE REQUEST. THE REQUEST WILL BECOME
* STORAGE MOVABLE WHEN IT IS REJECTED.
* BIT 0 OF *SDGL* INTERLOCKS THE MST/TRT BETWEEN MONITOR AND
* PROGRAM MODE.
* FOR SHARED DEVICES BITS 1-5 INDICATES WHICH MACHINE HAS
* THE MST/TRT INTERLOCKED IN EXTENDED MEMORY.
* FOR INDEPENDENT SHARED DEVICES BITS 1-5 ARE USED BY *1RU*
* TO INDICATE THE DEVICE IS INTERLOCKED IN THE LABEL.
* THE MST/TRT INTERLOCK CONTROLS THE UPDATING OF THE TRT
* AND MST WORDS TDGL AND ACGL.
*
* NOTE - IF THE REQUEST IS FOR AN INDEPENDENT SHARED DEVICE,
* THE MST, TRT, AND DIT ARE READ FROM THE DEVICE TO CM BY *1RU*
* BEFORE THE STBM IS PROCESSED BY *CPUMTR*.
STBM SPACE 4,20
** TSTB - TABLE OF STBM SUBFUNCTION PARAMETERS.
* THERE IS A *TSTB* ENTRY FOR EVERY TWO CONSECUTIVE STBM
* SUBFUNCTION CODES. EACH ENTRY CONSISTS OF A PARAMETER AND
* RETURN ADDRESS FOR ROUTINE *CTR*. TWO ENTRIES ARE PACKED
* IN A WORD SUCH THAT THE LOWER 18 AND UPPER 12 BITS FORM
* AN ENTRY. THE SECOND ENTRY IS CORRECTLY POSITIONED IN THE
* WORD. THE FIRST ENTRY IS POSITIONED BY LEFT SHIFTING THE
* WORD BY 30 BITS.
*
* THE ENTRIES ARE BUILT BY THE *STB* MACRO.
*
* STB SF1,SF2,(OPTIONS),BLOCK
*
* SF1,SF2 TWO CONSECUTIVE SUBFUNCTION CODES.
* OPTIONS OPTIONS TO BE PASSED TO *CTR*.
* *DI* = SET DEVICE INTERLOCK.
* BLOCK THE NAME OF THE *CPUMTR* BLOCK THAT CONTAINS
* THE PROCESSOR WHEN IT IS CONDITIONALLY
* LOADED. THE DEFAULT ASSUMES THE PROCESSOR IS
* UNCONDITIONALLY LOADED.
STB SFMACRO PAIRED,(DI=1) DEFINE THE *STB* MACRO
TSTB BSS 0 TABLE OF STBM OPTION PARAMETERS.
STB STFS,CTFS,DI
STB STIS,CTIS,DI
STB SPFS,CPFS,DI
STB UTRS,UITS,DI
STB IIQS,SIQS,DI
STB SGBS,CGBS,DI
STB IPAS,DPAS,DI
STB SPIS,CPIS,DI
STB SIIS,CIIS,DI
STB SLTS,CDIS
STB SDIS,25BS,DI
STB SVIS,CVIS,DI
STB SOUS,SRCS,DI
LOC *O
TSTBL EQU *-TSTB END OF TABLE
PPR STBM,,STB
SX4 X1 CHECK SUBFUNCTION
ERRPL TSTBL-11B CODE ASSUME NO SUBFUNCTION .GT. 37B
SB5 PPRX SET ERROR EXIT ADDRESS
LX4 -14
SA2 X4+TSTB READ OPTION TABLE
SB6 X4-TSTBL CHECK LEGALITY OF OPTION
NG X4,STB1 IF SECOND ENTRY IN OPTION TABLE WORD
LX2 30 SHIFT TO SECOND ENTRY
STB1 PL B6,HNG IF ILLEGAL OPTION
NG X2,HNG IF UNUSED SUBFUNCTION
SB3 X2 SET *CTR* RETURN
UX2,B6 X2 SET *CTR* PARAMETER
TNZ B6,(/ISD/CHR,ISD,/PROGRAM/CTR1) IF INTERLOCK NEEDED
EQ /PROGRAM/CTR1 CHECK TRACK REQUEST
* SET GLOBAL MST BIT.
SUBFUN STBM,(SGBS,CGBS)
SX7 X1-60
PL X7,HNG IF BIT NUMBER OUT OF RANGE
SA4 A3+ACGL READ MST WORD
SX7 B1
SB3 X1
BX2 X7*X2 CHECK FOR INCREMENT/DECREMENT
LX1 X7,B3 POSITION MST BIT
BX6 -X1*X4
NZ X2,STB2 IF CLEARING BIT
BX4 X1*X4
BX6 X6+X1
ZR X4,STB2 IF BIT NOT PREVIOUSLY SET
LX7 36 POSITION REJECT STATUS
STB2 SA6 A4 STORE MST WORD
EQ /PROGRAM/CCP1 EXIT
* SET/CLEAR IQFT TRACK.
* SET IQFT TRACK INTERLOCKED.
SUBFUN STBM,(IIQS,SIQS)
SA4 A3+ACGL READ MST WORD
LX4 -12 POSITION OLD IQFT TRACK
BX3 X1 NEW IQFT TRACK
LX2 -1
BX1 -X5*X4 OLD IQFT TRACK
PL X2,/PROGRAM/STB2 IF *IIQS* SUBFUNCTION
BX6 X5*X4 CLEAR OLD TRACK
BX6 X3+X6 MERGE NEW IQFT TRACK
LX6 12
EQ STB2 RETURN COMPLETED STATUS
STB3 SX7 B1
LX7 36 SET REJECT STATUS
EQ /PROGRAM/CCP1 CLEAR MST INTERLOCK
* SET DEVICE INTERLOCK.
SUBFUN STBM,(SDIS,25BS)
LX2 -1
UX0 X0
NG X2,HNG IF UNUSED SUBFUNCTION
ERRNZ SDIS-SDIS/2*2 CODE ASSUMES *SDIS* IS EVEN
NZ X0,/PROGRAM/CSM1 IF NOT ISHARED DEVICE
TEQ (/ISD/STB2,ISD,/MONITOR/HNG1) PROCESS ISHARED DEVICE
* SET LONG-TERM INTERLOCK (ISHARED ONLY).
* CLEAR DEVICE INTERLOCK.
SUBFUN STBM,(SLTS,CDIS)
SA4 A4 READ *SDGL* WORD
BX1 X1-X1
SX5 B4+
LX2 -1
LX4 -1
PL X4,HNG IF DEVICE NOT INTERLOCKED
NG X0,/PROGRAM/CCP1 IF NON-SHARED DEVICE
TPL X2,(/ISD/STB3,ISD,/MONITOR/HNG1) IF *SLTS*
TEQ (/ISD/STB4,ISD,/PROGRAM/CCP1) CLEAR DEVICE INTERLOCK
* UPDATE TABLES.
SUBFUN STBM,(UTRS,UITS)
LX2 -1
UX4,B3 X0
PL X2,/PROGRAM/CCP1 IF UTRS
NZ X4,/PROGRAM/CCP1 IF NOT ISHARED DEVICE
SB3 B6+B3 *MRT* FWA
TEQ (/ISD/SMU,ISD,/MONITOR/HNG1) UPDATE ISHARED TABLES
* INCREMENT / DECREMENT DEVICE PF COUNT.
SUBFUN STBM,(IPAS,DPAS)
SX2 X2-IPAS
NZ X2,STB4 IF NOT INCREMENT
MX1 2
SX4 B1
LX1 42-59
BX7 X1*X3
NZ X7,/PROGRAM/CCP1 IF INTERLOCKED OR OVERFLOW
SA2 A3+DULL-TDGL READ LOCAL COUNT
LX4 36
BX7 X1*X2
NZ X7,HNG1 IF LOCAL INTERLOCK OR OVERFLOW
EQ STB5 PERFORM INCREMENT
STB4 MX1 6
SX4 -B1
LX1 41-59
BX7 X1*X3
ZR X7,HNG1 IF NO GLOBAL COUNT SET
SA2 A3+DULL-TDGL READ LOCAL COUNT
LX4 36
BX7 X1*X2
ZR X7,HNG1 IF NO LOCAL COUNT
STB5 IX6 X3+X4 INCREMENT GLOBAL COUNT
SA6 A3
IX6 X2+X4 INCREMENT LOCAL COUNT
SA6 A2
EQ /PROGRAM/CCP1 CLEAR MST INTERLOCK
* SET / CLEAR UTILITY INTERLOCK.
SUBFUN STBM,(SPIS,CPIS)
SX0 X2-SPIS 0 = SET, 1 = CLEAR UTILITY INTERLOCK
SB4 42
STB6 SX1 B1
LX0 B4
LX1 B4
BX7 -X3*X0
NZ X7,HNG1 IF CLEARING CLEARED INTERLOCK
SA2 A3+DULL-TDGL
BX6 X1-X3
NZ X0,STB7 IF CLEARING INTERLOCK
BX7 X1*X3
SB3 42
NZ X7,/PROGRAM/CCP1 IF INTERLOCK PREVIOUSLY SET
NE B4,B3,STB7 IF NOT *SPIS* SUBFUNCTION
MX7 7
LX7 42-59
STB7 BX7 X7*X3
SA6 A3
BX6 X2-X1
SA6 A2
EQ /PROGRAM/CCP1 CLEAR MST INTERLOCK
* INSTALL INTERLOCK PROCESSING.
SUBFUN STBM,(SIIS,CIIS)
SX0 X2-SIIS 0 = SET INSTALL INTERLOCK
SB4 43
EQ STB6 SET / CLEAR INTERLOCK
* DEVICE VERIFICATION INTERLOCK PROCESSING.
SUBFUN STBM,(SVIS,CVIS)
SX0 X2-SVIS 0 = SET VERIFICATION INTERLOCK
SB4 46
EQ STB6 SET / CLEAR INTERLOCK
* SET OFFLINE UNIT NUMBER (*DAS* PARITY DEVICE).
* SET REMAINING CYLINDERS / 100B (*DAS* PARITY RESTORE).
SUBFUN STBM,(SOUS,SRCS)
MX7 54
BX6 X7*X1
NZ X6,HNG IF PARAMETER VALUE TOO LARGE
LX7 36
LX1 36
LX2 -1
NG X2,STB8 IF *SRCS* SUBFUNCTION
LX7 6
LX1 6
STB8 SA4 A3+ACGL-TDGL READ MST WORD
BX6 X7*X4 CLEAR OLD VALUE
BX6 X6+X1 SET NEW VALUE
SA6 A4 STORE MST WORD
MX7 0
EQ /PROGRAM/CCP1 EXIT
TDAM SPACE 4,25
*** TDAM - TRANSFER DATA TO/FROM JOB - FROM TO MESSAGE BUFFER.
* IF TRANSFER TO JOB THE FIRST WORD BEING TRANSFERRED TO
* MUST BE 0.
*
* ENTRY
*T, OR 12/ TDAM,9/0,1/T,1/C,1/R,12/ SID,6/ WC,18/ ADDRESS
* T = 1, INCREMENT TAPE ACTIVITY IF WRITE COMPLETE.
* C = 1, SET COMPLETION BIT SPECIFIED BY *ADDRESS*.
* R = 0 IF READ DATA FROM SUBSYSTEM FL TO PP MESSAGE BUFFER.
* = 1 IF WRITE DATA FROM PP MESSAGE BUFFER TO SUBSYSTEM FL.
* SID = SUBSYSTEM IDENTIFICATION.
* WC = NUMBER OF WORDS TO TRANSFER.
* = REPLY CODE IF COMPLETION BIT OPTION SELECTED (*C*=1).
* ADDRESS = RELATIVE ADDRESS OF RECEIVING BUFFER.
* = 0, SPECIAL SUBSYSTEM RECEIVING BUFFER USED (SSCR).
*
* EXIT
*T, OR 12/ 0, 12/ ST, 12/ EJTO, 24/ JSN
* ST = 0, OPERATION COMPLETE.
* ST = 1, MOVE IN PROGRESS.
* ST = 2, NOT READY FOR DATA.
* ST = 3, REJECT (WRITE REQUEST TO NON-ZERO FIRST WORD)
* ST = 4, INACTIVE OR JOB ADVANCE SET.
* ST = 5, SCP INVALID PARAMETERS.
* EJTO = EJT ORDINAL OF SCP IF *ST* = 5.
* JSN = JOB SEQUENCE NUMBER OF SCP IF *ST* = 5.
*
* HANG CONDITIONS -
* SPECIAL BUFFER OR SET COMPLETE BIT SPECIFIED AND SCP
* FACILITY NOT ENABLED.
* INCORRECT WORD COUNT.
* LAST WORD TO BE TRANSFERED NOT IN SUBSYSTEM FL.
* OVERFLOW INCREMENTING TAPE ACTIVITY.
PPR TDAM
LX1 -36
SB3 TDA1 *RSC* RETURN ADDRESS
MX0 -12
SX7 B1 PRESET STORAGE MOVE - JOB ADVANCE STATUS
SX4 X1 FLAGS
LX1 12
SB5 X5 SUBSYSTEM ADDRESS
LX7 36
BX1 -X0*X1 SUBSYSTEM IDENTIFICATION
EQ RSC RETURN SUBSYSTEM LOCATION
* *RSC* EXIT ADDRESSES.
VFD 12/TDA3-TDA1,18/HNG,12/TDA3-TDA1,18/PPR1
TDA1 SX1 ICAN
IX1 X3-X1
ERX1 X1 GET INTER-CONTROL POINT COMMUNICATION WORD
SB4 X4-2 CHECK FOR SET COMPLETION BIT ONLY
SB3 X6 SUBSYSTEM FL
LX7 1 SET NOT READY STATUS
TZR B5,(/MONITOR/SSR,SCP,/MONITOR/HNG) IF SPECIAL BUFFER
TZR B4,(/MONITOR/SCB,SCP,/MONITOR/HNG) IF SET COMPLETION
AX5 6
PL X1,PPR1 IF NOT READY TO RECEIVE DATA
SX5 X5
SB3 X6 (B4) = SUB-SYSTEM FL
AX5 12 (X5) = WORD COUNT
SX0 B5 RELATIVE ADDRESS TO X0
IX0 X0+X3 ABSOLUTE SUB SYSTEM ADDRESS
SX1 X5-7 CHECK FOR LEGAL WORD COUNT
SX5 X5-1
BX1 -X5*X1
SB6 B5+X5
PL X1,HNG IF ILLEGAL WORD COUNT
GE B6,B3,HNG IF OUTSIDE SUB-SYSTEM FL
SX1 A5+1 MESSAGE BUFFER ADDRESS
AX6 X7,B1
SB4 X5+1 WORD COUNT
IX1 X0-X1 DIFFERENCE
ZR X4,TDA2 IF READ
SX0 A5+B1 REVERSE TRANSFER
IX7 X6+X7 SET REJECT STATUS
IX3 X0+X1 SUB SYSTEM BUFFER
ERX3 X3
MX6 60
BX1 X6-X1 COMPLEMENT DIFFERENCE
NZ X3,PPR1 IF NON-ZERO FIRST WORD
NG X3,PPR1 IF NON-ZERO FIRST WORD
* DATA TRANSFER LOOP.
TDA2 SB6 TDA2.2 *MSR* RETURN
SX2 X4+ SAVE FLAGS
TNO /CME/MSR,CME
SB6 X1+
TDA2.1 SB4 B4-B1 DECREMENT WORD COUNT
SA3 X0+B4
BX7 X3
SA7 A3-B6
NZ B4,TDA2.1 IF MORE TO MOVE, CONTINUE
TDA2.2 BX7 X7-X7 SET COMPLETION STATUS
ZR X2,PPR1 IF READ - EXIT TO STORE OUTPUT REGISTER
LX2 59-2
PL X2,TDA2.3 IF NOT TO INCREMENT TAPE ACTIVITY
SA1 B7+STSW
SX0 360B
SX6 20B
BX2 X0*X1 CURRENT TAPE/RECALL ACTIVITY
IX6 X1+X6 INCREMENT TAPE ACTIVITY
IX2 X0-X2
ZR X2,HNG IF ACTIVITY ALREADY AT MAXIMUM
SA6 A1+ UPDATE TAPE ACTIVITY
* ENTRY FROM *SSR* TO START SUB-SYSTEM EXECUTIVE.
TDA2.3 SA1 A2+CWQW-STSW GET RECALL STATUS
SA7 A5 STORE OUTPUT REGISTER
LX1 59-46
SB6 A2-STSW SET JOB EXCHANGE PACKAGE ADDRESS
NG X1,PPRX IF NOT TO RECALL CPU
SB3 PPRX *RCC* RETURN ADDRESS
EQ RCC RECALL CPU
* EXIT FOR SCP NOT ACTIVE. (ALSO ENTERED HERE FROM *SSR*.)
TDA3 SX7 B1 RETURN STATUS 4
LX7 36+2
EQ PPR1
TDRM SPACE 4,25
*** TDRM - INTERLOCK TAPE DRIVER REQUEST.
*
* ENTRY
*T, OR 12/ TDRM,12/ UDTA,10/,1/B,25/
*
* UDTA UDT ADDRESS
* B UNIT BUSY STATUS.
*
* EXIT
*T, OR 12/ 0,48/,12/ STATUS
*T, MB 60/ FTAB
*T, MB+1 60/ ASCM
*
* STATUS 1 = REQUEST IN PROGRESS SET.
* 0 = NO DRIVER REQUEST PRESENT, REQUEST ALREADY IN
* PROGRESS OR COMPLETE, OR REQUEST REQUEUED.
* FTAB *1MT* FUNCTION TABLE ENTRY IF REQUEST IN PROGRESS SET.
* ASCM *ASCM* FUNCTION TO LOAD FIRST *1MT* OVERLAY IF REQUEST
* IN PROGRESS SET AND PLD NOT LOCKED.
* 0 IF REQUEST IN PROGRESS SET AND PLD INTERLOCKED.
*
* HANG CONDITIONS -
* CALLING PP NOT ASSIGNED TO MAGNET CP.
* INCORRECT UDT ADDRESS.
PPR TDRM
SA2 B7+JCIW
SA4 B7+FLSW
AX1 36 SET UDT ADDRESS
MX0 -12
ZR X1,HNG IF NO UDT ADDRESS
LX2 -24
BX6 -X0*X4
BX2 -X0*X2 SUBSYSTEM ID
LX6 6 FL
MX0 -RMSK
LX4 -RSHF
SX6 X6-/MTX/UNITL
BX4 -X0*X4
SX2 X2-MTSI
LX4 6 RA
NZ X2,HNG IF NOT CALLED BY MAGNET
IX6 X1-X6
IX3 X4+X1 UDT ABSOLUTE ADDRESS
PL X6,HNG IF UDT ENTRY NOT IN FL
ERX1 X3 GET *UXRQ*
ERRNZ /MTX/UXRQ
MX0 12
BX0 X0*X1 REQUEST STATUS
NZ X0,PPR1 IF REQUEST ALREADY IN PROGRESS OR COMPLETE
LX1 -36
MX0 -6
BX2 -X0*X1 REQUEST CODE
SX6 X2-/MTX/MDFN
PL X6,PPR1 IF NOT *1MT* REQUEST
SX6 X2+/MTX/TFUN-1
ZR X2,PPR1 IF NO REQUEST
IX6 X4+X6 FUNCTION TABLE ENTRY ABSOLUTE ADDRESS
LX5 53-25
ERX2 X6 READ FUNCTION TABLE ENTRY
BX5 X5*X2 BUSY STATUS .AND. REQUEUE ON UNIT BUSY
LX5 59-53
LX0 6
PL X5,TDR2 IF NOT TO REQUEUE REQUEST
* REQUEUE REQUEST.
SX2 100B
BX4 -X0*X1 COUNT OF REQUEUES WITHOUT DELAY
IX6 X1+X2 INCREMENT REQUEUES WITHOUT DELAY
SX4 X4-7700B
BX1 X0*X1 CLEAR REQUEUE COUNT
ZR X4,TDR1 IF MAXIMUM REQUEUES WITHOUT DELAY
LX6 36
EWX6 X3 UPDATE *UXRQ*
EQ PPR1 EXIT TO SET OUTPUT REGISTER
TDR1 SX6 /MTX/RBS
LX1 36
LX6 48
BX6 X6+X1 SET REQUEUE ON UNIT BUSY
EWX6 X3 UPDATE *UXRQ*
EQ PPR1 EXIT TO SET OUTPUT REGISTER
* SET REQUEST IN PROGRESS.
TDR2 BX1 X0*X1 CLEAR REQUEUE COUNT
SX6 /MTX/RIP
LX1 36
LX6 48
BX7 X2
BX6 X1+X6 SET REQUEST IN PROGRESS
SA7 A5+B1 SET FUNCTION TABLE ENTRY
EWX6 X3 UPDATE *UXRQ*
MX0 6
SX6 2L3M
BX2 X0*X2 OVERLAY NAME THIRD CHARACTER
LX6 42
LX2 -12
BX6 X6+X2 SET OVERLAY NAME
SB6 TDR3 SET RETURN ADDRESS
EQ SPL SEARCH FOR OVERLAY
TDR3 SX6 B0
R= X2,ASCM
NG X1,TDR4 IF LIBRARY LOCKED
NZ X5,TDR4 IF OVERLAY NOT FOUND
LX2 48
BX6 X2+X7 SET *ASCM* PARAMETERS
TDR4 SX7 1 INDICATE REQUEST IN PROGRESS SET
SA6 A5+2 SET OVERLAY PARAMETERS
EQ PPR1 EXIT TO SET OUTPUT REGISTER
TGPM SPACE 4,20
** TGPM - PROCESS REQUEST FOR *IAF* POT CHAIN
*
* A POT POINTER IS TAKEN OUT OF ONE OF THE *TGPM* QUEUES
* IN *IAF*. THIS POT POINTER IS RETURNED IN THE OUTPUT
* REGISTER. IF THERE IS NO POT POINTER IN THE QUEUE, AN
* ERROR COUNTER IS INCREMENTED AND A REJECT IS RETURNED.
* IF *IAF* IS UNACCESSIBLE OR ERROR FLAGS ARE SET, THE
* OUTPUT REGISTER IS CLEARED.
*
* ENTRY
*T,OR 12/ TGPM, 12/ PCL, 36/ 0.
* PCL POT CHAIN LENGTH.
*
* EXIT
*T,OR 12/ 0, 12/ PP, 36/ 0.
* PP 7777, IF NO POTS ARE AVAILABLE,
* 0, IF *IAF* IS INACCESSIBLE OR ERROR FLAGS ARE SET,
* ELSE, THE POT POINTER.
PPR TGPM
SB3 TGP1
EQ CIA CHECK *IAF* ACCESSIBILITY
TGP1 SA2 VCPT*200B+FLSW
NZ B4,PPR1 IF *IAF* INACCESSIBLE OR ERROR FLAG SET
SA3 TGPA GET SHORT POT CHAIN POINTER
MX0 -RMSK
AX1 36
AX2 RSHF
SB4 X1-VSCL-1
BX2 -X0*X2
LX2 6 (X2) = REFERENCE ADDRESS
PL B4,TGP5 IF LONG POT CHAIN NEEDED
SB4 -VTLP GET SHORT POT CHAIN QUEUE LIMIT
SX5 VTSP
TGP2 IX7 X3+X2
ERX4 X7
ZR X4,TGP6 IF NO POT IN *TGPM* QUEUE
BX6 X6-X6
EWX6 X7 CLEAR QUEUE ENTRY
SX6 X3+1 INCREMENT QUEUE POINTER
SB4 X6+B4
NG B4,TGP4 IF LIMIT
BX6 X5 RESET TO BEGINNING OF QUEUE
TGP4 SA6 A3+
LX4 36
BX7 X4
EQ PPR1 RETURN POT POINTER
TGP5 SA3 TGPB GET LONG POT CHAIN POINTER
SX5 VTLP
SB4 -VTEQ GET LONG POT CHAIN QUEUE LIMIT
EQ TGP2 CONTINUE
TGP6 SX5 VTGR COUNT NO POT AVAILABLE
IX5 X2+X5
ERX2 X5
MX7 12 SET ERROR RESPONSE
SX6 B1
LX7 -12
IX6 X6+X2
EWX6 X5
EQ PPR1 RETURN ERROR
TGPA CON VTSP SHORT POT CHAIN QUEUE POINTER
TGPB CON VTLP LONG POT CHAIN QUEUE POINTER
TIOM SPACE 4,30
*** TIOM - TAPE I/O PROCESSOR.
*
* UPDATES TAPE ACCOUNTING.
* THE PP IS CHANGED TO *MAGNET,S* CONTROL POINT.
* IF COMPLETION CODE .NE. 0, THE SPECIFIED UDT WORD IS CLEARED
* THE FET IS COMPLETED, AND THE ACTIVITY COUNT IS DECREMENTED.
*
* ENTRY
*T, OR 12/ TIOM,12/ UDT,1/W,11/ AI,6/ AM,18/ CC
* UDT UNIT DESCRIPTOR TABLE ADDRESS.
* W READ/WRITE INDICATOR (0 = READ, 1 = WRITE).
* AI ACCOUNTING INCREMENT.
* AM ACCOUNTING MULTIPLIER.
* IF NON-ZERO, AI*AM IS APPLIED TO MT ACCUMULATOR.
* IF ZERO, AI IS APPLIED TO MT ACCUMULATOR.
* CC FET COMPLETION CODE IF COMPLETING CIO REQUEST. IF
* ZERO, THE FET AND FST WILL NOT BE SET COMPLETE AND
* THE TAPE ACTIVITY WILL NOT BE DECREMENTED. NOTE
* THAT A NON-ZERO VALUE MUST BE SPECIFIED ON A TAPE
* RETURN REQUEST TO CAUSE THE TAPE ACTIVITY TO BE
* DECREMENTED.
*
* EXIT
*T, OR 12/ 0,48/ (UNCHANGED)
*
* HANG CONDITIONS -
* MAGNET NOT PRESENT OR NOT ACCESSIBLE.
* INCORRECT UDT ADDRESS.
* NO TAPE ACTIVITY PRESENT.
* INCORRECT FET ADDRESS.
PPR TIOM
* CHECK MAGNET STATUS.
SX1 MTSI SET MAGNET SUBSYSTEM ID
SB5 PPRX SET *REJ* RETURN ADDRESS
SB3 TIO1 SET *RSC* NORMAL RETURN ADDRESS
SX0 -7777B
EQ RSC CHECK MAGNET STATUS
* VALIDATE UDT ADDRESSES AND TAPE ACTIVITY.
VFD 12/HNG-TIO1,18/HNG,12/HNG-TIO1,18/REJ
TIO1 SA1 B7+STSW
SB3 X5 SAVE FET STATUS
LX5 -36
BX2 -X0*X5
SX2 X2+/MTX/UBLC *UBLC* RELATIVE ADDRESS
IX6 X2-X6
IX4 X3+X2 *UBLC* ABSOLUTE ADDRESS
PL X6,HNG IF UDT WORDS NOT IN MAGNET FL
ERRNG /MTX/UBLC-/MTX/UFRQ VALIDATE *UFRQ* IN FL
ERRNG /MTX/UBLC-/MTX/UCIA VALIDATE *UCIA* IN FL
ERX3 X4 READ *UBLC*
SX6 360B
BX6 X6*X1
MX7 11
ZR X6,HNG IF NO TAPE ACTIVITY PRESENT
* UPDATE BLOCK COUNT IN UDT.
LX7 -1
BX6 X7*X5 BLOCKS TRANSFERRED
LX6 -12
PL X5,TIO2 IF UPDATING BLOCKS READ
LX6 -24
TIO2 IX6 X3+X6 COUNT BLOCKS READ OR WRITTEN
EWX6 X4 UPDATE *UBLC*
ZR B3,TIO4 IF NOT COMPLETING REQUEST
* DECREMENT TAPE ACTIVITY AND CHECK REQUEST TYPE.
SX6 /MTX/UBLC-/MTX/UFRQ
IX4 X4-X6 *UFRQ* ABSOLUTE ADDRESS
ERX3 X4 READ *UFRQ*
SX6 20B
IX6 X1-X6 DECREMENT TAPE ACTIVITY
SA6 A1
BX2 -X0*X3 *CIO* REQUEST FNT ADDRESS
ZR X3,HNG IF NO REQUEST
SX6 B0
AX3 48
EWX6 X4 CLEAR *UFRQ*
SX3 X3-/MTX/CIO
SX6 /MTX/UCIA-/MTX/UFRQ
NZ X3,TIO8 IF NOT *CIO* REQUEST
* VERIFY FNT AND FET ADDRESS.
SA1 B7+FLSW
IX4 X4+X6 *UCIA* ABSOLUTE ADDRESS
ERX3 X4 READ *UCIA*
MX7 -18
BX6 -X0*X1 FL/100B
LX1 -48
BX3 -X7*X3 RELATIVE FET ADDRESS
BX4 -X0*X1 NFL/100B
SB4 X3+ RELATIVE FET ADDRESS
LX6 6 FL
LX4 6 NFL
SB5 X6+ FL
IX4 X2-X4
LE B4,B1,HNG IF INCORRECT FET ADDRESS
PL X4,HNG IF FNT ADDRESS NOT IN NFL
* SET FST COMPLETE.
LX1 36
MX6 -RMSK
SX2 X2-FSTL RELATIVE FST ADDRESS
BX6 -X6*X1
LX6 6 RA
IX2 X6-X2 ABSOLUTE FST ADDRESS
IX3 X6+X3 ABSOLUTE FET ADDRESS
ERX1 X2 READ FST
SX6 B1
BX6 X1+X6 SET FST COMPLETE
LX1 -36
BX1 X5-X1
BX1 -X0*X1
NZ X1,HNG IF INCORRECT UDT ADDRESS IN FST
EWX6 X2 UPDATE FST
GE B4,B5,TIO4 IF FET ADDRESS NOT IN FL
* SET FET STATUS.
ERX1 X3 READ FET STATUS
SX2 B3+
MX6 -16
BX2 -X7*X2 COMPLETION STATUS
EQ B3,B1,TIO3 IF NORMAL COMPLETION
LX6 2
BX1 X6*X1 CLEAR STATUS FLAGS
TIO3 BX6 X1+X2 MERGE COMPLETION STATUS
EWX6 X3 UPDATE FET STATUS
* UPDATE ACCOUNTING.
TIO4 SA3 B7+IOAW
LX5 -48
MX1 -11
BX1 -X1*X5 AI
LX5 6
ZR X1,TIO7 IF NO ACCOUNTING INCREMENT
MX7 -6
SB4 B0+ SET NO OVERFLOW
BX7 -X7*X5 AM
MX6 20
ZR X7,TIO5 IF AM NOT SPECIFIED
IX1 X7*X1
TIO5 LX3 -20 POSITION TAPE ACCUMULATOR
LX6 20
BX4 X6*X3 OLD VALUE
IX4 X4+X1 ADD INCREMENT
BX3 -X6*X3 CLEAR OLD VALUE
IX7 X4-X6
NG X7,TIO6 IF NO OVERFLOW
SB4 4 SET MT ACCUMULATOR OVERFLOW
IX4 X4-X6 REMOVE OVERFLOW
TIO6 BX6 X3+X4 MERGE NEW VALUE
SB3 TIO7 SET *AIO* RETURN ADDRESS
LX6 20
SX2 B1 SET TAPE ACCUMULATOR
SA6 A3 UPDATE TAPE ACCUMULATOR
EQ AIO UPDATE SRU ACCUMULATOR
* RECALL CPU.
TIO7 SA1 B7+CWQW CHECK RECALL STATUS
SB6 B7 SET EXCHANGE PACKAGE ADDRESS
LX1 59-46
NG X1,TIO8 IF NOT TO RECALL CPU
SB3 TIO8 *RCC* RETURN ADDRESS
EQ RCC RECALL CPU
* RETURN TO MAGNET CONTROL POINT.
TIO8 TX2 A5-1,-FP
SX1 ALCS
LX2 PPXES-PPCES
LX1 36 SET ALTERNATE CP FLAG
TA2 X2+ACPP,FPX GET *ACPP*
SB3 CCAM-1777B
PX6 B3,X1
BX5 X1
SA6 A5 SET *CCAM* REQUEST IN OUTPUT REGISTER
EQ .CCAM CHANGE CONTROL POINT
TRCM SPACE 4,35
** TRCM - PROCESS TRAP/TRACE REQUEST.
*
* UPDATE TRAP/TRACE CONTROL WORDS IN THE TRACE BLOCK.
*
* ENTRY
*T,OR 12/ TRCM,12/ FLAGS,12/ 0,24/ WD1.
*T,MB+0 12/ 0,24/ WD2,24/ WD3.
*T,MB+0 12/ FN1,12/ FN2,12/ FN3,12/ FN4,12/ FN5.
*T,MB+0 30/ 0,6/ LEN,18/ 0,6/ LOW.
*T,MB+1 60/ VALUE.
*
* FLAGS -
* BIT 47 SET IF *TRAP,MEM*.
* BIT 46 SET IF *TRAP,CPA*.
* BIT 45 SET IF *TRAP,NFL*.
* BIT 44 SET IF *TRAP,MCT*.
* BIT 43 SET IF *TRAP,DJB*.
* BIT 42 SET IF *TRAP,EJT*.
* BIT 41 SET IF TRAPPING ON ANY NONZERO VALUE.
* BIT 40 SET IF *TRACE,MTR*.
* BIT 39 SET IF *TRACE,PPU*.
* BIT 38 SET IF *TRACE,SET,ABS*.
* BIT 37 SET IF *TRACE,SET,CPA*.
*
* WD1 = ABSOLUTE ADDRESS OF WORD TO TRAP ON (*TRAP,MEM*).
* = ADDRESS IN CPA OF WORD TO TRAP ON (*TRAP,CPA*).
* WD2, WD3 = ABS OR CPA ADDRESSES TO TRACE (*TRACE,SET*).
* FN1 - FN5 = FUNCTIONS TO TRACE FOR *TRACE,MTR/PPU*.
* LEN = LENGTH OF FIELD TO CHECK FOR *TRAP,MEM/CPA*.
* LOW = LOW BIT OF FIELD TO CHECK FOR *TRAP,MEM/CPA*.
* VALUE = VALUE TO CHECK AGAINST FOR *TRAP,MEM/CPA*.
PPR TRCM,(/TRACE/TRC,TRACE,/MONITOR/HNG)
TSEM SPACE 4,20
** TSEM - PROCESS *IAF* REQUEST.
*
* THE *IAF REQUEST IS PUT IN THE *IAF* *TSEM* QUEUE.
* IF THERE IS NO AVAILABLE QUEUE ENTRY FOR THE REQUEST,
* AN ERROR COUNTER IS INCREMENTED AND A REJECT IS RETURNED.
* IF *IAF* IS INACCESSIBLE OR ERROR FLAGS ARE SET, THE OUTPUT
* REGISTER IS CLEARED.
*
* ENTRY
*T,OR 12/ TSEM,48/ .
*T,MB 60/ *IAF* REQUEST.
*
* EXIT
*T,OR 12/ 0, 12/ FLAG, 36/ 0.
* FLAG 0, IF *IAF* IS INACCESSIBLE OR ERROR FLAGS ARE SET,
* .NE. 0, IF REQUEST COMPLETE.
* 7777, IF NO AVAILABLE QUEUE ENTRY.
*
* IF THE REQUEST IS INVALID, THE SYSTEM WILL HANG.
PPR TSEM
SB3 TSE1 SET RETURN ADDRESS
EQ CIA CHECK *IAF* ACCESSIBILITY
TSE1 SA3 A5+1
BX7 X3
AX3 48
NZ B4,TSE4 IF IAF INACCESSIBLE OR ERROR FLAG SET
NG X3,TSE4 IF IAF GOING DOWN
SB4 X3-2000B
NG B4,HNG IF INVALID *TSEM* REQUEST
SB4 X3-VMXR
PL B4,HNG IF INVALID *TSEM* REQUEST
SA2 VCPT*200B+FLSW
SA1 TSEA GET *TSEM* QUEUE POINTER
MX0 -RMSK
AX2 RSHF
BX2 -X0*X2
LX2 6 (X2) = REFERENCE ADDRESS
IX6 X1+X2
ERX4 X6
SB4 X1+1-VTSP
NZ X4,TSE3 IF QUEUE ENTRY NOT AVAILABLE
EWX7 X6 PASS ENTRY TO *IAF*
SX6 X1+B1
NG B4,TSE2 IF NOT AT LIMIT
SX6 VTRP RESET TO BEGINNING OF QUEUE
TSE2 SA6 A1
AX7 12 SET REQUEST COMPLETE
EQ PPR1 RETURN NON-ZERO STATUS
TSE3 SX5 VTSR COUNT UNAVAILABLE ENTRY
IX5 X2+X5
ERX2 X5
MX7 12
SX6 B1
LX7 -12
IX6 X6+X2 INCREMENT ERROR COUNT
EWX6 X5
EQ PPR1 RETURN ERROR CODE
TSE4 SX7 B0
PL X3,PPR1 IF NOT A SPECIAL REQUEST
MX7 1
NZ X3,TSE5 IF NOT *7777* REQUEST TO SET ACCESSIBILITY
SX6 VTSP
BX7 X2+X7 SET IAF ACCESSIBILITY BIT
SA7 A2
SA6 TGPA RESET QUEUE POINTERS
SX7 VTRP
SX6 VTLP
SA7 TSEA
SA6 TGPB
MX7 1
LX7 -12
EQ PPR1 RETURN NON-ZERO STATUS
TSE5 BX6 -X7*X2 CLEAR IAF ACCESSIBILITY BIT
SX7 X3+B1
NZ X7,HNG IF NOT *7776* REQUEST
SA6 A2
EQ PPR1 RETURN
TSEA CON VTRP *TSEM* QUEUE POINTER
UADM SPACE 4
*** UADM - UPDATE CONTROL POINT AREA.
*
* ENTRY
*T,OR 12/ UADM,12/ CT,10/,1/ RF,1/ DF,12/,12/
*
*T,MB 12/ SF,12/ AD,6/ P,6/ W,6/,18/INC
*T,MB+1 12/ SF,12/ AD,6/ P,6/ W,6/,18/INC
* .
* .
* .
*T,MB+CT-1 12/ SF,12/ AD,6/ P,6/ W,6/,18/INC
*
* NOTE - REQUESTS ARE PROCESSED IN REVERSE ORDER.
*
* CT NUMBER OF REQUESTS IN MESSAGE BUFFER
* RF SET IF CPU TO BE RECALLED TO CONTROL POINT
* DF DROP FLAG 0 = DROP
* 1 = NO DROP
*
* SF SUBFUNCTION CODE AS DEFINED IN COMSCPS
* CICS INCREMENT CONTROL POINT FIELD
* CIOS INCREMENT CONTROL POINT FIELD BY ONE
* CDOS DECREMENT CONTROL POINT FIELD BY ONE
* CDCS DECREMENT CONTROL POINT FIELD
* LICS INCREMENT LOW CORE FIELD
* LIOS INCREMENT LOW CORE FIELD BY ONE
* LDOS DECREMENT LOW CORE FIELD BY ONE
* LDCS DECREMENT LOW CORE FIELD
* AISS ACCOUNTING INCREMENT - IO
* AIAD ACCOUNTING INCREMENT - ADDER
* AIMP ACCOUNTING INCREMENT - MP
* CSFS SET CONTROL POINT FIELD
* FRAS ADJUST *FRC*-BASED VALUES IN *CPUMTR*
*
* AD ADDRESS OF WORD IN CP/LOW CORE
* P LOW ORDER BIT POSITION OF FIELD TO UPDATE
* W WIDTH OF FIELD TO UPDATE
* INC 18 BIT POSITIVE VALUE TO INCREMENT/DECREMENT/SET
*
* FOR *FRAS* SUBFUNCTION -
*
*T,MB+N 12/ FRAS, 48/ DESIRED *FRC* VALUE
*
* THE CPU START TIME(S) AND THE WALL CLOCK BASES ARE ADJUSTED
* BY THE DIFFERENCE BETWEEN THE DESIRED AND CURRENT VALUES OF
* THE FREE-RUNNING COUNTER. THE REQUESTING PP-S OUTPUT
* REGISTER IS CLEARED IMMEDIATELY, ALTHOUGH THE MONITOR
* FUNCTION DOES NOT COMPLETE UNTIL THE FREE-RUNNING COUNTER IS
* UPDATED (BY *DFT*). THIS IS NECESSARY TO ENSURE THAT NO
* USER JOB IS CHARGED (OR TIME LIMITED) WHEN THE MICROSECOND
* CLOCK IS ADVANCED BY AS MUCH AS DAYS, WEEKS, OR MONTHS.
* NOTE THAT THE DROP-PP OPTION AND ANY FURTHER REQUESTS ARE
* IGNORED.
*
* EXIT
*T,OR 12/,12/ STAT,12/,12/,12/
* STAT NON-ZERO IF OVERFLOW/UNDERFLOW
* BITS INDICATE WHICH REQUESTS GAVE OVERFLOW/UNDERFLOW
* BIT 0 = MB
* BIT 1 = MB+1 ETC
*
* THE FOLLOWING DESCRIBES THE ACTION TAKEN WHEN OVERFLOW/
* UNDERFLOW OCCURS.
*
* UPDATE OPTION ACTION TAKEN
* LOW CORE LEAVE FIELD ALONE.
* CONTROL POINT INCREMENT TO MAXIMUM VALUE - 1.
* DECREMENT TO ZERO ON UNDERFLOW.
* SRU UPDATES INCREMENT TO OVERFLOW VALUE - MAXIMUM
*
* IF ALL THE BITS ARE SET IN THE FIELD BEFORE THE UPDATE AND
* THE FIELD WIDTH IS GREATER THAN ONE BIT, THE UPDATE OPTION
* IS IGNORED. IF ALL THE BITS IN THE FIELD ARE SET AS A
* RESULT OF THE UPDATE, AN OVERFLOW CONDITION IS RETURNED.
*
* *PP HUNG.* WILL OCCUR FOR THE FOLLOWING CONDITIONS.
* 1) TOO MANY REQUESTS.
* 2) CONTROL POINT UPDATE AND ADDRESS NOT BETWEEN
* *STSW* AND *CSBW*.
* 3) LOW CORE UPDATE AND ADDRESS IS .GE. *CRTL*.
* 4) ILLEGAL SUBFUNCTION.
* 5) REQUEST COUNT = 0 AND NOT DROP PP OPTION.
PPR UADM
LX1 59-25
PL X1,UAD0 IF NO RECALL OF THE CPU
SA3 B7+CWQW CHECK RECALL STATUS
SB6 B7 SET EXCHANGE PACKAGE ADDRESS
LX3 59-46
SB3 UAD0 SET *RCC* RETURN ADDRESS
PL X3,RCC IF TO RECALL CPU
UAD0 UX1 X5
LX1 59-35
MX2 11
BX1 -X2*X1 CLEAR BIT FLAGS
SB4 6
SB5 X1 REQUEST COUNT
AX1 48
ZR B5,UAD10 IF NO REQUESTS PRESENT
SX7 X1 DROP FLAG
GT B5,B4,HNG IF TOO MANY REQUESTS
SB3 UAD7 SET *AIO*/*AAD* RETURN
UAD1 SA2 A5+B5 READ REQUEST
MX0 -12
SB5 B5-B1 DECREMENT REQUEST COUNT
MX6 -18
BX1 X0*X2
LX1 9
SB6 X1 OPTION CODE
AX1 58
SB4 B6-FRAS/10B
NZ X1,UAD2 IF INCREMENT/DECREMENT OF 1
TZR B4,(/NVE/UAD,NVE,/MONITOR/HNG) IF *FRAS* REQUEST
BX3 -X6*X2 SET VARIABLE INCREMENT
BX1 X1-X3 COMPLEMENT FOR DECREMENT OPTION
UAD2 LX2 24
BX5 -X0*X2 DETERMINE WORD ADDRESS
MX0 -6
LX2 12
BX4 -X2+X0 FIELD WIDTH COMPLEMENTED
AX2 6
SB4 X4+59
MX6 1
BX2 -X0*X2 FIELD POSITION WITHIN WORD
SX4 X5-STSW
AX0 X6,B4 FORM COMPLEMENT OF FIELD MASK
SX3 X5-RCCW
BX4 -X4*X3
NZ B6,UAD3 IF NOT LOW CORE UPDATE
SX4 X5-200B
SX6 -B7 SET RELATIVE TO ZERO
IX5 X5+X6
UAD3 SA3 X5+B7 READ WORD TO UPDATE
MX5 -1
PL X4,HNG IF ADDRESS OUT OF RANGE
SX6 B6-CSFS/10B CHECK SET FIELD
BX5 X5-X0 SET 1 BIT FIELD WIDTH FLAG
SB4 X2 FIELD POSITION WITHIN WORD
NZ X6,UAD4 IF NOT SET CONTROL POINT FIELD
LX6 X0,B4 CLEAR ANY EXISTING DATA
BX3 X6*X3
UAD4 AX4 X3,B4 POSITION FIELD TO BOTTOM OF WORD
BX6 X4+X0
AX2 4
BX4 -X0*X4 CURRENT VALUE OF FIELD
SB6 B6-1
ZR X5,UAD5 IF 1 BIT FIELD WIDTH
ZR X6,UAD7 IF UNLIMITED
IX6 X4+X1
BX5 X0+X6
ZR X5,UAD8 IF FIELD INCREMENTED TO MAXIMUM
UAD5 IX6 X4+X1 CURRENT VALUE + INCREMENT
LX4 X1,B4 POSITION INCREMENT/DECREMENT VALUE
BX5 X0*X6 ERASE FIELD
NZ X5,UAD8 IF OVERFLOW/UNDERFLOW
SB4 B0
SB6 B6-B1
UAD6 IX6 X4+X3 INCREMENT/DECREMENT FIELD
SA6 A3
NG B6,UAD7 IF NO SRU UPDATE
ZR B6,AIO IF INCREMENTING IO SRU
SB6 B6-1
ZR B6,AAD IF INCREMENTING ADDER SRU
SB6 B6-1
ZR B6,AMP IF INCREMENTING MAP OR OD SRU
SB6 B6-3
NE B6,B1,HNG IF ILLEGAL OPERATION CODE
UAD7 GT B5,B0,UAD1 IF MORE REQUESTS
SB6 B1+ MAKE SURE B6 IS NON-ZERO
ZR X7,.DPPM IF DROP PPU
EQ PPR1 EXIT
UAD8 SX4 X7 SET ERROR INDICATION
LX4 X4,B5
LX4 36
BX7 X7+X4
BX4 X4-X4 NO INCREMENT FOR LOW CORE UPDATE
NG B6,UAD6 IF LOW CORE OPTION
SB6 B6-B1
IX4 X6+X0 INCREMENT TO OVERFLOW VALUE - MAXIMUM
SX6 X2
PL B6,UAD9 IF SRU UPDATE
SX4 -B1
AX5 59
IX4 X4-X0 MAXIMUM - 1
BX4 -X5*X4 X4 CLEARED FOR DECREMENT (UNDERFLOW)
UAD9 LX0 X0,B4 CLEAR FIELD
LX4 X4,B4 POSITION NEW VALUE
BX3 X0*X3
SB4 B1 SET PF OR ADDER OVERFLOW FLAG
NG B6,UAD6 IF NOT SRU UPDATE
ZR X6,UAD6 IF PF OR ADDER UPDATE
LX6 2
SB4 X6 OVERFLOW FLAG MT=4, MS=10B
EQ UAD6
UAD10 SB6 B1+ MAKE SURE B6 IS NON-ZERO
ZR X1,.DPPM IF DROP PPU SELECTED
EQ HNG HANG PPU
UTEM SPACE 4,10
*** UTEM - UPDATE TABLE ENTRY.
*
* ENTRY
*T,OR 12/ UTEM,6/0,1/I,1/J,1/0,3/NR,12/,24/ ADDR
*
*T,MB 1/V,5/ WI,6/ FS,6/ BP,42/ VALUE
* .
* .
* .
*T,MB+NR-1 1/V,5/ WI,6/ FS,6/ BP,42/ VALUE
*
* NR NUMBER OF REQUESTS IN MESSAGE BUFFER.
* I INTERLOCK *ADDR* OPTION.
* I = 0, NR = 0 *ADDR* INTERLOCK (BIT 0) WILL
* BE SET (REJECT IF ALREADY SET
* OR *ADDR* ENTRY NOT IN USE).
* I = 0, NR .NE. 0 *NR* REQUESTS FROM MESSAGE
* BUFFER WILL BE PROCESSED.
* I = 1, NR = 0 *ADDR* INTERLOCK WILL BE
* CLEARED (HANG IF INTERLOCK NOT
* PREVIOUSLY SET OR *ADDR* ENTRY
* NOT IN USE).
* I = 1, NR .NE. 0 *ADDR* INTERLOCK WILL BE SET
* AFTER PROCESSING *NR* REQUESTS
* FROM MESSAGE BUFFER (REJECT IF
* VERIFY FAILURE FROM MESSAGE
* BUFFER REQUEST OR IF INTERLOCK
* ALREADY SET OR *ADDR* ENTRY
* NOT IN USE).
* J IF SET, JOB ADVANCE CHECK NEEDED ON EJT ENTRY
* (APPLICABLE ONLY FOR *I* = 1, *NR* = 0 OPTION).
* ADDR ABSOLUTE FWA TABLE TO VERIFY/UPDATE.
* V IF SET, CONTENTS OF SPECIFIED FIELD IN TABLE ENTRY
* WILL BE VERIFIED WITH CONTENTS OF *VALUE* FIELD.
* IF CLEAR, CONTENTS OF *VALUE* FIELD WILL BE STORED
* INTO SPECIFIED FIELD IN TABLE ENTRY.
* WI WORD INDEX INTO TABLE OF ENTRY TO BE
* VERIFIED/UPDATED.
* FS SIZE OF FIELD TO BE VERIFIED/UPDATED
* (1 TO 60D BITS).
* BP LOW ORDER BIT POSITION OF FIELD TO VERIFY/
* UPDATE (0 TO 59D).
* VALUE CONTENTS USED TO VERIFY SPECIFIED FIELD IN TABLE
* ENTRY (IF *V* SET) OR UPDATE SPECIFIED FIELD IN TABLE
* ENTRY (IF *V* NOT SET). RIGHTMOST *FS* NUMBER OF
* BITS OF *VALUE* ARE USED IF *FS* .LE. 42, OTHERWISE
* 42 BIT CONTENT OF *VALUE* IS USED, RIGHT JUSTIFIED
* WITH BINARY ZERO FILL.
*
* EXIT
*T,OR 12/ 0,12/ STAT,36/
*
*T,MB 1/V,5/ WI,6/ FS,6/ BP,42/ OLD VALUE
* .
* .
* .
*T,MB+NR-1 1/V,5/ WI,6/ FS,6/ BP,42/ OLD VALUE
*
* STAT 0 = OPERATION COMPLETE.
* 1 = INTERLOCK ALREADY SET (FOR *I* = 0, *NR* = 0
* OR *I* = 1, *NR* .NE. 0 PROCESSING).
* 2 = VERIFICATION FAILED (FOR *NR* .NE. 0
* PROCESSING OF REQUEST WITH *V* SET).
* NO FURTHER REQUESTS WERE PROCESSED (TO PREVENT
* UPDATE AFTER VERIFY REQUEST THAT FAILED).
* 3 = ENTRY TO INTERLOCK IS NOT IN USE (TOP 48 BITS OF
* *ADDR* = 0 FOR *I* = 0, *NR* = 0 OR *I* = 1,
* *NR* .NE. 0 PROCESSING).
*
* V,WI,FS,BP SAME AS ON ENTRY.
* OLD VALUE CONTENTS OF SPECIFIED FIELD IN TABLE ENTRY
* BEFORE UPDATE/VERIFY, RIGHT JUSTIFIED WITH
* BINARY ZERO FILL (RIGHTMOST 42 BITS OF FIELD
* IF *FS* .GT. 42).
*
* *PP HUNG* WILL OCCUR FOR THE FOLLOWING CONDITIONS.
* 1. *NR* .GT. 6.
* 2. *FS* = 0.
* 3. *BP* + *FS* .GT. 60D.
* 4. *ADDR* INTERLOCK WAS NOT PREVIOUSLY SET FOR CLEAR
* INTERLOCK REQUEST (*I* = 1, *NR* = 0 PROCESSING).
* 5. *ADDR* ENTRY NOT IN USE (BYTE 0 = 0) FOR CLEAR INTERLOCK
* REQUEST (*I* = 1, *NR* = 0 PROCESSING).
* 6. JOB ADVANCE REQUESTED ON ILLEGAL ENTRY.
PPR UTEM,,,FEX
AX1 36
SX7 B1
ZR X1,UTE3 IF SET *ADDR* INTERLOCK OPTION
MX2 -3
BX3 -X2*X1 NUMBER OF REQUESTS IN MESSAGE BUFFER
AX1 5
MX0 -42
BX1 -X1*X7
BX7 X1+X3
ZR X7,UTE3 IF CLEAR *ADDR* INTERLOCK OPTION
NZ X1,UTE0.1 IF NOT AN INTERLOCK REQUEST
SA4 X5 READ TABLE ENTRY
MX6 12
SX7 B1+ SET RETURN STATUS
BX6 X6*X4
LX4 59-0
NZ X6,UTE0 IF NOT AN EMPTY ENTRY
SX7 3 SET REPLY
EQ UTE4 EXIT
UTE0 NG X4,UTE4 IF ENTRY ALREADY INTERLOCKED
UTE0.1 SA4 A5+B1 GET MESSAGE BUFFER REQUEST
SB4 X3
SB3 6
SB5 60
GT B4,B3,HNG IF NUMBER OF REQUESTS .GT. 6
UTE1 SB4 B4-B1 DECREMENT MESSAGE BUFFER REQUESTS
BX2 -X0*X4 VALUE TO VERIFY/UPDATE FIELD WITH
MX6 -6
BX3 X0*X4
AX4 42
BX1 -X6*X4 LOW ORDER BIT POSITION OF FIELD
AX4 6
SB3 X1
BX6 -X6*X4 FIELD SIZE IN BITS
MX7 1
SB6 X6
SB7 B6-B1
ZR B6,HNG IF FIELD SIZE = 0
AX7 B7 BUILD FIELD MASK
SB7 B3+B6
GT B7,B5,HNG IF FIELD EXCEEDS WORD BOUNDARY
AX4 6
LX7 B6 RIGHT JUSTIFY MASK
MX6 -5
BX2 X7*X2 FIELD SIZE BITS OF VALUE
BX4 -X6*X4 TABLE WORD INDEX
IX4 X5+X4 TABLE ENTRY ABSOLUTE ADDRESS
SA1 X4 GET TABLE ENTRY
SB7 B5-B3
LX1 B7 RIGHT JUSTIFY FIELD IN TABLE ENTRY
BX6 X7*X1 CONTENTS OF FIELD IN TABLE ENTRY
BX1 -X7*X1
BX7 -X0*X6 RETURN OLD VALUE OF FIELD
BX1 X1+X2 REPLACE FIELD WITH NEW VALUE
BX7 X3+X7
SA7 A4
SX7 B1+B1 RETURN STATUS = 2 IF VERIFY REJECT
PL X3,UTE5 IF FIELD TO BE UPDATED
BX6 X6-X2
NZ X6,UTE4 IF FIELD DOES NOT VERIFY
UTE2 SA4 A4+B1 GET NEXT REQUEST
NZ B4,UTE1 IF MORE REQUESTS
LX7 41-1
BX7 X7*X5
ZR X7,PPR1 IF NO *ADDR* INTERLOCK OPTION
SX7 B1 SET *ADDR* INTERLOCK
UTE3 SA1 X5 GET TABLE ENTRY INTERLOCK
MX0 48
BX0 X0*X1
BX4 X0+X7
ZR X4,HNG IF CLEARING INTERLOCK ON UNUSED ENTRY
MX3 -1
BX4 -X3*X1 PREVIOUS INTERLOCK VALUE
BX2 X4+X7
ZR X2,HNG IF CLEARING ALREADY CLEAR INTERLOCK
BX1 X3*X1
BX6 X1+X7
LX2 X7,B1
BX3 -X3-X7
BX7 X7+X2 RETURN STATUS = 3 IF ENTRY NOT IN USE
ZR X0,UTE4 IF *ADDR* ENTRY NOT IN USE
BX7 X4*X7 RETURN STATUS = 1 IF SET INTERLOCK REJECT
BX4 X4*X7 INTERLOCK STATUS .AND. REQUEST BIT
LX4 59
NG X4,UTE3.1 IF WORD ALREADY INTERLOCKED
SA6 X5
UTE3.1 LX3 40-0 CHECK JOB ADVANCE OPTION
BX3 X3*X5
NZ X3,UTE6 IF EJT ENTRY JOB ADVANCE NEEDED
UTE4 LX7 36 SAVE RETURN STATUS
SA7 A5
EQ PPRX EXIT
UTE5 LX6 X1,B3 REPOSITION TABLE ENTRY
SA6 X4 STORE UPDATED TABLE ENTRY
EQ UTE2 PROCESS NEXT REQUEST
UTE6 MX3 -6
BX1 -X3*X6
SB3 PPRX SET EXIT ADDRESS FOR *JAV*
SX1 X1-EXJS*2
NZ X1,UTE4 IF JOB NOT AT CONTROL POINT
SA1 X5+B1 GET CONTROL POINT NUMBER
ERRNZ SCHE-JSNE-1 CODE DEPENDS ON VALUE
AX1 12
BX1 -X3*X1
LX1 7
TX2 X1,-SCA
PL X2,HNG IF ILLEGAL CONTROL POINT
SA7 A5 INDICATE OPERATION COMPLETE
SB7 X1
EQ JAV CHECK FOR JOB ADVANCE
VFLM SPACE 4,15
*** VFLM - VERIFY FIELD LENGTH.
*
* ENTRY
*T, OR 12/ VFLM, 12/ CP, 36/
* CP CONTROL POINT.
* 0 = USE THE CONTROL POINT TO WHICH THE PP IS ASSIGNED.
*
* EXIT
*T, OR 12/0, 12/ ST, 36/
* ST STATUS
* 0 = NO DOUBLE-BIT ERRORS ENCOUNTERED.
* 1 = JOB TO VERIFY FL FAILED.
* 2 = FIELD LENGTH VERIFICATION ALREADY IN PROGRESS.
PPR VFLM
SX7 B1 PRESET RESPONSE
LX7 36
TEQ (/CME/VLM,CME,/MONITOR/PPR1)
VFPM SPACE 4,30
*** VFPM - VERIFY FET PARAMETERS.
*
* ENTRY
*T, OR 12/ VFPM,12/ VO,18/ ,18/ FA
* VO FET PARAMETER VALIDATION OPTION.
* 0 = NO FET PARAMETER VALIDATION.
* 1 = VALIDATE FIRST AND LIMIT ONLY.
* 2 OR 3 = VALIDATE FIRST, IN, OUT, AND LIMIT.
*
* EXIT
*T, OR 12/ 0,12/ ST,36/
* ST STATUS
* 0 = NO ERROR.
* 1 = ILLEGAL FET ADDRESS.
* 2 = BUFFER ARGUMENT ERROR.
*T, MB+2 12/ 0, 24/ IN, 24/ OUT
*T, MB+3 1/R, 5/0, 6/ FETL, 24/ FIRST, 24/ LIMIT
* R SET IF RANDOM FILE.
* FETL FET LENGTH - 5.
*
* FIRST, IN, OUT, LIMIT ARE RETURNED ONLY IF FET PARAMETER
* VALIDATION IS REQUESTED. ZERO VALUE IS RETURNED FOR THOSE
* PARAMETERS NOT VALIDATED (FOR OPTION 1, IN=OUT=0 IS RETURNED,
* FOR OPTION 2/3, FIRST=IN=OUT=LIMIT=0 IS RETURNED).
* MB+2 AND MB+3 ARE NOT RETURNED IF ERROR IS DETECTED.
PPR VFPM
SX7 B1 RETURN STATUS = ILLEGAL FET ADDRESS
AX2 24
SB3 PPR1 SET ERROR EXIT ADDRESS FOR *VFA*/*VFP*
SB7 X2 SET CP/PCP ADDRESS
LX7 36
SB6 VFM1 SET RETURN ADDRESS FOR *VFA*
EQ VFA VERIFY FET ADDRESS
VFM1 BX0 X6 SAVE FET LENGTH - 5 AND RANDOM FLAG
SX7 B1+B1 RETURN STATUS = BUFFER ARGUMENT ERROR
SB6 VFM2 SET RETURN ADDRESS FOR *VFP*
SA2 A5 GET FET PARAMETER VALIDATION OPTION
MX6 -6
SX1 B0
LX2 -36
BX6 -X6*X2
LX7 36
NZ X6,VFP IF FET PARAMETER VALIDATION NEEDED
VFM2 BX7 X1+X0 SAVE FIRST AND LIMIT
SA6 A5+3 SAVE IN AND OUT
SA7 A6+B1
BX7 X7-X7 RETURN STATUS = NO ERROR
SA7 A5
EQ PPRX EXIT
VMSM SPACE 4,25
*** VMSM - VALIDATE MASS STORAGE.
* LEGAL ONLY WHEN MASS STORAGE VALIDATION IS SELECTED.
*
* ENTRY
*T, OR 12/ VMSM,12/ EQ,12/ TK,12/ SF,12/
* EQ EST ORDINAL TO PROCESS.
* TK FIRST TRACK OF CHAIN FOR VTCS OPTION.
* SF SUBFUNCTION CODE AS DEFINED IN COMSCPS.
*
* VEIS VALIDATE EQUIPMENT WITH INTERLOCK.
* VEQS VALIDATE EQUIPMENT.
* VTCS VALIDATE TRACK CHAIN.
*
* REPLY
*T, OR 12/,12/ RS,36/
* RS REPLY STATUS
* BIT 0 SET = RESERVATION BIT COUNT ERROR.
* BIT 1 SET = PRESERVED FILE COUNT ERROR.
* BIT 2 SET = PERMIT CHAIN ERROR.
* BIT 3 SET = CATALOG CHAIN ERROR.
* BIT 4 SET = INDIRECT CHAIN ERROR.
*
* BIT 0 SET = BAD TRACK CHAIN (VTCS ONLY).
*
* *PP HUNG.* WILL OCCUR FOR AN ILLEGAL MASS STORAGE EQUIPMENT.
*
* NOTE - IF THE REQUEST IS FOR AN INDEPENDENT SHARED DEVICE,
* THE MST, TRT, AND DIT ARE READ FROM THE DEVICE TO CM BY *1RU*
* BEFORE THE VMSM IS ISSUED TO CPUMTR.
* IF THE *VEIS* SUBFUNCTION IS USED ON AN INDEPENDENT SHARED
* DEVICE BECAUSE THE MST INTERLOCK WAS PREVIOUSLY LEFT SET,
* THE *LPTU* FLAG MUST BE SET FIRST TO PREVENT *1RU* FROM
* HANGING TRYING TO SET THE INTERLOCK.
PPR VMSM,(/ISD/VMS,ISD,/LSPMMF/CME0,LSPMMF,/MONITOR/PMR ),
,(/VMS/VMS,VMS,/PROGRAM/HNG)
VSAM SPACE 4,30
*** VSAM - VALIDATE SECURITY ACCESS FUNCTIONS.
*
* ENTRY
*T, OR 12/ VSAM, 12/ FN, 36/
* FN = 0 (VJAS) - SET JOB ACCESS LEVEL.
* FN = 1 (VSFS) - SET FILE ACCESS LEVEL.
* FN = 2 (VAES) - VALIDATE ACCESS LEVEL FOR EQUIPMENT.
* FN = 3 (VAJS) - VALIDATE ACCESS LEVEL/CATEGORIES FOR JOB.
* FN = 4 (VJCS) - VALIDATE JOB CREATION PARAMETERS.
* FN = 5 (VEDS) - VALIDATE EXPIRATION DATE.
* FN = 6 (VJLS) - VALIDATE JOB ACCESS LEVEL LIMITS.
*
*
* 0 VJAS - SET JOB ACCESS LEVEL.
*
* ENTRY
*T, OR 12/ VSAM, 12/ VJAS, 24/ , 12/ AL
* AL REQUESTED JOB ACCESS LEVEL.
*
* EXIT
*T, OR 12/ 0, 12/ ST, 36/
* ST = 0 IF ACCESS LEVEL VALID (FUNCTION COMPLETE).
*
* FUNCTION
* DETERMINE IF THE SPECFIED ACCESS LEVEL IS VALID FOR THE
* CALLING JOB. IF VALID, SET THE NEW ACCESS LEVEL IN THE
* CONTROL POINT AREA AND THE EJT ENTRY FOR THE JOB.
*
* *PP HUNG.* WILL OCCUR IF AN INVALID ACCESS LEVEL IS
* SPECIFIED.
*
*
* 1 VSFS - SET FILE ACCESS LEVEL.
*
* ENTRY
*T, OR 12/ VSAM, 12/ VSFS, 12/ , 12/ FA, 12/ AL
* FA NFL ADDRESS FOR THE FNT ENTRY OF THE FILE.
* AL REQUESTED FILE ACCESS LEVEL.
*
* EXIT
*T, OR 12/ 0, 12/ ST, 36/
* ST = 0 IF ACCESS LEVEL VALID (FUNCTION PERFORMED).
*
* FUNCTION
* DETERMINE IF THE SPECIFIED ACCESS LEVEL IS VALID FOR
* THE CALLING JOB AND THE EQUIPMENT UPON WHICH THE
* SPECIFIED JOB RESIDES. IF VALID, SET THE NEW ACCESS
* LEVEL IN THE FNT ENTRY FOR THE FILE.
*
* *PP HUNG.* WILL OCCUR FOR ANY OF THE FOLLOWING CONDITIONS.
* 1) THE FNT ENTRY FOR THE FILE IS NOT SET BUSY BEFORE
* CALLING *VSAM*.
* 2) AN INVALID ACCESS LEVEL IS SPECIFIED.
*
*
* 2 VAES - VALIDATE ACCESS LEVEL FOR EQUIPMENT.
*
* ENTRY
*T, OR 12/ VSAM, 12/ VAES, 12/ EQ, 12/ , 12/ AL
* EQ EST ORDINAL FOR EQUIPMENT.
* AL REQUESTED ACCESS LEVEL.
*
* EXIT
*T, OR 12/ 0, 12/ ST, 36/
* ST = 0 IF ACCESS LEVEL VALID.
*
* FUNCTION
* DETERMINE IF THE SPECIFIED ACCESS LEVEL IS WITHIN
* THE EQUIPMENT LIMITS (OR, FOR A MASS STORAGE DEVICE,
* WITHIN THE DEVICE LIMITS) FOR A SPECIFIED EQUIPMENT.
*
* *PP HUNG.* WILL OCCUR FOR ANY OF THE FOLLOWING CONDITIONS.
* 1) AN INVALID EST ORDINAL IS SPECIFIED.
* 2) AN INVALID ACCESS LEVEL IS SPECIFIED.
*
*
* 3 VAJS - VALIDATE ACCESS LEVEL AND/OR CATEGORIES FOR JOB.
*
* ENTRY
*T, OR 12/ VSAM, 12/ VAJS, 24/ , 12/ P
*T, MB 12/ , 12/ AL, 36/ AC
* P PROCESSING OPTIONS.
* 1 - ACCESS LEVEL ONLY.
* 2 - ACCESS CATEGORIES ONLY.
* 3 - BOTH ACCESS LEVEL AND ACCESS CATEGORIES.
* AL ACCESS LEVEL.
* AC ACCESS CATEGORIES.
*
* EXIT
*T, OR 12/ 0, 12/ ST, 36/
* ST = 0 IF SPECIFIED *AL* AND/OR *AC* WERE VALID.
*
* FUNCTION
* DETERMINE IF THE SPECIFIED ACCESS LEVEL AND/OR
* ACCESS CATEGORY SET ARE CURRENTLY LEGAL FOR THE
* CALLING JOB.
*
* *PP HUNG.* WILL OCCUR IF AN INVALID ACCESS LEVEL IS
* SPECIFIED.
*
*
* 4 VJCS - VALIDATE JOB CREATION PARAMETERS.
*
* ENTRY
*T, OR 12/ VSAM, 12/ VJCS, 12/ OT, 12/ UAL, 12/ IJL
*T, MB 12/ , 12/ ALVAL, 36/ ACVAL
* OT ORIGIN TYPE FOR JOB.
* UAL UPPER LIMIT ON ACCESS LEVELS FOR JOB
* (4000B IF DEFAULT IS TO BE USED).
* IJL INITIAL JOB ACCESS LEVEL.
* ALVAL ACCESS LEVEL VALIDATION BITS (FROM VALIDUS).
* ACVAL ACCESS CATEGORY VALIDATION (FROM VALIDUS).
*
* EXIT
*T, OR 12/ 0, 12/ ST, 12/ AIJL, 12/ RUAL, 12/ RLAL
*T, MB 12/ , 12/ RALVAL, 36/ RACVAL
* ST = 0 IF JOB MAY BE CREATED.
* AIJL ADJUSTED INITIAL JOB ACCESS LEVEL.
* RUAL RESTRICTED UPPER ACCESS LEVEL LIMIT.
* RLAL RESTRICTED LOWER ACCESS LEVEL LIMIT.
* RALVAL RESTRICTED SET OF ACCESS LEVEL BITS.
* RACVAL RESTRICTED SET OF ACCESS CATEGORY BITS.ATION
*
* FUNCTION
* DETERMINE IF THE NEW JOB CAN BE CREATED WITH THE
* SPECIFIED VALIDATIONS AND WITHIN THE SPECFIED LIMITS.
* THE INITIAL JOB ACCESS LEVEL SPECIFIED BY THE CALLER IS
* THE LOCAL FILE ACCESS LEVEL, IF THE JOB IS BEING CREATED
* FROM A LOCAL FILE. OTHERWISE, THIS VALUE IS ZERO. THE
* UPPER LIMIT SPECIFIED BY THE CALLER IS FROM THE JOB CARD
* (LINE ACCESS LEVEL LIMIT FOR INTERACTIVE JOBS). IF THE
* DEFAULT IS TO BE USED, 4000B IS SPECIFIED.
*
* IF THE JOB CAN BE CREATED, RESTRICT THE ACCESS LEVEL
* LIMITS AND VALIDATION BITS, AND THE ACCESS CATEGORY
* VALIDATION BITS, TO BE CONSISTENT AND TO BE WITHIN
* THE LIMITS FOR THE SPECIFIED JOB ORIGIN TYPE.
*
* THE SPECIFIED INITIAL ACCESS LEVEL WILL BE ADJUSTED UPWARDS
* IF NECESSARY TO THE RESTRICTED LOWER ACCESS LEVEL LIMIT. IF
* IT IS ALREADY ABOVE THIS LEVEL, IT WILL BE SET TO THE NEXT
* HIGHEST ACCESS LEVEL IN THE RESTRICTED SET OF ACCESS LEVEL
* BITS. IF THERE ARE NO VALID LEVELS AT OR ABOVE *IJL*, THE
* JOB CANNOT BE CREATED.
* IF THE VALUE 4000B IS SPECIFIED FOR *UAL*, THE RESTRICTED
* UPPER ACCESS LEVEL LIMIT WILL BE SET TO THE ADJUSTED INITIAL
* ACCESS LEVEL, CALCULATED AS DESCRIBED ABOVE.
*
* *PP HUNG.* WILL OCCUR FOR ANY OF THE FOLLOWING CONDITIONS.
* 1) AN INVALID ACCESS LEVEL IS SPECIFIED.
* 2) AN INVALID ORIGIN TYPE IS SPECIFIED.
*
*
* 5 VEDS - VALIDATE EXPIRATION DATE.
*
* ENTRY
*T, OR 12/ VSAM, 12/ VEDS, 18/ , 18/ EXP
* EXP EXPIRATION DATE
*
* EXIT
*T, OR 12/ 0, 12/ ST, 36/
* ST = 0 IF EXPIRATION DATE NOT YET REACHED.
*
* FUNCTION
* DETERMINE IF THE SPECIFIED EXPIRATION DATE HAS BEEN
* REACHED (IF EXPIRATION DATE .LE. TODAY-S DATE).
*
*
* 6 VJLS - VALIDATE JOB ACCESS LEVEL LIMITS.
*
* ENTRY
*T, OR 12/ VSAM, 12/ VJLS, 12/ OT, 12/ UAL, 12/ LAL
* OT = ORIGIN TYPE OF JOB.
* UAL = UPPER ACCESS LEVEL LIMIT FOR JOB.
* LAL = LOWER ACCESS LEVEL LIMIT FOR JOB.
*
* EXIT
*T, OR 12/ 0, 12/ ST, 36/
* ST = 0 IF ACCESS LEVEL LIMITS VALID.
*
* FUNCTION
* DETERMINE IF THE SPECIFIED JOB ACCESS LEVEL LIMITS
* LIE WITHIN THE RANGE OF VALID ACCESS LEVELS FOR
* THE SPECIFIED ORIGIN TYPE.
*
* *PP HUNG.* WILL OCCUR FOR ANY OF THE FOLLOWING CONDITIONS.
* 1) AN INVALID ACCESS LEVEL IS SPECIFIED.
* 2) AN INVALID ORIGIN TYPE IS SPECIFIED.
PPR VSAM
LX1 -36 GET SUBFUNCTION NUMBER
SB4 X1-TVSAL
MX0 -12
PL B4,HNG IF ILLEGAL FUNCTION
SA3 B7+JCIW CHECK SUBSYSTEM ID
BX1 -X0*X5 GET SPECIFIED ACCESS LEVEL
SA2 A5+B1 GET (MB)
TB5 OSSM GET OPERATING SYSTEM SECURITY MODE
LX3 -24
BX3 -X0*X3
SX7 X3-LSSI-1
SB4 B4+TVSAL
JP TVSA+B4 PROCESS FUNCTION
* EXIT TO SUBFUNCTIONS WITH -
* (X0) = 48-BIT MASK.
* (X1) = SPECIFIED ACCESS LEVEL (BYTE 4 OF (OR)).
* (X2) = FIRST WORD OF MESSAGE BUFFER.
* (X5) = OUTPUT REGISTER.
* (X7) .GE. 0 IF THE JOB IS A SUBSYSTEM.
* (B5) = OPERATING SYSTEM SECURITY MODE.
* OPTION TABLE.
TVSA BSS 0
LOC 0
+ EQ VS01 (VJAS) - SET JOB ACCESS LEVEL
+ EQ VS11 (VSFS) - SET FILE ACCESS LEVEL
+ EQ VS21 (VAES) - VALIDATE *AL* FOR EQUIPMENT
+ EQ VS31 (VAJS) - VALIDATE *AL*/*AC* FOR JOB
+ EQ VS42 (VJCS) - VALIDATE JOB CREATION PARAMETERS
+ EQ VS51 (VEDS) - VALIDATE EXPIRATION DATE
+ EQ VS61 (VJLS) - VALIDATE JOB LIMITS
TVSAL BSS 0
LOC *O
* *VJAS* (0) - SET JOB ACCESS LEVEL.
VS01 ZR B5,VSX1 IF SYSTEM IN UNSECURED MODE
SB6 VS02 SET RETURN ADDRESS
EQ VAJ VALIDATE ACCESS LEVEL FOR JOB
VS02 ZR X6,VSX3 IF ACCESS LEVEL NOT VALID
SA2 B7+JSCW GET CURRENT ACCESS LEVEL
LX2 -45
MX0 -3
BX3 -X0*X2
IX6 X1-X3 CHECK IF NEW *AL* LESS THAN OLD
BX3 X2 CHECK IF VALIDATED FOR DOWNGRADE
LX3 59-55+45
BX6 -X3*X6
BX6 X7*X6 CHECK IF THE JOB IS A SUBSYSTEM
NG X6,VSX3 IF INVALID ACCESS
BX2 X0*X2 SET NEW ACCESS LEVEL IN *JSCW*
BX6 X2+X1
LX6 45
SA6 A2
EQ VSX1 RETURN (NORMAL STATUS)
* *VSFS* (1) - SET ACCESS LEVEL FOR FILE.
VS11 SB6 VS12 SET RETURN ADDRESS
EQ VAJ VALIDATE ACCESS LEVEL FOR JOB
VS12 ZR B5,VS13 IF SYSTEM IN UNSECURED MODE
ZR X6,VSX3 IF ACCESS LEVEL NOT VALID
VS13 LX0 12 GET FNT ADDRESS
BX2 -X0*X5
SA3 B7+FLSW GET RA
LX2 -12
MX0 -24
LX3 -12
BX3 -X0*X3
LX3 6
IX2 X3-X2 CALCULATE FNT ADDRESS
SX3 B1
ERRNZ FSTL-1 CODE DEPENDS ON VALUE
IX2 X2+X3 *FSTL* ADDRESS
ERX3 X2 GET *FSTL*
LX3 59-0
NG X3,HNG IF FILE NOT SET BUSY
LX3 12-59+0 GET EST ORDINAL
MX0 -12
SB6 VS14 SET RETURN ADDRESS
BX3 -X0*X3
EQ VAE VALIDATE ACCESS LEVEL FOR EQUIPMENT
VS14 ZR B5,VS15 IF SYSTEM IN UNSECURED MODE
NG X6,VSX3 IF ACCESS LEVEL NOT VALID
VS15 SX3 B1+ GET CURRENT FILE ACCESS LEVEL
ERRNZ FUTL-FSTL-1 CODE DEPENDS ON VALUE
IX2 X2+X3 *FUTL* ADDRESS
ERX3 X2 GET *FUTL*
LX3 -24
MX0 -3
ZR B5,VS16 IF SYSTEM IN UNSECURED MODE
BX6 -X0*X3
IX6 X1-X6 CHECK IF NEW *AL* LESS THAN OLD
SA4 B7+JSCW
LX4 59-54 CHECK IF VALIDATED FOR DOWNGRADE
BX6 -X4*X6
BX6 X7*X6 CHECK IF THE JOB IS A SUBSYSTEM
NG X6,VSX3 IF INVALID ACCESS
VS16 BX3 X0*X3 SET NEW ACCESS LEVEL IN *FUTL*
BX7 X3+X1
LX7 24
EWX7 X2 REWRITE *FUTL*
EQ VSX1 EXIT (NORMAL STATUS)
* *VAES* (2) - VALIDATE ACCESS LEVEL FOR EQUIPMENT.
VS21 ZR B5,VSX1 IF SYSTEM IN UNSECURED MODE
LX5 -24 GET EST ORDINAL
BX3 -X0*X5
ZR X3,HNG IF INVALID EST ORDINAL
TX4 X3,-ESTL
PL X4,HNG IF INVALID EST ORDINAL
LX5 24
SB6 VS22 SET RETURN ADDRESS
EQ VAE VALIDATE ACCESS LEVEL FOR EQUIPMENT
VS22 NG X6,VSX3 IF ACCESS LEVEL NOT VALID
EQ VSX1 EXIT (NORMAL STATUS)
* *VAJS* (3) - VALIDATE ACCESS LEVEL / ACCESS CATEGORY SET.
VS31 ZR B5,VSX1 IF SYSTEM IN UNSECURED MODE
BX4 X1 SAVE SELECTION PARAMETERS
LX1 59-0
PL X1,VS33 IF ACCESS LEVEL NOT TO BE CHECKED
LX0 36
BX1 -X0*X2 GET SPECIFIED ACCESS LEVEL
LX1 -36
SB6 VS32 SET RETURN ADDRESS
EQ VAJ VALIDATE ACCESS LEVEL FOR JOB
VS32 ZR X6,VSX3 IF ACCESS LEVEL NOT VALID
VS33 LX4 59-1
PL X4,VSX1 IF ACCESS CATEGORY SET NOT TO BE CHECKED
MX0 -32 GET SPECIFIED ACCESS CATEGORY SET
BX2 -X0*X2
SA3 B7+JSCW GET VALID ACCESS CATEGORY SET FOR JOB
BX3 -X0*X3
BX6 -X3*X2
NZ X6,VSX3 IF NONVALID BITS SET IN REQUEST
EQ VSX1 EXIT (NORMAL STATUS)
* *VJCS* (4) - VALIDATE JOB CREATION PARAMETERS.
VS41 BX5 X5-X5 CLEAR OUTPUT REGISTER
MX0 12 CLEAR ACCESS LEVELS AND CATEGORIES
BX2 X0*X2
EQ VS411 EXIT
VS42 ZR B5,VS41 IF SYSTEM IN UNSECURED MODE
SB4 X1-7
GT B4,B0,HNG IF INVALID LOWER ACCESS LEVEL
LX0 24 GET ORIGIN TYPE
BX4 -X0*X5
LX4 -24
SB4 X4-IAOT
GT B4,B0,HNG IF INVALID ORIGIN TYPE
TA4 X4,JCB GET ORIGIN TYPE VALIDATIONS FROM SCT
LX4 -36
MX0 -3
BX3 -X0*X4 ORIGIN TYPE UPPER LIMIT
LX4 -3
BX4 -X0*X4 ORIGIN TYPE LOWER LIMIT
SB4 X4 SET *LAL* TO ORIGIN TYPE LOWER LIMIT
MX0 -12
LX0 12
BX1 -X0*X5
LX1 -12
SB3 X1+ SPECIFIED UPPER ACCESS LEVEL (*UAL*)
BX6 X1 CHECK FOR *DEFAULT UAL* SPECIFICATION
LX6 59-11
NG X6,VS44 IF DEFAULT TO BE USED FOR *UAL*
SB5 X1-7
GT B5,B0,HNG IF INVALID UPPER ACCESS LEVEL
IX6 X1-X4
NG X6,VSX3 IF *UAL* .LT. ORIGIN TYPE LOWER LIMIT
IX6 X3-X1
PL X6,VS45 IF *UAL* .LE. ORIGIN TYPE UPPER LIMIT
VS44 SB3 X3+ SET *UAL* TO ORIGIN TYPE UPPER LIMIT
* CONSTRUCT RESTRICTED SET OF ACCESS LEVEL VALIDATION BITS.
VS45 SB5 B3-B4 CONSTRUCT MASK FOR VALID ACCESS LEVELS
NG B5,VSX3 IF *LAL* .GT. *UAL*
MX3 1
AX3 B5
SB5 B3+36+1 ALIGN MASK
LX3 B5
BX6 X3*X2 CONSTRUCT SUBSET OF ACCESS LEVEL BITS
ZR X6,VSX3 IF NO VALID ACCESS LEVELS IN RANGE
LX0 24
BX2 X0*X2
BX2 X2+X6 (X2) = UPDATED MESSAGE BUFFER WORD
* CONSTRUCT RESTRICTED SET OF ACCESS CATEGORY VALIDATION BITS.
SA3 SSML GET SYSTEM ACCESS CATEGORY SET
MX7 -32
BX3 -X7*X3
BX7 X7+X3 CONSTRUCT MASK
BX2 X7*X2 (X2) = UPDATED MESSAGE BUFFER WORD
* RESTRICT JOB ACCESS LEVEL LIMITS WITH RESTRICTED SET
* OF ACCESS LEVEL VALIDATION BITS.
MX0 -12
BX4 -X0*X5 SAVE *IJL*
BX7 X2
SB6 B4-23 PUT *LAL* BIT IN BIT 59
SX6 B4 GET LOWER ACCESS LEVEL LIMIT (*LAL*)
AX7 B6 (CIRCULAR LEFT SHIFT)
NG X7,VS47 IF VALIDATION BIT SET FOR CURRENT *LAL*
VS46 LX7 -1 INCREMENT *LAL*
SX6 X6+B1
PL X7,VS46 IF VALIDATION BIT NOT SET FOR NEW *LAL*
VS47 BX5 X0*X5 UPDATE *LAL* IN OUTPUT REGISTER
BX5 X5+X6
BX3 X6 SAVE *RLAL*
VS48 BX7 X2 CHECK UPPER ACCESS LEVEL LIMIT (*UAL*)
SB4 B3-23 PUT *UAL* BIT IN BIT 59
AX7 B4 (CIRCULAR LEFT SHIFT)
NG X7,VS410 IF VALIDATION BIT SET FOR CURRENT *UAL*
VS49 LX7 1 DECREMENT *UAL*
SB3 B3-B1
PL X7,VS49 IF VALIDATION BIT NOT SET FOR NEW *UAL*
VS410 SX6 B3+ UPDATE *UAL* IN OUTPUT REGISTER
MX0 -12
LX0 12
LX6 12
BX5 X0*X5
BX5 X5+X6
SX6 B3 GET *RUAL*
SB4 X3 SAVE *RLAL*
IX0 X3-X4
PL X0,VS410.2 IF *IJL* .LE. *RLAL*
BX7 X2
SB6 X4-23 PUT *IJL* BIT IN BIT 59
AX7 B6 (CIRCULAR LEFT SHIFT)
BX3 X4
NG X7,VS410.2 IF VALIDATION BIT SET FOR CURRENT *IJL*
VS410.1 LX7 -1 INCREMENT *IJL*
SX4 X4+B1
IX0 X6-X4
BX3 X4
NG X0,VSX3 IF *AIJL* ABOVE *RUAL*
PL X7,VS410.1 IF VALIDATION BIT NOT SET FOR *AIJL*
VS410.2 MX0 -12 SET *AIJL* IN OUTPUT REGISTER
LX0 24
LX3 24
BX5 X0*X5
BX5 X5+X3
LX1 59-11
PL X1,VS411 IF DEFAULT NOT TO BE USED FOR *UAL*
LX3 -24
SB3 X3+
IX1 X6-X3
ZR X1,VS411 IF *AIJL* = *RUAL*
LX3 12 RESET *RUAL* TO *AIJL* IN OR
LX0 -12
BX5 X0*X5
BX5 X5+X3
SB5 B3-B4 RECALCULATE MASK
MX3 1
AX3 B5
SB5 B3+36+1
LX3 B5
BX6 X3*X2 RESET RESTRICTED SET OF ACCESS LEVELS
LX0 24
BX2 X0*X2
BX2 X2+X6
VS411 BX7 X2 UPDATE MESSAGE BUFFER
SA7 A2
EQ VSX1 EXIT (NORMAL STATUS)
* *VEDS* (5) - VALIDATE EXPIRATION DATE.
VS51 MX0 -18
SA2 PDTL
BX1 -X0*X5 EXPIRATION DATE
LX2 -18
BX2 -X0*X2 TODAY-S DATE
IX6 X2-X1
PL X6,VSX3 IF EXPIRATION DATE HAS BEEN REACHED
EQ VSX1 EXIT (NORMAL STATUS)
* *VJLS* (6) - VALIDATE JOB ACCESS LEVEL LIMITS.
VS61 ZR B5,VSX1 IF SYSTEM IN UNSECURED MODE
LX0 24 GET ORIGIN TYPE
BX4 -X0*X5
LX4 -24
SB4 X4-IAOT
GT B4,B0,HNG IF INVALID ORIGIN TYPE
TA4 X4,JCB GET LIMITS FOR ORIGIN TYPE FROM SCT
LX4 -36
MX0 -3
BX3 -X0*X4 ORIGIN TYPE UPPER LIMIT
LX4 -3
SB4 X1-7
GT B4,B0,HNG IF INVALID LOWER ACCESS LEVEL
BX4 -X0*X4 ORIGIN TYPE LOWER LIMIT
IX6 X3-X1
NG X6,VSX3 IF *LAL* .GT. ORIGIN TYPE UPPER LIMIT
IX6 X1-X4
MX0 -12
NG X6,VSX3 IF *LAL* .LT. ORIGIN TYPE LOWER LIMIT
LX0 12 GET SPECIFIED *UAL*
BX1 -X0*X5
LX1 -12
IX6 X3-X1
SB4 X1-7
GT B4,B0,HNG IF INVALID UPPER ACCESS LEVEL
NG X6,VSX3 IF *UAL* .GT. ORIGIN TYPE UPPER LIMIT
IX6 X1-X4
NG X6,VSX3 IF *UAL* .LT. ORIGIN TYPE LOWER LIMIT
* EQ VSX1 EXIT (NORMAL STATUS)
* *VSAM* EXIT PROCESSING.
VSX1 SX6 B0+ RETURN NORMAL STATUS
VSX2 MX0 -36 CLEAR BYTES 0 AND 1 OF OUTPUT REGISTER
BX7 -X0*X5
BX7 X7+X6 SET REPLY STATUS
EQ PPR1 EXIT
VSX3 SX6 B1 RETURN REJECT STATUS
LX6 36
EQ VSX2 SET OUTPUT REGISTER
TITLE PPU REQUEST PROCESSING SUBROUTINES.
CCP SPACE 4,20
** CCP - CONVERT CPU SCHEDULING PARAMETERS.
*
* ON CME MACHINES, CONVERT THE CPU SCHEDULING PARAMETERS IN
* JCB WORD *CSJT* FROM MILLISECONDS TO *CSAW* UNITS (UNITS OF
* 64 MICROSECONDS) AND PLACE THE CONVERTED VALUES INTO JCB
* WORDS *CSAT* AND *CSBT*. ON NON-CME MACHINES, COPY THE
* PARAMETERS WITHOUT CONVERSION FROM *CSJT* TO *CSAT*/*CSBT*.
*
* ENTRY (X4) = SERVICE CLASS.
* (B3) = RETURN ADDRESS.
*
* EXIT PARAMETERS CONVERTED FOR SPECIFIED SERVICE CLASS.
* (A1) = ADDRESS OF *JCB* *CSBT* WORD.
*
* USES X - 0, 1, 2, 6, 7.
* A - 1, 6.
CCP BSS 0 ENTRY
CX1 X4,JCB CONVERT JCB ORDINAL TO OFFSET
MX0 -12
TA1 X1+CSJT,JCB GET UNCONVERTED PARAMETERS
TNO /CME/CCP,CME CONVERT PARAMETERS FOR CME MACHINE
* COPY PARAMETERS WITHOUT CONVERSION FOR NON-CME MACHINE.
BX7 -X0*X1 UNEXTENDED CPU SLICE
LX1 -12
BX6 -X0*X1 RECALL CPU SLICE
IX7 X7-X6 UNEXTENDED SLICE - RECALL SLICE
LX1 -12
BX2 -X0*X1 CPU SLICE EXTENSION
IX7 X7+X2 UNEXTENDED SLICE + EXTENSION - RECALL SLICE
LX6 -18
BX6 X6+X2
LX6 36
BX6 X6+X7
SA6 A1+B1
ERRNZ CSAT-CSJT-1 WORDS MUST BE CONTIGUOUS
LX1 -12
BX6 -X0*X1 SYSTEM I/O CPU THRESHOLD
SA1 A6+B1
ERRNZ CSBT-CSAT-1 WORDS MUST BE CONTIGUOUS
MX0 42
BX1 X0*X1
BX6 X1+X6
SA6 A1
JP B3 RETURN
HNG SPACE 4,15
** HNG - HANG PPU.
*
* ALL REGISTERS ARE SAVED TO AID IN PROBLEM DIAGNOSIS.
* LEAVE PPU OUTPUT REGISTER SET, SET PACKED TIME AND DATE IN
* LAST WORD OF MESSAGE BUFFER, AND DISPLAY MESSAGE.
* MAY BE CALLED FROM EITHER MONITOR OR PROGRAM MODE WHEN
* ENTERED AT *HNG1*.
*
*
* ENTRY (A5) = PPU OUTPUT REGISTER ADDRESS.
* (B5) = EXIT ADDRESS IF ENTERED AT *HNG1*.
*
* USES X - 1, 7.
* B - 5.
* A - 1, 7.
HNG RJ SVR SAVE REGISTERS
HNG0 SA5 A5+ REREAD PP OUTPUT REGISTER
SB5 HNGM FLAG WE ARE HANGING PP TO *CHGM*
EQ .CHGM ASSIGN *1MA* TO ISSUE DAYFILE MESSAGES
* (B5) = EXIT ADDRESS.
HNG1 RJ SVR SAVE REGISTERS
HNG2 SA1 PDTL SET PACKED TIME AND DATE
SX7 4RHNG//32 ADD *HNG/* TO PACKED DATE/TIME
PX7 X7
LX7 5+36
BX7 X7+X1
SA1 A5 SET STORAGE MOVABLE FLAG
SA7 A5+6
MX7 1
LX7 56-59
BX7 X7+X1
SA7 A5
SA1 A5-B1 ADD PP NAME TO *PP HUNG* MESSAGE
MX7 18
BX7 X7*X1
SX1 HNGA SET *PP HUNG - XXX* MESSAGE
SA7 X1+B1
* EQ MSC SET MESSAGE IN SYSTEM CONTROL POINT
MSC SPACE 4
** MSC - SET MESSAGE IN SYSTEM CONTROL POINT.
*
* ENTRY (X1) = MESSAGE ADDRESS.
* (B5) = EXIT ADDRESS.
*
* USES X - 1, 7.
* A - 1, 7.
MSC SA1 X1 READ FIRST WORD OF MESSAGE
BX7 X1
TA7 MS2W,SCA SET MESSAGE IN SYSTEM CONTROL POINT
SA1 A1+B1
BX7 X1
SA1 A1+B1
SA7 A7+B1
BX7 X1
SA7 A7+B1
JP B5 EXIT
HNGA DATA H*PP HUNG - *
DATA C*XXX* NAME OF HUNG PP
SABT DATA C* SYSTEM ABORT.*
PMR SPACE 4
** PMR - ENTER PPU PROGRAM MODE REQUEST.
*
* ENTRY (X5) = OUTPUT REGISTER.
*
* EXIT TO *EPR*.
PMR TX3 A5-47*10B-1,-FP SET PPU SHIFT COUNT
BX7 X7-X7
PX1 X7 DISABLE PPU REQUEST
SX2 B1 SET REQUEST BIT
AX3 3
SB4 X3
BX7 X1+X5
AX0 X2,B4
SA7 A5
EQ EPR ENTER PROGRAM MODE REQUEST
RZX SPACE 4,10
** RZX - RETURN ZERO OUTPUT REGISTER AND EXIT.
*
* ENTRY (A5) = OUTPUT REGISTER ADDRESS.
*
* EXIT TO *PPRX*.
* (OR) = 0.
RZX BSS 0 ENTRY
SX7 B0 CLEAR OUTPUT REGISTER
SA7 A5
EQ PPRX EXIT
SPB SPACE 4,15
** SPB - SET PPU REQUEST BIT.
*
* ENTRY (X0) = 1 IF BIT TO BE SET.
* (X0) = 0 IF BIT TO BE CLEARED.
* (X1) = REQUEST WORD.
* (B3) = EXIT ADDRESS.
* (A1) = ADDRESS OF WORD.
*
* EXIT NONE.
*
* USES X - 0, 1, 2, 3, 6.
* B - 4.
* A - 6.
*
* CALLS NONE.
SPB BSS 0 ENTRY
TX2 A5-47*10B-1,-FP SET PPU SHIFT COUNT
SX3 B1 SET MASK BIT
AX2 3
SB4 X2
AX3 X3,B4 CLEAR PREVIOUS REQUEST
BX1 -X3*X1
AX0 X0,B4 SET REQUEST BIT
BX6 X1+X0
SA6 A1 STORE REQUEST WORD
JP B3 EXIT
SVR SPACE 4,10
** SVR - SAVE REGISTERS.
*
* EXIT (BXP - BXP+7) = *A* AND *B* REGISTER VALUES.
* (BXP+8 - BXP+15) = *X* REGISTER VALUES.
*
* USES X - 0, 6, 7.
* A - 6, 7.
* B - 1, 7.
SVR PS ENTRY/EXIT
SB1 B7-B0 HOLD *B7*
SB7 A7-B0 HOLD *A7*
SA7 BXP+15 SAVE *X7*
BX7 X0
SA7 BXP+8 SAVE *X0*
BX7 X6
SA7 BXP+14 SAVE *X6*
MX0 -18
SX7 B7-B0 SET *A7*
BX7 -X0*X7
SX6 B1-B0 SET *B7*
LX7 18
BX6 -X0*X6
SB1 1 RESET *B1*
IX6 X7+X6
SX7 A6-B0 SET *A6*
SA6 BXP+7 SAVE *A7* AND *B7*
BX7 -X0*X7
SX6 B6-B0 SET *B6*
LX7 18
BX6 -X0*X6
IX6 X7+X6
SA6 A6-B1 SAVE *A6* AND *B6*
.1 SET 5
DUP 5
RN OCTMIC .1,1
BX7 X"RN"
SA7 A7-B1 SAVE *X"RN"*
.1 SET .1-1
ENDD
.1 SET 5
DUP 5
RN OCTMIC .1,1
SX6 A"RN"-B0 SET A"RN"
BX6 -X0*X6
SX7 B"RN"-B0 SET B"RN"
LX6 18
IFNE .1,1,1
BX7 -X0*X7
IX6 X6+X7
SA6 A6-B1 SAVE A"RN" AND B"RN"
.1 SET .1-1
ENDD
SX6 A0-B0 SET *A0*
BX6 -X0*X6
LX6 18
SA6 A6-B1 SAVE *A0*
EQ SVR RETURN
VAE SPACE 4,15
** VAE - VALIDATE ACCESS LEVEL FOR EQUIPMENT.
*
* ENTRY (X1) = ACCESS LEVEL.
* (X3) = EST ORDINAL OF EQUIPMENT.
* (B6) = RETURN ADDRESS.
* (X3) = EST WORD *EQDE* OF EQUIPMENT, IF ENTRY
* AT *VAE0*.
* (X4) = OFFSET INTO EST FOR EQUIPMENT, IF ENTRY
* AT *VAE0*.
*
* EXIT (X6) .LT. 0, IF ACCESS LEVEL NOT VALID FOR EQUIPMENT.
* TO *HNG*, IF ACCESS LEVEL SPECIFIED IS INVALID.
*
* USES X - 3, 4, 6.
* A - 3, 4.
VAE BSS 0 ENTRY
CX4 X3,EST CONVERT EST ORDINAL TO OFFSET
TA3 X4+EQDE,EST GET EST ENTRY
VAE0 TA4 X4+EQAE,EST
SX6 8
LX4 -6 GET EQUIPMENT ACCESS LIMITS
IX6 X1-X6
PL X6,HNG IF INVALID ACCESS LEVEL
PL X3,VAE1 IF NOT MASS STORAGE EQUIPMENT
MX6 -12
BX3 -X6*X3 GET MST ADDRESS
LX3 3
SA4 X3+PFGL GET DEVICE ACCESS LIMITS
VAE1 LX4 -6
MX6 -3
BX3 -X6*X4 UPPER LIMIT
LX4 -3
BX4 -X6*X4 LOWER LIMIT
IX6 X1-X4
NG X6,RB6 IF LESS THAN LOWER LIMIT
IX6 X3-X1 CHECK FOR GREATER THAN UPPER LIMIT
JP B6 RETURN
VAJ SPACE 4,15
** VAJ - VALIDATE ACCESS LEVEL FOR JOB.
*
* ENTRY (X1) = ACCESS LEVEL.
* (B6) = RETURN ADDRESS.
* (B7) = CONTROL POINT ADDRESS.
*
* EXIT (X6) = 0, IF ACCESS LEVEL NOT VALID FOR JOB.
* TO *HNG*, IF ACCESS LEVEL SPECIFIED IS INVALID.
*
* USES X - 3, 6.
* A - 3.
* B - 3.
VAJ BSS 0 ENTRY
SB3 X1-7
GT B3,B0,HNG IF INVALID ACCESS LEVEL
SA3 B7+JSCW GET SET OF VALID AL-S FOR JOB
SB3 X1+36+1
MX6 1
LX6 B3
BX6 X6*X3 CHECK SPECIFIED *AL*
JP B6 RETURN
VFA SPACE 4,20
** VFA - VERIFY FET ADDRESS.
*
* ENTRY (B3) = ERROR EXIT ADDRESS.
* (B6) = RETURN ADDRESS.
* (B7) = CPA.
* (X1) = RELATIVE FET ADDRESS IN LOWER 18 BITS.
* (X7) = ERROR STATUS.
*
* EXIT (B4) = FL.
* (X0) = RA.
* (X2) = (FLSW) LEFT SHIFTED BY -12.
* (X5) = ABSOLUTE FET+1 ADDRESS.
* (X6) = 12/ FET LENGTH - 5, 48/ 0.
*
* USES A - 2, 3, 7.
* B - 4, 5.
* X - ALL.
VFA SA2 B7+FLSW
MX4 -12
BX3 -X4*X2 FL/100B
MX5 -18
LX2 -12
BX5 -X5*X1 RELATIVE FET ADDRESS
LX3 6
SX0 X2 RA/100B
SB4 X3 FL
SX3 X3-4
LX0 6
IX4 X5-X3
PL X4,RB3 IF FET ADDRESS .GE. FL - 4
SB5 X5
SX5 X5+B1
LE B5,B1,RB3 IF FET ADDRESS .LE. 1
IX5 X0+X5 ABSOLUTE FET + 1 ADDRESS
ERX3 X5 GET FET LENGTH
MX6 -6
LX3 -18
BX6 -X6*X3
MX1 1 GET RANDOM FILE FLAG
LX3 18+12
IX4 X4+X6
PL X4,RB3 IF LWA+1 FET .GT. FL
AX7 X6,B1
BX1 X1*X3
LX6 48
ZR X1,RB6 IF NOT RANDOM FILE
BX6 X6+X1 RETURN RANDOM FILE FLAG
NZ X7,RB6 IF FET LONG ENOUGH FOR RANDOM PROCESSING
BX7 X3-X1 CLEAR RANDOM FLAG FROM FET
LX7 -12
BX6 X6-X1 REMOVE RANDOM FLAG FROM RESPONSE
EWX7 X5
JP B6 RETURN
VFP SPACE 4,20
** VFP - VERIFY FET PARAMETERS.
*
* ENTRY (B3) = ERROR EXIT ADDRESS.
* (B4) = FL.
* (B6) = RETURN ADDRESS.
* (X5) = ABSOLUTE FET+1 ADDRESS.
* (X6) = VALIDATION FLAGS (1 = VALIDATE FIRST/LIMIT,
* 2 OR 3 = VALIDATE FIRST/IN/OUT/LIMIT).
* (X7) = ERROR STATUS.
*
* EXIT (X1) = 12/ 0, 24/ FIRST, 24/ LIMIT.
* (X6) = 12/ 0, 24/ IN, 24/ OUT.
*
* USES A - 1, 2, 3.
* B - 4.
* X - 1, 2, 3, 4, 6.
VFP MX3 -2
IX3 X5-X3 FET+4
ERX1 X5 GET FIRST
ERX2 X3 GET LIMIT
MX4 -18
BX1 -X4*X1
SX3 B4 FL
BX4 -X4*X2
IX3 X3-X4
NG X3,RB3 IF LIMIT .GT. FL OR LIMIT .LT. 0
IX3 X1-X4
PL X3,RB3 IF FIRST .GE. LIMIT OR FIRST .LT. 0
SB4 X1+
AX6 1
SX2 B1
ZR X6,VFP1 IF NO VALIDATION FOR IN AND OUT
IX3 X5+X2 FET+2
IX2 X3+X2 FET+3
ERX3 X3 GET IN
ERX2 X2 GET OUT
SX3 X3
SX2 X2
IX6 X3-X1
IX1 X2-X1
BX1 X1+X6
NG X1,RB3 IF IN OR OUT .LT. FIRST
IX6 X3-X4
PL X6,RB3 IF IN .GE. LIMIT
IX1 X2-X4
LX3 24
PL X1,RB3 IF OUT .GE. LIMIT
BX6 X3+X2
SX1 B4
VFP1 LX1 24
BX1 X1+X4
JP B6 RETURN
TTL CPUMTR/PROGRAM - PROGRAM MODE EXECUTION.
TITLE PRG - REQUEST TRANSLATION.
QUAL PROGRAM
PRG SPACE 4
** PRG - PROCESS PROGRAM MODE REQUEST.
PRG1 SA7 A5 STORE *OR* FOR PROGRAM MODE REQUEST
EQ PRG
PRGX SX6 1 SET REQUEST EXIT
SA6 PX
MJ1 XJ * EXIT
PRG SA1 PR CHECK REQUEST WORD
* ALL PENDING REQUESTS ARE PROCESSED BEFORE ANY ADDITIONAL
* REQUESTS ARE PROCESSED.
SA3 PRGA CHECK PENDING REQUESTS
BX7 X7-X7
NZ X3,PRG2 IF PENDING REQUESTS
BX3 X1 SELECT FROM NEW REQUESTS
PRG2 ZR X3,PRGX IF NO REQUESTS
LX3 -11
PX4 X7 SET BIT 58
NX1,B4 X3 FIND REQUEST BIT
AX2 X4,B4 POSITION BIT
LX3 11
SX4 B4
* CLEAR REQUEST BIT.
+ SA1 A1 **** PERFORM IN 1 WORD ****
BX6 X1-X2 **** PERFORM IN 1 WORD ****
SA6 A1 **** PERFORM IN 1 WORD ****
BX6 X3-X2 CLEAR REQUEST
AX2 48
SA6 A3
NZ X2,MNR IF MONITOR REQUEST
* PROCESS PPU REQUEST.
LX4 PPCES
TA5 X4+1-11*PPCE,FP
LX4 PPXES-PPCES
TA2 X4+ACPP-11*PPXE,FPX
UX1,B4 X5 UNPACK REQUEST
SB7 X2 SET CP ADDRESS
SA3 TPPR-CPUM+B4 SET PROCESSOR ADDRESS
LX3 30
SB6 X3
TJP (/PROBE/PRG,PROBE,B6) PROCESS REQUEST
PRGA CON 0 PENDING REQUEST WORD
** EXIT TO PROCESSOR WITH -
* (X1) = BITS 0 - 47 OF OUTPUT REGISTER.
* (X2) = *ACPP*.
* (X3) = PROCESSOR CONTROL WORD SHIFTED 30 BITS.
* (X7) = 0.
* (A2) = *ACPP* ADDRESS.
* (A5) = OUTPUT REGISTER ADDRESS.
* (B4) = REQUEST NUMBER.
* (B6) = PROCESSOR ADDRESS.
* (B7) = CONTROL POINT ADDRESS.
TITLE PPU REQUEST PROCESSORS.
CKS SPACE 4
** CKS - CHECKSUM SELECTED AREA.
*
* ENTRY (A5) = PPU OUTPUT REGISTER ADDRESS.
* (X7) = 0.
CKS SA2 B7+1 GET RA
MX6 -17
AX5 24
BX5 -X6*X5 LENGTH
BX1 -X6*X1 FWA
AX2 36 RA
IX1 X2+X1 ABSOLUTE FWA
SX0 B1
IX5 X5-X0
SX4 2
CKS1 ERX2 X1
LX7 1
IX3 X1+X0
IX6 X7+X2
ERX3 X3
LX6 1
IX1 X1+X4
SX5 X5-2 DECREMENT LENGTH
IX7 X6+X3
PL X5,CKS1 IF CHECKSUM NOT COMPLETE
LX5 -1
SA3 A5+B1 COMPARE CHECKSUM
PL X5,CKS2 IF EVEN WORD COUNT
BX7 X6
CKS2 BX6 X7-X3
ZR X6,CKS3 IF COMPARE SUCCESSFUL
SX6 B1 RETURN RESPONSE
CKS3 SA7 A3 STORE NEW CHECKSUM
SA6 A5 STORE OUTPUT REGISTER
JP PRG
CST SPACE 4,10
** CST - CLEAR STORAGE.
*
* ENTRY (A5) = OUTPUT REGISTER ADDRESS.
* (X2) = *ACPP*.
*
* EXIT TO CLEAR STORAGE PROCESSOR.
*
* USES X - 2.
* A - 2, 5.
CST BSS 0 ENTRY
AX2 24 SET CP/PCP ADDRESS
SB7 X2
TJP (/PROGRAM/CSE1,CME,/PROGRAM/CSE,MECS,/PROGRAM/CSC,CMU,/
,PROGRAM/CSP)
DLKM SPACE 4,18
** DLK - DELINK TRACK CHAIN.
*
* ENTRY (A5) = OUTPUT REGISTER ADDRESS.
*
* EXIT (X1) = FIRST TRACK OF CHAIN TO DROP.
* (X2) = TRACK WHICH FIRST TRACK IS TO BE LINKED TO.
* (X3) = TDGL WORD OF MST.
* (X5) = -7777B.
* (B3) .LT. 4 FLAG TO DROP TRACKS PROCESSOR.
* (B6) = FIRST WORD ADDRESS OF TRT.
* (A3) = ADDRESS OF TDGL WORD IN MST.
*
* USES A - 1, 4, 6, 7.
* B - 3.
* A - 4, 7.
*
* CALLS CTR, DTC.
DLK SB3 DLK1 SET *CTR* RETURN
EQ CTR CHECK TRACK REQUEST
DLK1 AX4 X5,B1 TRACK MASK = -3777B
MX6 -2
BX7 -X4*X7 LAST TRACK TO DROP
BX6 -X6*X7 BYTE NUMBER
SA4 TMSK+X6 READ TRACK CLEARING MASK
SB3 X6 RESERVATION BIT SHIFT COUNT
AX7 2 TRT WORD NUMBER
BX6 -X5+X4 DISABLE CLEARING RESERVATION AND INTERLOCK
SA4 B6+X7 READ TRT WORD
LX7 X4,B3 CHECK LAST TRACK RESERVED
LX7 56
PL X7,HNG IF TRACK NOT RESERVED
BX7 X6*X4 CLEAR LINK IN LAST TRACK
SA7 A4
SB3 B0 INDICATE CALLED FROM *DLK*
EQ DTC1 EXIT TO DROP TRACKS PROCESSOR
DTC SPACE 4
** DTC - DROP TRACK CHAIN.
*
* ENTRY (A5) = PPU OUTPUT REQISTER ADDRESS.
*
* EXIT (OR) = NUMBER OF SECTORS RETURNED TO SYSTEM.
*
* USES X - ALL.
* B - 2, 3, 4, 5, 6, 7.
* A - 1, 2, 6, 7.
*
* CALLS CCP, CTR.
DTC SB3 DTC1 SET *CTR* RETURN
EQ CTR CHECK TRACK REQUEST
* ENTERED HERE FROM *DLKM* PROCESSOR.
DTC1 LX3 12 POSITION TRACK COUNT
AX4 X5,B1 (X4) = TRACK MASK = -3777B
SA5 A5
BX7 -X4*X3
LX5 59-58
LX3 -24
PL X5,DTC1.1 IF NOT PROGRAM MODE
SA7 DTCB
DTC1.1 MX5 -12
BX7 -X4*X1
BX6 X4*X1 DROPPING ALL TRACKS FLAG
BX3 -X4*X3
SA1 A3+DILL-TDGL GET 819 DEVICE FLAG
SB5 X3+B6 FIRST FREE TRACK POINTER
LX1 0-22
SX3 B1
BX1 X3*X1 819 DEVICE FLAG
LX7 -2
SB7 X1
SA1 A3+MDGL-TDGL READ SECTOR LIMITS
BX1 -X4*X1 SECTOR LIMIT
LX1 24
BX3 X3+X1
NZ X6,DTC3 IF DROPPING ALL TRACKS
* ENTER SECTOR NUMBER/LINK BYTE IN LAST TRACK.
BX0 X4*X7 BYTE NUMBER
LX0 2
SB2 X0+56 RESERVATION BIT SHIFT COUNT
LX1 -24
LX0 2
IX1 X2-X1 CHECK EOI SECTOR NUMBER
SB4 X0
ZR B3,DTC2 IF ENTERED FROM *DLK*
PL X1,HNG IF ILLEGAL LAST SECTOR WRITTEN
DTC2 LX0 1
SB3 B4+X0 LINK BYTE SHIFT COUNT
SB4 B3-48
SA1 B6+X7 READ TRT WORD
AX7 X5,B4 POSITION BYTE CLEARING MASK
AX2 X2,B4 POSITION SECTOR NUMBER/LINK
BX7 X7*X1 CLEAR OLD LINK
SB4 A1 SET LINK ADDRESS
BX7 X7+X2 MERGE SECTOR LIMIT/LINK
EQ DTC6 DROP REST OF CHAIN
* DECREMENT PRESERVED FILE COUNT AND CHECK MRT PROCESSING.
DTC3 BX2 X4*X7 BYTE NUMBER
LX2 2
SA1 X7+B6 READ TRT WORD
SB2 X2
LX1 X1,B2 POSITION PRESERVED FILE BIT
LX1 59-11
NG X1,DTC9 IF PRESERVED FILE
ZR X6,DTC5 IF NOT DROPPING ALL TRACKS
MX1 1 FORCE *MRT* UPDATE
BX6 X6-X6
DTC4 PL X1,DTC5 IF NOT TO CLEAR *MRT* BIT
TPL X0,(/ISDMMF/CMB,ISDMMF,/PROGRAM/HNG) IF SHARED DEVICE
* DROP TRACK CHAIN.
* REENTRY HERE FROM */PROGRAM/CMB*.
DTC5 IX6 X6+X3 INCREMENT TRACKS/PRU-S DROPPED
TNZ B7,(/BUFIO/DIB,BUFIO,/PROGRAM/HNG) IF BUFFERED DEVICE
* REENTRY HERE FROM */IO819/DLB*.
DTC5.1 SA1 DTCB FETCH TRACK LIMIT
BX2 X7
BX0 X4*X7 BYTE NUMBER
LX2 2 TRACK NUMBER
LX0 2
IX1 X1-X2
SA2 TMSK+X0 READ TRACK CLEARING MASK
SB2 X0+56 RESERVATION BIT SHIFT COUNT
NG X1,HNG IF TRACK BEYOND DEVICE LIMIT
LX0 2
SA1 B6+X7 READ TRT WORD
SB3 X0
LX0 1
SB3 B3+X0 BYTE NUMBER * 12 + 12
SX0 A1-B5
BX7 X2*X1 CLEAR TRACK
PL X0,DTC6 IF NOT FIRST FREE TRACK
SB5 A1 UPDATE FIRST FREE TRACK POINTER
DTC6 SA7 A1 STORE TRT WORD
LX2 X1,B3 POSITION LINK BIT
LX1 X1,B2 POSITION RESERVATION BIT
AX2 48
PL X1,HNG IF NOT RESERVED
BX7 -X4*X2
LX7 -2
NG X2,DTC5 IF NOT END OF CHAIN
* UPDATE REMAINING TRACK COUNT.
* UPDATE FIRST FREE TRACK POINTER.
SA3 A5 LOCATE DEVICE MST
MX0 -9
AX3 36
BX0 -X0*X3 EXTRACT EST ORDINAL
CX3 X0,EST CONVERT EST ORDINAL TO OFFSET
MX0 -12
TA3 X3+EQDE,EST READ EST ENTRY
BX7 -X0*X3
LX7 3
SA3 X7+TDGL READ *TDGL* WORD OF MST
MX0 -24
BX7 -X0*X6 NUMBER OF TRACKS DROPPED
SX1 B5-B6 FIRST FREE TRACK
IX7 X3+X7 ADD TRACKS TO *TDGL*
AX6 24 NUMBER OF SECTORS DROPPED
LX7 -12
SB5 PRG
BX7 X4*X7 CLEAR FIRST FREE TRACK POINTER
AX3 24
BX7 X7+X1 UPDATE FIRST FREE TRACK
LX7 12
BX5 -X4*X3 LENGTH OF TRT
SA7 A3
SA2 A3+NVGL-TDGL
SX3 B1+
PL X2,DTC8 IF NO FLAW REQUEST
LX2 12
BX2 -X4*X2
LX2 -2
BX0 -X0+X2
SA2 B6+X2 READ TRT WORD FOR TRACK
LX0 2
SB3 X0
IX7 X7-X3
AX3 B3
BX2 X3-X2
BX3 X3*X2
ZR X3,DTC8 IF TRACK RESERVED
SB3 B3+X0
SB3 B3+X0
SB3 B3+B3
SA7 A3 STORE UPDATED *TDGL*
LX4 12
SB3 B3+B3
AX4 B3
BX7 -X4+X2
SA7 A2
DTC8 SA2 A5+
BX7 X6 SET REPLY
LX2 59-58
NG X2,CCP1 IF PROGRAM MODE
SA2 /MONITOR/T1 RESTORE (B2)
SB5 /MONITOR/PPRX SET MONITOR MODE EXIT
SB2 X2+
EQ CCP1 CHECK FOR CHECKPOINT REQUEST
* PROCESS PRESERVED FILE.
DTC9 LX1 4 POSITION TRACK INTERLOCK
ZR X6,DTC4 IF NOT DROPPING ALL TRACKS
SA2 A3+B1 READ MST
ERRNZ ACGL-1 INDEX MUST BE ONE
LX5 24
BX6 -X5*X2 PRESERVED FILE COUNT
ZR X6,DTC4 IF FILE COUNT IS ZERO
SX5 B1
LX5 24
IX6 X2-X5 DECREMENT PRESERVED FILE COUNT
SA6 A2
BX6 X6-X6
EQ DTC4 RE-ENTER PROCESSING
DTCA BSS 0 SCRATCH WORD
CON 0 MUST BE THE WORD BEFORE TMSK
TMSK BSS 0 TRACK CLEARING MASKS
VFD 12/0,12/-0,12/-0,12/-0,12/3567B BYTE 0
VFD 12/-0,12/0,12/-0,12/-0,12/5673B BYTE 1
VFD 12/-0,12/-0,12/0,12/-0,12/6735B BYTE 2
VFD 12/-0,12/-0,12/-0,12/0,12/7356B BYTE 3
DTCB CON 0 DEVICE TRACK LIMIT
LCC SPACE 4
** LCC - *PIOM* LOAD CENTRAL PROGRAM (SF = 6). PROGRAM MODE.
*
* ENTRY (A5) = PP OUTPUT REGISTER.
* (X5) = *PIOM* REQUEST.
* (B7) = CP ADDRESS.
*
* USES X - ALL.
* B - 3, 4, 5, 6.
* A - 1, 2, 4.
*
* CALLS CMP, MSR.
LCC SA2 B7+FLSW GET RA AND FL
MX6 -12
SB5 X5 GET RELATIVE CM ADDRESS OF LOAD
BX4 -X6*X2 FL/100B
LX2 -12
MX6 -RMSK
BX2 -X6*X2 RA/100B
LX5 -18
SA1 A5+B1 GET PARAMETERS FROM MESSAGE BUFFER
LX4 6
LX2 6
SX3 X5 GET LWA+1 OF LOAD
LX1 -12
LX5 18
ZR X3,LCC1 IF NO LWA SPECIFIED FOR LOAD
IX0 X4-X3
BX4 X3
NG X0,HNG IF LWA+1 .GT. FL
LCC1 BX1 -X6*X1 ABSOLUTE CM ADDRESS
ERX3 X1
SB6 X4 FL OR RELATIVE LWA+1 LOAD
SB4 X3-1 GET PROGRAM LENGTH
MX6 -36
SB3 B4+B5 RELATIVE LOAD ADDRESS + LENGTH
SX3 IFLS RETURN STATUS = INSUFFICIENT FL
BX5 -X6*X5
GT B3,B6,LCC2 IF INSUFFICIENT FIELD LENGTH FOR LOAD
SX0 B1
IX0 X1+X0 FWA PROGRAM CODE
SX3 B5
IX1 X2+X3 CM ADDRESS LOADING TO
SX2 B4+
BX3 X3-X3 RETURN STATUS = NO ERROR
IX5 X5+X2 ADVANCE RELATIVE CM ADDRESS
IX1 X0-X1
SB6 LCC2 *CMP* *MSR* RETURN ADDRESS
TJP (/CME/MSR,CME,/PROGRAM/CMP,CMU,/MONITOR/MSR)
LCC2 LX3 -24
BX7 X5+X3
EQ PRG1 EXIT TO STORE OUTPUT REGISTER
PIP SPACE 4,15
** PIP - *PIOM* PROGRAM MODE PROCESSOR.
*
* ENTRY (A5) = PP *OR* ADDRESS.
* (X5) = (OR).
* (B7) = CP ADDRESS.
* SEE *PIOM* DOCUMENTATION FOR *OR* AND *MB*
* DESCRIPTION.
* (MB+1) = 1/MODE,23/,18/PROC,18/SUBFUNCTION DATA.
* MODE = 1 (PROGRAM MODE).
* PROC = PROGRAM MODE *PIOM* RETURN ADDRESS.
*
* EXIT TO *PIOM* PROCESSOR RETURN ADDRESS.
* (B5) = *PIOM* SUBFUNCTION - 1.
* A5, B7, X5 SAME AS ON ENTRY.
PIP AX1 42 GET *PIOM* SUBFUNCTION CODE
SB4 X1-LCRS
ZR B4,LCC IF LOAD CM RESIDENT CODE SUBFUNCTION
SA3 A5+2 GET PROGRAM MODE PROCESSOR ADDRESS
SB5 X1-1 SUBFUNCTION - 1
LX3 -18
SB6 X3
JP B6 JUMP TO *PIOM* SUBFUNCTION PROCESSOR
RDC SPACE 4
** RDC - REQUEST DATA CONVERSION.
*
* ENTRY (A5) = PPU OUTPUT REGISTER ADDRESS.
* REFER TO *RDCM* DOCUMENTATION FOR MORE INFORMATION.
*
* EXIT TO *PRG*.
*
* USES X - 1, 2, 3, 4, 5, 6, 7.
* B - 1, 2, 3, 4, 5, 6.
* A - 1, 2, 3, 4, 6, 7.
*
* CALLS DSB.
RDC SA1 A5 PRESET (A1)
MX4 -6
SB3 B1 SET WORD COUNT
LX1 24
SB6 RCDS CHECK FOR *RCIS*/*RCDS* SUBFUNCTIONS
ERRNZ RCIS CODE DEPENDS ON VALUE
BX2 -X4*X1
LX1 6
SB5 6 SHIFT COUNT
BX5 -X4*X1 MILLIUNITS CONVERSION
LX1 6
BX1 -X4*X1 VALIDATE WORD COUNT AND SRU POINTER
MX4 -30 (X4) = DATA MASK
ZR X2,RDC4 IF 1 WORD TO CONVERT (0 IMPLIES 1)
SB3 X2 SET SUBFUNCTION / WORD COUNT
SB4 X1 SET SRU POINTER
GT B3,B6,RDC9 IF NOT *RCIS*/*RCDS* SUBFUNCTION
LT B3,B6,RDC1 IF NOT *RCDS* SUBFUNCTION
* CONVERT INTEGER TO F10.3 FORMAT (*RCDS*).
MX4 -48 DATA MASK
SA3 A5+B1 WORD TO CONVERT
ZR B4,RDC4 IF NO CONVERSION TO CLOCK CYCLES
SB4 RDC3 SET *DSB* RETURN ADDRESS
SA2 /MONITOR/CPTA CONVERT QUARTER NANOUNITS TO CLOCK CYCLE
PX2 X2
BX6 X3
NX2 X2
EQ DSB DIVIDE 60 BIT INTEGER
* CONVERT INTEGER(S) TO F10.3 FORMAT (*RCIS*).
RDC1 ZR B4,RDC2 IF NO SRU CONVERSION
GT B4,B3,HNG IF SRU POINTER .GT. WORD COUNT
SA2 A5+B4
MX6 -42
SA3 /MONITOR/TTH
BX6 -X6*X2 ISOLATE SRU ACCUMULATOR
PX6 X6
FX6 X3*X6 SCALE SRU ACCUMULATOR
SA6 A2 STORE FOR CONVERSION
RDC2 ZR X5,RDC4 IF NO NANOUNITS TO MILLIUNITS CONVERSION
SB4 X5
SA3 A5+B4 WORD TO CONVERT
GT B4,B6,HNG IF MILLIUNITS POINTER .GT. WORD COUNT
SA2 /MONITOR/CPTB CONVERT QUARTER NANOUNITS TO MILLIUNITS
SB4 RDC3 SET *DSB* RETURN ADDRESS
BX6 X3
EQ MSB MULTIPLY 60 BIT INTEGER
RDC3 SA6 A3+ STORE QUOTIENT
SB6 7 RESTORE B6
* INITIALIZE CONVERSION. (A1) = OR. (B6) = CONVERSION COUNT.
RDC4 SA2 RDCA (X2) = 0.1P48+1
SX5 1R. (X5) = DECIMAL POINT
SA3 RDCB (X3) = 10.0P
LX5 18
MX0 -18 (X0) = FRACTION MASK
* CONVERT ACCOUNTING WORDS.
RDC5 SA1 A1+B1 CHECK NEXT WORD
BX6 -X4*X1
SX7 1000
ZR X6,RDC8 IF BLANK WORD
SB4 1R0-1R (B4) = CONVERSION
SA4 A3+B1 (X4) = BACKGROUND
PX1 X6
SB2 9 SET MAXIMUM NUMBER OF DIGITS PER WORD
IX7 X6-X7
SB6 -B5
PL X7,RDC6 IF INTEGER PRESENT
SB4 B0+
SA4 A4+1
RDC6 DX6 X2*X1 EXTRACT REMAINDER
FX1 X2*X1
UX7 X1 CHECK QUOTIENT
SB2 B2-B1 DECREMENT CHARACTER COUNT
LX4 -6 SHIFT ASSEMBLY
GT B2,B0,RDC7 IF WORD NOT FULL
BX7 X7-X7 TERMINATE CONVERSION
RDC7 SB6 B6+B5 ADVANCE SHIFT COUNT
FX6 X3*X6 EXTRACT DIGIT
SX6 X6+B4 CONVERT DIGIT
IX4 X6+X4
NZ X7,RDC6 LOOP TO ZERO QUOTIENT
LX6 X4,B6 RIGHT JUSTIFY ASSEMBLY
BX4 -X0*X6 EXTRACT FRACTION
ZR X5,RDC8 IF SECOND PASS FOR F20.3 CONVERSION
IX7 X4+X5 ADD DECIMAL POINT
LX6 6
MX4 36
BX4 X4*X6 EXTRACT INTEGER
IX6 X4+X7 ADD INTEGER
SB6 -B5 RESET SHIFT COUNT
LE B3,B5,RDC8 IF NOT F20.3 CONVERSION
SA6 A1+1 STORE WORD FROM FIRST PASS
SB2 10 RESET NUMBER OF DIGITS PER WORD
SA4 A3+1 RESET BACKGROUND
UX7 X1
SX5 B0+ INDICATE F20.3 FIRST PASS COMPLETE
BX6 X4
SB4 1R0-1R RESET CONVERSION OFFSET
NZ X7,RDC6 IF MORE DIGITS TO CONVERT
RDC8 SA6 A1 STORE CONVERSION
BX7 X7-X7
GT B3,B5,PRG1 IF F20.3 CONVERSION
SB3 B3-B1 DECREMENT WORD COUNT
MX4 -30
NZ B3,RDC5 IF MORE TO CONVERT
EQ PRG1 EXIT AND STORE *OR*
* INCREMENT CURRENT PACKED DATE BY SPECIFIED TERM (*RIDS*).
RDC9 SB6 REPS
ERRNZ REPS-RIDS-1 CODE DEPENDS ON VALUE
GT B3,B6,HNG IF ILLEGAL SUBFUNCTION
EQ B3,B6,RDC17 IF *REPS* SUBFUNCTION
SA2 PDTL GET CURRENT DATE
AX2 18
SA5 A5 GET TERM
MX0 -12
BX1 -X0*X5
MX0 -6 UNPACK DATE
BX3 -X0*X2
SB3 X3 DAY
AX2 6
BX3 -X0*X2
SB4 X3 MONTH
AX2 6
BX2 -X0*X2
SB5 X2 YEAR
MX0 -2 MASK FOR LEAP YEAR
* ADVANCE YEAR.
RDC10 SX4 X1-366D (TERM REMAINING) - (DAYS IN LEAP YEAR)
NG X4,RDC14 IF LESS THAN 1 YEAR REMAINING
SB5 B5+B1 ADD 1 YEAR TO EXPIRATION DATE
SX3 B5+B1
SB6 B1+B1
BX2 -X0*X3
ZR X2,RDC11 IF CURRENT YEAR IS A LEAP YEAR
SX2 X3+B1 YEAR + 1 + LEAP YEAR OFFSET
BX2 -X0*X2
NZ X2,RDC13 IF NEXT YEAR IS NOT A LEAP YEAR
LE B4,B6,RDC13 IF BEFORE LEAP DAY
SX1 X1-1 SUBTRACT 1 DAY TO OFFSET LEAP DAY
EQ RDC13 SUBTRACT 1 YEAR FROM TERM
RDC11 GT B4,B6,RDC13 IF AFTER LEAP DAY
SX1 X1-1 SUBTRACT 1 DAY TO OFFSET LEAP DAY
RDC13 SX1 X1-365D SUBTRACT 1 YEAR FROM TERM
EQ RDC10 CONTINUE PROCESSING
* ADVANCE MONTH.
RDC14 SA4 RDCC+B4 GET DAYS IN CURRENT MONTH
SX7 B4-2
NZ X7,RDC15 IF CURRENT MONTH NOT FEBRUARY
SX2 B5+2
BX7 -X0*X2
NZ X7,RDC15 IF NOT LEAP YEAR
SX4 X4+B1 ADD LEAP DAY
RDC15 SX2 B3+
IX2 X4-X2 DAYS TO END OF CURRENT MONTH
IX3 X1-X2 SUBTRACT FROM TERM REMAINING
NG X3,RDC16 IF NOT ENOUGH TERM REMAINING TO FILL MONTH
ZR X3,RDC16 IF TERM EXACTLY FILLS CURRENT MONTH
SB3 B0+
SB4 B4+B1 INCREMENT MONTH
BX1 X3 SET NEW TERM
SX7 B4-13
NZ X7,RDC14 IF NOT END OF YEAR
SB5 B5+B1 INCREMENT YEAR
SB4 B1 SET MONTH TO JANUARY
EQ RDC14 CONTINUE
* RETURN NEW PACKED DATE.
RDC16 SB3 X1+B3 SET DAYS
SX6 B5 ADD IN YEAR
LX6 6
SX6 X6+B4 ADD IN MONTH
LX6 6
SX6 X6+B3 ADD IN DAY
SA6 A5+B1 SET DATE IN MESSAGE BUFFER WORD
BX7 X7-X7
EQ PRG1 EXIT AND STORE OUTPUT REGISTER
* ENCRYPT PASSWORD (*REPS*).
*
* THE ENCRYPTION ALGORITHM USED IS A POLYNOMIAL EXPANSION,
* MODULUS A LARGE PRIME NUMBER, OF THE FORM -
*
* E = SUM(A(N) * K**B(N))MOD PRIME
*
* WHERE -
*
* E = ENCRYPTED PASSWORD.
* K = UNENCRYPTED (PLAINTEXT) PASSWORD.
* A(N) = LARGE EXPANSION COEFFICIENT (N=1,6).
* B(N) = PRIME EXPANSION EXPONENT (N=1,6).
* PRIME = LARGE PRIME INTEGER IN THE INTERVAL
* (2**41, 2**42-1).
*
* PROGRAMMING NOTES.
*
* 1. THIS ALGORITHM MAY BE CUSTOMIZED BY ANY OR ALL
* OF THE FOLLOWING METHODS -
*
* A. CHANGING THE VALUE OF THE PRIME MODULUS,
* MAINTAINING THE CORRECT RANGE.
*
* B. CHANGING THE NUMBER OF TERMS IN THE EXPANSION
* POLYNOMIAL.
*
* C. CHANGING THE VALUES OF THE PRIME EXPONENTS.
*
* D. CHANGING THE VALUES OF THE COEFFICIENTS.
*
* 2. THE LENGTH OF THE BIT STRING TO BE ENCRYPTED MAY
* BE ALTERED TO ANY VALUE N .LE. 48D BY ALTERING
* THE RANGE OF THE PRIME MODULUS TO ANY VALUE *MOD*
* SUCH THAT -
*
* (2**(N-1)) .LE. MOD .LE. (2**(N)-1)
NTERM EQU 6 NUMBER OF TERMS IN POLYNOMIAL EXPANSION
** TEMPORARY STORAGE LOCATIONS USED BY SUBFUNCTION *REPS*.
RDCD BSS 0 START OF TEMPORARY STORAGE
EPWD CON 0 ENCRYPTED PASSWORD
UPWD CON 0 UNENCRYPTED PASSWORD
TMP1 CON 0 TEMPORARY STORAGE
TMP2 CON 0 TEMPORARY STORAGE
TMP3 CON 0 TEMPORARY STORAGE
RDCDL EQU *-RDCD LENGTH OF TEMPORARY STORAGE
SPACE 4,10
* PRIME - PRIME IS CHOSEN TO PROVIDE A LARGE PRIME
* INTEGER IN THE INTERVAL (2**41,2**42-1).
PRIM DATA 00000077777777777561B (2**42)-143 PRIME MODULUS
MOD DATA 17717777777777756100B PACKED/NORMALIZED PRIME MODULUS
SPACE 4,10
* EXPT - TABLE OF PRIME EXPONENTS USED BY SUBFUNCTION *REPS*.
EXPT BSS 0 START OF TABLE
DATA 1777777777747B (2**37)-25
DATA 1777755B (2**19)-19
DATA 3
DATA 2
DATA 1
DATA 0
EXPTL EQU *-EXPT
ERRNZ EXPTL-NTERM IMPROPER NUMBER OF EXPONENTS
SPACE 4,10
* COFT - TABLE OF COEFFICIENTS USED BY SUBFUNCTION *REPS*.
COFT BSS 0 START OF TABLE
DATA 35216
DATA 14486
DATA 29891
DATA 68607
DATA 41867
DATA 14951
COFTL EQU *-COFT
ERRNZ COFTL-NTERM IMPROPER NUMBER OF COEFFICIENTS
RDC17 SA1 A5+B1 GET UNENCRYPTED PASSWORD
MX0 -42
AX1 18
BX6 -X0*X1
SB6 B0+ INITIALIZE ITERATION INDEX
SA6 UPWD
* CALCULATE THE EXPONENT Y = (Z**N)MOD PRIME, WHERE
* Y, Z, AND N ARE 42-BIT INTEGERS.
RDC18 SA1 UPWD GET UNENCRYPTED PASSWORD
SA2 EXPT+B6 GET EXPONENT
BX6 X1 SAVE Z = INTEGER
LX7 X2 SAVE N = WORKING EXPONENT
SA6 A1+B1 (TMP1) = Z TERM
ERRNZ TMP1-UPWD-1 ERROR IF WORDS NOT CONTIGUOUS
SA7 A6+B1 (TMP2) = N
ERRNZ TMP2-TMP1-1 ERROR IF WORDS NOT CONTIGUOUS
SX6 B1 INITIALIZE Y TERM
SA6 A7+B1 (TMP3) = Y
ERRNZ TMP3-TMP2-1 ERROR IF WORDS NOT CONTIGUOUS
ZR X2,RDC23 IF EXPONENT = ZERO
RDC19 SA3 TMP2 GET N TERM
SA1 TMP1 GET Z TERM
AX6 X3,B1 N = N/2
LX3 59-0
SA6 A3+ STORE HALVED N TERM
PL X3,RDC21 IF N TERM WAS EVEN BEFORE HALVING
SA2 TMP3 GET Y TERM
SB3 RDC20 SET RETURN ADDRESS
EQ MPY Y = Z*Y
RDC20 SA6 TMP3 SAVE NEW Y
SA3 TMP2 CHECK N
ZR X3,RDC23 IF CALCULATION COMPLETE
SA1 TMP1 GET Z TERM
RDC21 BX2 X1
SB3 RDC22 SET RETURN ADDRESS
EQ MPY Z = Z*Z
RDC22 SA6 TMP1 SAVE NEW Z TERM
EQ RDC19 LOOP
* MULTIPLY COEFFICIENT * EXPONENT.
RDC23 SA2 COFT+B6 GET COEFFICIENT
SA1 TMP3 GET EXPONENT
SB3 RDC24 SET RETURN ADDRESS
EQ MPY MULTIPLY BY COEFFICIENT
* CALCULATE THE ENCRYPTED PASSWORD.
RDC24 SA2 EPWD GET ENCRYPTED PASSWORD
SA3 PRIM GET PRIME MODULUS
IX6 X2+X6 SUM VALUES
IX1 X6-X3
NG X1,RDC25 IF SUM .LT. MODULUS
BX6 X1
RDC25 SA6 A2 STORE NEW ENCRYPTED PASSWORD
SB6 B6+B1 INCREMENT ITERATION INDEX
SB5 B6-NTERM
NG B5,RDC18 IF MORE ITERATIONS REQUIRED
* CLEAR TEMPORARY STORAGE LOCATIONS AND RETURN
* ENCRYPTED PASSWORD.
SA1 EPWD GET ENCRYPTED PASSWORD
SB6 RDCDL-1
BX6 X1
LX6 18 LEFT-JUSTIFY OUTPUT
BX7 X7-X7
SA6 A5+B1 RETURN ENCRYPTED PASSWORD
RDC26 SA7 RDCD+B6 CLEAR TEMPORARY STORAGE
SB6 B6-1
PL B6,RDC26 IF MORE WORDS TO CLEAR
EQ PRG1 EXIT AND SET OUTPUT REGISTER
RDCA CON 0.1P48+1 EXTRACT REMAINDER
RDCB CON 10.0P EXTRACT DIGIT
CON 10H
CON 10H 0000
RDCC EQU *-1 TABLE OF DAYS IN MONTH
CON 31 JANUARY
CON 28 FEBRUARY
CON 31 MARCH
CON 30 APRIL
CON 31 MAY
CON 30 JUNE
CON 31 JULY
CON 31 AUGUST
CON 30 SEPTEMBER
CON 31 OCTOBER
CON 30 NOVEMBER
CON 31 DECEMBER
RTC SPACE 4,20
** RTC - RESERVE TRACK CHAIN.
*
* ENTRY (A5) = PPU OUTPUT REGISTER ADDRESS.
*
* EXIT (X7) = FIRST TRACK IN BYTE 4, IF TRACKS ASSIGNED.
* (X7) = REASON CODE IN BYTE 3, IF NO TRACKS ASSIGNED.
*
* USES X - ALL.
* B - 2, 3, 4, 5, 6, 7.
* A - 0, 1, 2, 3, 4, 6, 7.
*
* CALLS CCP1, CTR.
RTC BSS 0 ENTRY
BX2 X1 CHECK EQUIPMENT SPECIFIED
MX0 -9
LX2 24
BX3 -X0*X2
SB3 RTC7 SET *CTR* RETURN
NZ X3,CTR IF EQUIPMENT SPECIFIED
AX2 48
SB4 B0 (B4) = FIRST UNRESTRICTED DEVICE
SB2 X2-MXRS
PL B2,HNG IF ILLEGAL DEVICE SELECTION
TA1 X2,MSA READ DEVICE SELECTION BITS
TA0 EQDE,EST (A0) = FWA OF EST
UX3,B5 X1 (B5) = CURRENT EQUIPMENT TO CHECK
MX0 13 (X0) = MASK TO CLEAR CURRENT SELECTION
SX2 X5 (X2) = SECTORS REQUESTED
PL X2,RTC0 IF SECTORS REQUESTED FIELD GT 0
SX6 X2+1 CHECK FOR -1 IN SECTORS REQUESTED FIELD
MX7 -18
ZR X6,RTC0 IF ALL AVAILABLE TRACKS REQUESTED
BX2 -X7*X2 SET SECTORS REQUESTED TO POSITIVE NUMBER
RTC0 MX7 -12
SB2 1000B-1777B (B2) = DALL ACTIVITY TO BEAT
PX6 X7,B0 (X6) = TRACK LIMIT REJECT
LX5 59-23
SB3 0-1777B (B3) = DALL ACTIVITY, IMMEDIATE SELECTION
PL X5,RTC3 IF NO ACCESS LEVEL SELECTION
TEQ (/PROGRAM/RTC1,OSSM,/PROGRAM/RTC3)
RTC1 LX5 -59+23-18 EXTRACT ACCESS LEVEL SELECTION REQUIREMENT
MX6 -3 (X6) = -7 = ACCESS LEVEL REJECT CODE
BX4 -X5+X6
SB6 X4 (B6) = - ACCESS LEVEL REQUESTED
EQ RTC3 ENTER SELECTION LOOP
RTC2 SA3 X5+PFGL READ DEVICE ACCESS LEVEL LIMITS
LX3 -6
BX4 -X6*X3 UPPER ACCESS LEVEL LIMIT
SX4 X4+B6 NEGATIVE IF ACCESS LEVEL EXCEEDED
LX3 -3
BX3 -X6*X3
SB7 B6-B1
SX3 X3+B7
BX4 -X3+X4
UX6,B7 X6
PX6 X6,B0 SET DEVICE FOUND (TRACK LIMIT REJECT)
PL X4,RTC4 IF REQUESTED ACCESS LEVEL WITHIN LIMITS
PX6 X6,B7 RESET TO PREVIOUS REJECT REASON
* DEVICE SEARCH LOOP.
RTC3 AX5 X0,B5 FIND NEXT EQUIPMENT
BX3 -X5*X1
PX5 X3
NX4,B5 X5
ZR X3,RTC6 IF END OF PASS ON EQUIPMENTS
IFEQ ESTE,2,1
SB7 B5+B5 COMPUTE RELATIVE EST ADDRESS (ESTE = 2)
IFEQ ESTE,3,2
SB7 B5+B5 COMPUTE RELATIVE EST ADDRESS (ESTE = 3)
SB7 B7+B5
IFEQ ESTE,4,2
SB7 B5+B5 COMPUTE RELATIVE EST ADDRESS (ESTE = 4)
SB7 B7+B7
IFEQ ESTE,5,3
SB7 B5+B5 COMPUTE RELATIVE EST ADDRESS (ESTE = 5)
SB7 B7+B7
SB7 B7+B5
IFEQ ESTE,6,3
SB7 B5+B5 COMPUTE RELATIVE EST ADDRESS (ESTE = 6)
SB7 B7+B5
SB7 B7+B7
IFEQ ESTE,7,4
SB7 B5+B5 COMPUTE RELATIVE EST ADDRESS (ESTE = 7)
SB7 B7+B5
SB7 B7+B7
SB7 B7+B5
IFEQ ESTE,8,3
SB7 B5+B5 COMPUTE RELATIVE EST ADDRESS (ESTE = 8)
SB7 B7+B7
SB7 B7+B7
ERRPL ESTE-9 CODE DOES NOT HANDLE EST SIZE .GT. 8
SA4 A0+B7 READ EST ENTRY
BX5 -X7*X4
LX4 59-54
LX5 3
NG X4,RTC3 IF UNAVAILABLE DEVICE
LE B6,B0,RTC2 IF ACCESS LEVEL VALIDATION REQUIRED
RTC4 SA3 X5+DALL READ ACTIVITY BYTE
UX3,B7 X3
SA4 X5 + TDGL READ TRACK COUNT
ERRNZ TDGL
GE B7,B2,RTC3 IF NOT LESS THAN PREVIOUS LEAST ACTIVITY
SA3 X5+MDGL READ SECTORS PER TRACK
BX4 -X7*X4
BX3 -X7*X3
IX4 X4*X3
IX4 X4-X2
SA3 X5+ACGL
NG X4,RTC3 IF NOT ENOUGH TRACKS
LX3 59-4
NG X3,RTC3 IF ERROR IDLE SET
SB4 B5 SET CURRENT EQUIPMENT AS BEST
SB2 B7 SET CURRENT ACTIVITY AS BEST
GT B2,B3,RTC3 IF ACTIVITY PROHIBITS IMMEDIATE SELECTION
RTC5 SA1 A1 UPDATE LAST EQUIPMENT SELECTED
PX6 X1,B4
SA6 A1
SA5 A5 REREAD OUTPUT REGISTER
LX7 24
SX4 B4 MERGE EQUIPMENT IN REQUEST
BX3 -X7*X5 ORIGINAL DEVICE SELECTION
BX5 X7*X5
LX4 36
AX3 24 CHECK ORIGINAL DEVICE SELECTION
SX2 X3-ROLS
SX3 X3-SROS
IX3 X2*X3
NZ X3,RTC5.2 IF NEITHER ROLLOUT NOR SECONDARY ROLL
TA3 ROTS,SDA UPDATE ROLLOUT STATISTICS
TA2 NROS,SDA
SX0 B1
SX1 X5
IX6 X3+X0 COUNT ROLLOUT
IX7 X2+X1 COUNT SECTORS ROLLED
SA6 A3
SA7 A2
TX7 A1-SROS,-MSA CHECK FILE ALLOCATION
NZ X7,RTC5.2 IF NOT SECONDARY ROLLOUT DEVICE
TA3 SOTS,SDA UPDATE SECONDARY ROLLOUT STATISTICS
TA2 NSRS,SDA
IX6 X3+X0 COUNT SECONDARY ROLLOUT
IX7 X2+X1 COUNT SECONDARY SECTORS ROLLED
SA6 A3
SA7 A2
RTC5.2 BX5 X4+X5
BX7 X5
UX1 X5
SA7 A5 UPDATE OUTPUT REGISTER
SB3 RTC7 SET *CTR* RETURN
SB6 B1+ SET *CTR* ENTRY CONDITION
TEQ (/ISD/RTC,ISD,/PROGRAM/CTR) CHECK TRACK REQUEST
* PROCESS END OF PASS ON EQUIPMENTS.
RTC6 UX5,B5 X1 CHECK FOR WRAP ON SELECTION WORD
AX4 X0,B5
PX1 X5 INITIALIZE FOR EQUIPMENT WRAP
SB5 B0
BX1 X4*X1 CLEAR EQUIPMENTS ALREADY CHECKED
BX4 X4-X0
NZ X4,RTC3 IF SECOND PASS ON EQUIPMENTS NEEDED
SB7 100B-1777B UNRESTRICTED DEVICE THRESHOLD
LT B2,B7,RTC5 IF UNRESTRICTED EQUIPMENT FOUND
SA4 A1 REREAD SELECTION
UX4 X4
TB7 A1-SROS,-MSA
NZ B7,RTC6.1 IF NOT SECONDARY ROLLOUT
TA1 ROLS,MSA
BX1 -X4*X1 CLEAR DEVICES ALREADY CHECKED
UX3,B5 X1
NZ X3,RTC3 IF ROLLOUT DEVICES PRESENT
RTC6.1 TA1 MSA
BX1 -X4*X1
UX3,B5 X1
NZ X3,RTC3 IF TO TRY TEMP DEVICES
SA1 A4 RESET DEVICE TO UPDATE EQUIPMENT FOR
NZ B4,RTC5 IF EQUIPMENT FOUND
SX7 10000B TRACK LIMIT REJECT CODE
AX6 12 CHECK REJECT REASON
NZ X6,RTC6.2 IF NOT ACCESS LEVEL REJECT - EXIT
LX7 1
RTC6.2 SB5 PRG
EQ CSM1 CHECK FOR STORAGE MOVE
* CHECK TRACKS AVAILABLE.
RTC7 SA4 A3+MDGL-TDGL READ SECTOR LIMITS
BX6 -X5*X3 TRACKS AVAILABLE
BX4 -X5*X4 MINUMUM SECTOR LIMIT
NZ X7,RTC7.1 IF NOT REQUESTING ONE TRACK
SX7 B1+ SET ONE SECTOR REQUESTED
EQ RTC8 COMPUTE REQUESTED TRACKS
RTC7.1 PL X7,RTC8 IF NOT REQUESTING ALL TRACKS
SX2 X7+B1
MX5 -18
BX7 -X5*X7 SET SECTORS REQUESTED TO POSITIVE NUMBER
NZ X2,RTC8 IF NOT REQUESTING ALL TRACKS
IX7 X6*X4 REQUEST ALL TRACKS ON DEVICE
RTC8 PX2 X4 COMPUTE REQUESTED TRACKS
PX5 X7
NX2 X2
FX2 X5/X2
UX2,B2 X2
LX2 X2,B2
IX5 X2*X4 COMPUTE SECTORS IN LAST TRACK
IX7 X7-X5
SA7 RTCA SAVE REMAINDER
SX5 -1
ZR X7,RTC9 IF MULTIPLE OF SECTOR LIMIT
SX2 X2+1 INCREASE TRACK COUNT BY ONE
RTC9 SB4 X2 REQUESTED TRACKS
IX3 X3-X2 DECREMENT TRACKS REMAINING
SX7 B1
IX6 X6-X2 DECREMENT TRACKS REMAINING
LX7 47
NG X6,CCP1 IF TRACKS NOT AVAILABLE
MX6 -11
SB7 -48 (B7) = -48 = NORMALIZE BIAS
LX3 -12
SB3 B6-B1 FIRST WORD ADDRESS - 1 OF TRT
BX2 -X6*X3 FIRST FREE TRACK POINTER
MX5 -4 (X5) = -17B = RESERVATION BIT MASK
BX3 X6*X3 CLEAR FIRST FREE TRACK POINTER
SA2 X2+B3 SET START OF TRT SEARCH
SA0 TMSK-1 SET SCRATCH WORD ADDRESS
SA4 B0+ SET NO LINK WORD ADDRESS
* CLEAR LINK BYTE IN CURRENT TRACK.
ZR X1,RTC10 IF NO CURRENT TRACK
MX2 -2
BX0 -X6*X1 CURRENT TRACK
BX2 -X2*X1
AX0 2
SB2 X2+56 RESERVATION BIT SHIFT COUNT
LX2 2
SB3 X2
LX2 1
SA4 X0+B6 READ TRT WORD OF CURRENT TRACK
SB3 X2+B3 SET LINK BIT SHIFT COUNT
LX2 X4,B2 POSITION RESERVATION BIT
SA0 A4 SET LINK ADDRESS
LX0 X4,B3 POSITION LINK BIT
SB3 B3+B7 SET LINK SHIFT COUNT
BX2 -X0*X2
AX6 X6,B3 POSITION CLEARING MASK
MX0 1 SET NO MRT PROCESSING
PL X2,HNG IF NOT RESERVED OR IF LINKED
BX6 X6*X4
SA6 A4
* SEARCH FOR FIRST FREE TRACK.
RTC10 SA2 A2+B1 SEARCH FOR FREE TRACK
BX6 X2+X5
ZR X6,RTC10 IF NO FREE TRACK
SX4 A2-B6 COMPUTE TRACK NUMBER
NX6,B2 X6
LX4 2
SB6 4000B-44+X4
SX4 B6+B2 TRACK NUMBER
BX3 X3+X4 SAVE FIRST TRACK ASSIGNED
NG X0,RTC13 IF NO MRT BIT TO SET
TEQ (/ISDMMF/SMB,ISDMMF,/PROGRAM/HNG) SET MRT BIT
* TRT SEARCH AND LINK LOOP.
RTC11 SA2 A2+B1 NEXT TRT WORD
SB6 B6+4 INCREMENT BASE TRACK NUMBER
BX6 X2+X5 CHECK TRACKS RESERVED
RTC12 ZR X6,RTC11 IF ALL TRACKS RESERVED
NX6,B2 X6 (B2) = BYTE NUMBER + 44
SX4 B6+B2 TRACK NUMBER
RTC13 AX6 X7,B2 POSITION RESERVATION BIT
BX6 X2+X6 RESERVE TRACK
SA6 A2
SA1 A0 READ PREVIOUS RESERVATION
AX6 X4,B3 POSITION LINK BYTE
BX6 X6+X1 MERGE LINK BYTE
SX4 B2+B7 BYTE NUMBER - 4
SA6 A1
LX4 2
SB4 B4-B1 DECREMENT TRACK COUNT
SB3 X4
SA2 A2 RE-READ RESERVATION WORD
LX4 1
SA0 A2 SET LINK ADDRESS
SB3 X4+B3 SET LINK SHIFT COUNT
BX6 X2+X5
NZ B4,RTC12 IF MORE TRACKS REQUESTED
* UPDATE LAST TRACK BYTE (EOI SECTOR).
SA1 RTCA GET REMAINDER
NZ X1,RTC13.1 IF REQUEST NOT MULTIPLE OF SECTOR LIMIT
SA1 A3+MDGL-TDGL GET SECTOR LIMIT
MX7 -12
BX1 -X7*X1 SECTOR LIMIT
RTC13.1 SX7 B1 COMPUTE REMAINING SECTOR COUNT
IX1 X1-X7
AX7 X1,B3 POSITION TO TRACK BYTE IN TRT
BX7 X7+X2
SA7 A2 UPDATE TRACK BYTE
LX1 12
SX7 B2+B6 TRACK NUMBER
LX7 24
BX7 X1+X7 PRESET RESPONSE
* UPDATE FIRST FREE TRACK AND RETURN FIRST TRACK ASSIGNED.
MX4 -11
SA1 A3+TRLL-TDGL SET FWA OF TRT
SB6 X1
SB4 A4 SET LINK WORD ADDRESS
BX1 -X4*X3
BX6 X4*X3
SX5 A2-B6 FIRST FREE TRACK
SX0 X1+4000B FIRST TRACK
BX7 X0+X7 INSERT INTO RESPONSE TO PP
BX6 X6+X5 MERGE FIRST FREE TRACK BYTE
AX1 2
SB3 A2
LX6 12
SA2 A5 RE-READ REQUEST
LT B4,B3,RTC14 IF LINK WORD BEFORE LAST WORD TO UPDATE
SX5 B4-B6 UPDATE UP TO LINK WORD
RTC14 MX4 -9 SET EST ORDINAL
SA6 A3 STORE UPDATED *TDGL*
LX4 36
BX2 -X4*X2
SX5 X5+B1 SET LWA+1 OF TRT TO UPDATE
BX7 X2+X7 RETURN FIRST TRACK ASSIGNED
EQ CCP1 CHECK FOR DEVICE CHECKPOINT REQUESTED
RTCA CON 0 REMAINDER
STB SPACE 4
** STB - SET TRACK BIT.
* ENTERED FROM BOTH MONITOR AND PROGRAM MODE.
*
* ENTRY (A5) = PP OUTPUT REGISTER ADDRESS.
* STB ENTRY FROM PROGRAM MODE.
* STB1 ENTRY FROM MONITOR MODE.
* (B5) EXIT ADDRESS IF ENTERED AT *STB1*.
*
* EXIT NONE.
*
* USES X - 1, 2, 3, 4, 5, 6, 7.
* B - 3, 4, 5.
* A - 3, 4, 6, 7.
*
* CALLS CCP, CTR.
STB SX4 X1
LX4 -14
SA2 X4+/MONITOR/TSTB READ OPTION TABLE
NG X4,STB1 IF SECOND ENTRY IN OPTION TABLE WORD
LX2 30
STB1 SB3 X2 SET *CTR* RETURN
UX2,B6 X2 SET *CTR* PARAMETER
EQ CTR CHECK TRACK REQUEST
STB2 SX7 STIS*10000B INTERLOCK IQFT TRACK
ZR X1,/MONITOR/STB3 IF NO IQFT TRACK
SUBFUN STBM,(STFS,CTFS,STIS,CTIS,SPFS,CPFS)
AX4 X5,B1 -3777B MASK
BX1 -X4*X1 TRACK NUMBER
MX3 -2
SX5 B1
BX3 X3+X1 BYTE NUMBER - 3
LX7 -13
SB3 X3 SET RESERVATION BIT SHIFT COUNT
LX1 -2
SX2 X7
AX5 X5,B3 POSITION RESERVATION BIT
LX2 2
SA4 B6+X1 READ TRT WORD
SB3 X2 SET TRACK BIT SHIFT COUNT
BX2 X5*X4 CURRENT VALUE OF RESERVATION BIT
LX5 X5,B3 POSITION TRACK BIT
AX7 59 (X7) = 0 FOR SET, -0 FOR CLEAR OPTION
BX6 X4-X5 COMPLEMENT TRACK BIT
BX4 X5*X4 CURRENT VALUE OF TRACK BIT
BX5 -X7*X5 NON-ZERO IF SET REQUEST
BX4 X5-X4 ZERO IF BIT ALREADY SET/CLEAR
ZR B3,STB8 IF FLAW REQUEST
ZR X2,STB9 IF TRACK NOT RESERVED
ZR X4,STB7 IF BIT ALREADY SET/CLEAR
AX4 8
SX3 B1
STB4 NZ X4,STB5 IF INCREMENT/DECREMENT OF PF COUNT
BX7 X7-X7
SA6 A4 STORE TRT WORD
NG X0,CCP1 IF NOT SHARED DEVICE
TEQ (/ISDMMF/STB10,ISDMMF,/MONITOR/HNG1)
* INCREMENT/DECREMENT PRESERVED FILE COUNT.
STB5 BX7 X7-X3 (X7) = 1 IF INCREMENT, -1 IF DECREMENT
LX3 24+11
SA2 A3+B1 READ *ACGL* WORD
LX7 24
IX7 X2+X7 ADJUST COUNT
BX4 -X3+X7 CHECK FOR OVERFLOW/UNDERFLOW
ZR X4,STB4 IF OVERFLOW/UNDERFLOW
STB6 SA7 A2 STORE UPDATED COUNTS
BX4 X4-X4
EQ STB4
STB7 ZR X5,/MONITOR/HNG1 IF CLEARING AN ALREADY CLEARED BIT
SX7 B1
SX3 B1
LX7 36
MX5 1 SET NO UPDATE OF TRT IN ECS
EQ CDI RELEASE DEVICE INTERLOCK
* PROCESS FLAW REQUEST.
STB8 ZR X4,STB7 IF BIT ALREADY SET/CLEAR
SA2 X3+TMSK+3
LX3 2 COMPUTE BYTE SHIFT COUNT
BX5 -X2*X6 MASK OUT ALL FIELDS FOR THIS TRACK
SB4 X3
LX3 1
SB4 B4+X3
MX4 -11
SA2 A3 REREAD *TDGL*
LX4 12
BX2 X4*X2 CLEAR FIRST FREE TRACK POINTER
AX4 X4,B4 POSITION FLAW STATUS BYTE
BX6 -X4-X6 COMPLIMENT FLAW STATUS
BX4 -X4*X7
BX5 X5-X4
AX5 4 SHIFT OFF RESERVATION BITS
NZ X5,/MONITOR/HNG1 IF BAD TRACK
SX3 B1
BX7 -X7-X3
IX7 X2+X7
EQ STB6
STB9 SA4 A5 CHECK RETURN ON TRACK NOT RESERVED
SX7 B1+B1
MX5 1 SET NO TRT UPDATE
LX4 59-46
PL X4,/MONITOR/HNG1 IF NO RETURN
SX3 B1
LX7 36
EQ CDI CLEAR DEVICE INTERLOCK
TITLE PROGRAM MODE SUBROUTINES.
APS SPACE 4,10
** APS - ASSIGN PP (PROGRAM MODE).
*
* ENTRY (X1) = PP REQUEST.
* (B3) = EXIT ADDRESS.
*
* EXIT (X1) = ADDRESS OF COMMUNICATION BUFFER.
* (X1) = 0 IF NO BUFFER AVAILABLE.
* (X6) = PP REQUEST.
*
* USES X - 1, 6, 7.
* A - 1, 6.
*
* CALLS /MONITOR/ACB.
APS SX6 -B1 SET PP REQUEST TO MONITOR MODE
BX7 X1 SAVE PP REQUEST
SA6 PX
SB3 -B3 SET *APS* CALL TO *ACB*
EQ /MONITOR/ACB ASSIGN COMMUNICATION BUFFER
APS1 SB3 -B3 RESET RETURN ADDRESS
BX6 X1 PARAMETER WORD
ZR X1,APS2 IF NO BUFFER AVAILABLE
MJ EXCHANGE TO MONITOR MODE
ZR X6,APS3 IF NO PP ASSIGNED
APS2 BX6 X7 RESTORE PP REQUEST
JP B3 RETURN
APS3 SA6 X1 RELEASE COMMUNICATION BUFFER
BX1 X1-X1 CLEAR RESPONSE
EQ APS2 EXIT
CCP SPACE 4
** CCP - CHECK FOR CHECKPOINT REQUESTED.
*
* ENTRY (X7) = STATUS TO RETURN TO OR.
* (X1) = FIRST WORD OF TRT TO UPDATE. (MSD ONLY)
* (X5) = LAST WORD + 1 OF TRT TO UPDATE. (MSD ONLY)
* (B4) = TRT LINK WORD TO UPDATE. (MSD ONLY)
* (B5) = EXIT ADDRESS.
* (B6) = STARTING ADDRESS OF TRT.
* (A3) = ADDRESS OF TDGL WORD OF MST.
* (A5) = OR ADDRESS.
* BIT 11 SET IN OR+1 INDICATES CHECKPOINT REQUESTED.
*
* EXIT EXITS TO CDI.
*
* USES X - 2, 3, 4, 6.
* A - 2, 6.
* ENTERED HERE FROM MONITOR MODE.
CCP1 SA2 A5
SA4 A3+SDGL-TDGL CHECK FOR ISHARED DEVICE
SX3 B1
LX2 12 POSITION CHECKPOINT REQUESTED BIT
BX2 -X4*X2
PL X2,CDI IF ISHARED OR NO CHECKPOINT REQUESTED
SA2 A3+STLL-TDGL READ MST WORD
SX4 B1+
LX4 50
BX6 X2+X4 SET CHECKPOINT BIT
SA6 A2+
* EQ CDI CLEAR DEVICE INTERLOCK
CDI SPACE 4
** CDI - CLEAR DEVICE INTERLOCK.
*
* ENTRY (X1) = FIRST WORD OF TRT TO UPDATE. (MSD ONLY)
* (X3) = 1.
* (X5) = LAST WORD + 1 OF TRT TO UPDATE. (MSD ONLY)
* (X7) = WORD TO BE STORED IN OUTPUT REGISTER.
* (B4) = TRT LINK WORD TO UPDATE. (MSD ONLY)
* (B5) = EXIT ADDRESS.
* (B6) = START OF TRT.
* (A3) = ADDRESS OF MST IN CM.
* (A5) = OUTPUT REGISTER ADDRESS.
*
* EXIT (OR) = (X7) = STATUS RESPONSE.
CDI SA4 A3+SDGL READ SDGL WORD OF MST
BX6 -X3*X4 RELEASE MST INTERLOCK
AX4 36
TNG X6,(/ISD/CDI,ISD,/MONITOR/HNG1) IF ISHARED
TNZ X4,(/PROGRAM/CDI1,MMF,/LSPMMF/CDI) IF MMF DEVICE
SA6 A4+ STORE *SDGL*
* EQ CSM1 CHECK FOR STORAGE MOVE
CSM SPACE 4,15
** CSM - CHECK FOR STORAGE MOVE.
*
* ENTRY (X7) = WORD TO BE STORED IN OUTPUT REGISTER.
* (B5) = EXIT ADDRESS, IF ENTERED AT *CSM1*.
* (A5) = OUTPUT REGISTER ADDRESS.
*
* EXIT OUTPUT REGISTER STORED.
* (X7) = VALUE STORED IN OUTPUT REGISTER.
*
* USES X - 2, 3, 6, 7.
* A - 2, 3, 7.
* B - 5.
* ENTRY WITH RETURN ADDRESS SPECIFIED BY CALLER.
CSM1 TX6 A5-1,-SP IGNORE PSEUDO-PP
MX2 12 IGNORE NONZERO OUTPUT REGISTERS
BX6 -X6+X7
TX3 A5-1,-FP
BX2 X2*X6
LX3 PPXES-PPCES
NZ X2,CSM2 IF PSEUDO-PP OR FUNCTION PRESENT
TA3 X3+ACPP,FPX GET CP/PCP ASSIGNMENT
SA2 CMCL
BX3 X3-X2
AX3 48
NZ X3,CSM2 IF NO MOVE REQUEST FOR CP/PCP
SX3 PRLM
LX3 48
BX7 X3+X7 SET *PRLM* IN OUTPUT REGISTER
CSM2 SA7 A5 STORE OUTPUT REGISTER
JP B5 EXIT
CSM BSS 0 ENTRY
SB5 PPRX SET RETURN ADDRESS
EQ CSM1 CHECK FOR STORAGE MOVE
CTR SPACE 4,35
** CTR - CHECK TRACK REQUEST.
* MAY BE USED FROM PROGRAM OR MONITOR MODE.
*
* ENTRY (X1) = REQUEST WORD.
*T, X1 12/ 0,12/ EQ,12/ TK,12/ ,12/
* EQ = EST ORDINAL.
* TK = TRACK NUMBER.
* (B3) = EXIT ADDRESS.
* (B5) = EXIT ADDRESS IF ILLEGAL REQUEST FOUND.
* NEEDED IF ENTERED AT *CTR1*.
* (B6) = 0 IF NOT TO INTERLOCK MST/TRT.
* (B6) .NE. 0 IF TO INTERLOCK MST/TRT AND
* READ TRT FROM ECS. (SHARED DEVICE)
*
* EXIT (X0) .LT. 0 IF NOT SHARED DEVICE
* (X0) = 12/TRT LENGTH + 2000B, 48/ECS ADDRESS OF MRT.
* (FOR ISD, ECS ADDRESS = 0.)
* (X1) = BYTE 2 OF REQUEST WORD.
* (X2) = BYTE 3 OF REQUEST WORD.
* (X3) = TDGL WORD OF MST.
* (X5) = -7777B.
* (X7) = LOWER 18 BITS OF REQUEST WORD. (SIGN EXTENDED)
* (B6) = ADDRESS OF FIRST WORD OF TRT.
* (A3) = ADDRESS OF TDGL WORD OF MST.
* (A4) = ADDRESS OF SDGL WORD OF MST.
* HANG PPU IF NOT LEGAL MASS STORAGE DEVICE.
*
* USES X - 1, 2, 3, 4, 5, 6, 7.
* B - 5, 6.
* A - 3, 4.
*
* CALLS REJ, SDI.
CTR SB5 PRG SET EXIT ADDRESS
* (B5) = EXIT ADDRESS IN CASE OF ERROR DETECTED.
CTR1 LX1 24 POSITION EQUIPMENT FIELD
MX3 -9
MX2 -6
BX7 -X3*X1 EST ORDINAL
CX4 X7,EST CONVERT EST ORDINAL TO OFFSET
MX5 -12
TA4 X4+EQDE,EST READ EST ENTRY
TX6 X7,-ESTL
BX3 -X5*X4 MST ADDRESS/10B
BX0 X4*X6
ZR X7,CTR1.0 IF REQUEST FOR *RD* DEVICE
PL X0,/MONITOR/HNG1 IF NOT *MS* OR OUT OF EST
CTR1.0 LX3 3
LX1 24
SA4 X3+SDGL CHECK SHARED STATUS
BX6 -X2*X4 MACHINE INTERLOCK FIELD
AX4 36
SA3 X3+TDGL
TNG X4,(/ISD/CTR3,ISD,/MONITOR/HNG1) IF ISHARED
TNZ X4,(/PROGRAM/SDI,MMF,/LSPMMF/SDI) IF MMF SHARED
ZR B6,CTR2 IF NOT TO INTERLOCK MST/TRT
* INTERLOCK MST/TRT.
CTR1.1 SA4 A4 **** PERFORM IN 1 WORD ****
SX6 B1 **** PERFORM IN 1 WORD ****
BX6 X4+X6 **** PERFORM IN 1 WORD ****
SA6 A4 **** PERFORM IN 1 WORD ****
BX2 X6-X4
ZR X2,REJ IF PREVIOUSLY INTERLOCKED
CTR2 BX2 -X5*X1
LX1 12
SA3 A3+TRLL-TDGL SET FWA OF TRT
SB6 X3
SX7 X1
LX1 -24 POSITION BYTE 2
BX1 -X5*X1
SA3 A3+TDGL-TRLL RE-READ *TDGL*
JP B3 RETURN
HNG SPACE 4
** HNG - HANG PPU.
* LEAVE PPU OUTPUT REGISTER SET, SET PACKED TIME AND DATE IN
* LAST WORD OF MESSAGE BUFFER, AND DISPLAY MESSAGE.
*
* ENTRY (A5) = PPU OUTPUT REGISTER ADDRESS.
* (/MONITOR/T1) = (B2) TO BE RESTORED IF MONITOR MODE.
*
* EXIT EXITS TO *PRG*.
HNG RJ /MONITOR/SVR SAVE REGISTERS
SA2 A5
LX2 59-58 CHECK MONITOR MODE CALL
SB5 PRGX
NG X2,/MONITOR/HNG2 IF IN PROGRAM MODE
SA2 /MONITOR/T1 RESTORE (B2)
SB2 X2
JP /MONITOR/HNG0 HANG PP
DSB SPACE 4,30
** DSB - DIVIDE 60 BIT INTEGER.
*
* ENTRY (X6) = DIVIDEND.
* (X2) = DIVISOR.
* (B4) = RETURN ADDRESS.
*
* EXIT (X6) = QUOTIENT.
*
* USES X - 1, 2.
*
* CALLS MSB.
DSB SX1 B1 FORM RECIPROCAL
PX1 X1
NX1 X1
RX2 X1/X2
EQ MSB MULTIPLY 60 BIT INTEGER
MPY SPACE 4,15
** MPY - CALCULATE THE PRODUCT Z = (X*Y)MOD PRIME.
*
* ENTRY (X1) = INTEGER (X).
* (X2) = INTEGER (Y).
* (B3) = RETURN ADDRESS.
*
* EXIT (X6) = INTEGER RESULT.
*
* USES X - ALL.
* A - 3.
* B - 5.
MPY PX1 X1 PACK AND NORMALIZE X AND Y
PX2 X2
NX1 X1 (X1) = D1
NX2 X2 (X2) = D2
* CALCULATE DX = D1*D2.
SA3 MOD
FX7 X1*X2
DX6 X1*X2
* CALCULATE IX = DX/MOD.
BX0 X3
SX1 B0+
FX2 X7/X0
FX5 X2*X0
FX4 X7-X5
DX5 X7-X5
NX4 X4
FX5 X5+X4
DX4 X2*X0
FX4 X6-X4
FX5 X5+X4
FX1 X2*X1
FX4 X5-X1
FX5 X4/X0
FX1 X2+X5
NX1 X1
DX2 X2+X5
FX4 X2+X1
UX4,B5 X4
LX3 X4,B5
PX3 X3 (X3) = IX
* CALCULATE DY = IX*MOD.
DX1 X3*X0
FX2 X3*X0
* CALCULATE Z = DX-DY.
FX3 X7-X2
DX4 X7-X2
FX5 X6-X1
NX0 X3
FX1 X4+X5
FX3 X0+X1
NX6 X3
DX5 X0+X1
NX5 X5
FX6 X6+X5
UX6,B5 X6
LX6 X6,B5 (X6) = Z
JP B3 RETURN
MSB SPACE 4,10
** MSB - MULTIPLY 60 BIT INTEGER.
*
* ENTRY (X6) = 60 BIT INTEGER MULTIPLICAND.
* (X2) = FLOATING POINT MULTIPLIER.
* (B4) = RETURN ADDRESS.
*
* EXIT (X6) = PRODUCT.
*
* USES X - 1, 6, 7.
* B - 6.
MSB UX7 X6
MX1 12
PX7 X7
BX1 X1*X6 MULTIPLY TOP 12 BITS OF INTEGER
NX7 X7
AX1 12
RX7 X7*X2
PX1 X1
RX1 X1*X2
UX7,B6 X7
LX7 B6
UX1,B6 X1
SB6 B6+12
LX1 B6
IX6 X1+X7 MERGE PARTIAL PRODUCTS
JP B4 RETURN
REJ SPACE 4
** REJ - REJECT FUNCTION REQUEST.
*
* IF STORAGE MOVE IS REQUESTED FOR THE CONTROL POINT OR
* PSEUDO-CONTROL POINT TO WHICH THE PP IS ASSIGNED, SET THE
* REISSUE FUNCTION AND ALLOW STORAGE MOVE FLAGS IN THE OUTPUT
* REGISTER. NOTE THAT ANY MONITOR FUNCTION WHOSE PROCESSOR MAY
* CALL THE ROUTINE IS NOW STORAGE MOVABLE WHILE THE REQUEST IS
* PENDING. FUTURE CODE IN PP ROUTINES SHOULD CONSIDER ANY
* MONITOR FUNCTION AS MOVABLE, ALLOWING FOR THE FOR THE TIME
* THAT THIS IS ACTUALLY ACHIEVED.
*
* ENTRY (B5) = EXIT ADDRESS.
* (A5) = *OR* ADDRESS.
*
* USES X - 4, 5, 7.
* A - 4, 5, 7.
REJ TX4 A5-1,-FP
LX4 PPXES-PPCES
TA4 X4+ACPP,FPX GET CP/PCP ASSIGNMENT
MX7 1
BX5 X4
SA4 CMCL GET MOVE CONTROL
BX4 X4-X5
AX4 48
SA5 A5+ GET OUTPUT REGISTER
NZ X4,REJ1 IF NO MOVE REQUEST FOR CP/PCP
SX4 1 SET STORAGE MOVABLE FUNCTION FLAG
LX4 56-0
BX7 X4+X7
REJ1 BX7 X7+X5 SET REJECTION BIT
SA7 A5 STORE OR
JP B5 RETURN
TITLE MONITOR REQUEST PROCESSORS.
MNR SPACE 4
** MNR - MONITOR REQUEST PROCESSOR.
*
* ENTRY (X7) = 0.
* (B4) = REQUEST NUMBER.
*
* EXIT (X7) = 0.
* (B2) = 2.
* (B4) = REQUEST NUMBER.
MNR SA3 TMNR+B4 SET PROCESSOR
SB2 B1+B1
SB6 X3 PROCESS REQUEST
TJP (/PROBE/MNR,PROBE,B6) PROCESS REQUEST
IDL SPACE 4
** IDL - IDLE PROGRAM.
IDL CON 0 (RA) FOR IDLE PROGRAM
CON 0 (RA+1) FOR IDLE PROGRAM
CX2 X1 DELAY (6 BITS)
CX2 X1 DELAY (6 BITS)
EQ 2 LOOP
MST SPACE 4
** MST - MOVE STORAGE.
* MOVE A CONTROL POINT UP OR DOWN.
*
* USES X - 1, 2, 3, 4, 5, 6, 7.
* B - 2, 3, 4, 5.
* A - 1, 2, 3, 4, 5, 6, 7.
*
* CALLS SMP.
MNR MSTF,(/PROGRAM/MSE,ECM,/PROGRAM/MST)
MST SA5 A5 GET MOVE INCREMENT
MX1 -12
SA2 B7+FLSW
BX4 -X1*X2
LX5 6
LX2 -RSHF
LX4 6 FL
SB6 MST2 RETURN ADDRESS
MX3 -RMSK
BX3 -X3*X2 RA
LX2 12+12
LX3 6 RA
BX2 -X1*X2
BX1 -X5 MOVE INCREMENT
LX2 6 NFL
IX0 X3-X2 SUBTRACT NFL SIZE FROM RA
IX4 X4+X2 ADD NFL SIZE TO FL
SB4 X4
TJP (/CME/SMI,CME,/PROGRAM/SMC,CMU,/PROGRAM/SMR)
* INDICATE MOVE COMPLETE.
MST2 TNO /MCE/MST,MCE IF MEMORY CLEARING ENABLED
TA1 CMMS,SDA COUNT STORAGE MOVE
MST3 SX2 B1
IX6 X1+X2
SA6 A1
SA5 A5 GET MOVE INCREMENT
SA2 B7+FLSW READ FL CONTROL WORD
MX6 -RMSK
SA1 B7+B1 READ EXCHANGE PACKAGE
LX2 -RSHF POSITION TO RA
IX7 X2+X5 UPDATE RA
BX6 -X6*X7 NEW RA
LX7 RSHF RE-POSITION
SA7 A2+0
LX6 36+6 POSITION NEW RA
MX7 24
BX1 -X7*X1 CLEAR OLD RA
BX6 X6+X1 INSERT NEW RA
SA6 A1 UPDATE EXCHANGE PACKAGE
SA1 A2+B1 CHANGE SECOND FLSW WORD
LX5 24
IX7 X1+X5
SA7 A1+
* EQ SMPX EXIT
SMP SPACE 4,10
** SMP - STORAGE MOVE PROGRAM MODE EXIT.
*
* ENTRY (A5) = ADDRESS OF *SMRL*.
*
* EXIT TO REQUEST PROCESSOR.
SMPX SX7 B0+
SA7 SMPR CLEAR REQUEST
XJ
SMP SA1 SMPR CHECK FOR REQUEST
SB4 X1-1
SA3 TMNR-1+X1 GET PROCESSOR ADDRESS
SB6 X3+
TJP (/PROBE/MNR,PROBE,B6)
SMPXP SPACE 4,10
** SMPXP - STORAGE MOVE EXCHANGE PACKAGE.
*
* THIS EXCHANGE PACKAGE IS USED FOR CM AND UEM STORAGE
* MOVES. IT RUNS SEPARATE FROM THE SYSTEM CONTROL POINT
* AT AN EQUAL PRIORITY, BUT ITS CPU RESOURCES ARE ACCOUNTED
* TO THE SYSTEM CP. UNLIKE THE SYSTEM CP, IT IS NOT FORCED
* INTO CPU-0, UNLESS ECS IS USED FOR THE CM STORAGE MOVE.
* THE PRIMARY PURPOSE OF THIS SEPARATE EXCHANGE PACKAGE IS
* TO ALLOW IT TO TAKE ADVANTAGE OF THE ARCHITECHURE OF THE
* MAINFRAMES EQUIPPED WITH *CME* (CENTRAL MEMORY EXTENSION).
SMPXP EXP P=/PROGRAM/SMP,FL=(,MCM),FLX=(,MXM),B1=1,A5=SMIN,MA=SMP
,XP,EM=(,EXPFEC),EA=SMPXP
* STSW.
VFD 3/ZCPS CPU STATUS
VFD 57/0
* CWQW.
VFD 2/1
VFD 7/MPRS CPU PRIORITY
VFD 1/0
VFD 1/0 CPU SLICE ACTIVE
VFD 1/0 RECALL FLAG
VFD 1/1 EXTENDED CPU SLICE INCOMPLETE
VFD 2/0
VFD 9/0 SERVICE CYCLE
VFD 9/SSSC*JCBE SERVICE PARAMETERS INDEX
VFD 1/0 *MTR* BYPASS FLAG
VFD 2/0 NO CPU SELECTION
VFD 3/0
VFD 3/SMXT STORAGE MOVE EXCHANGE PACKAGE TYPE
VFD 18/0 *WQ* LINKAGE
* CSAW.
VFD 60/0
* *CTMW*.
VFD 60/0
QUAL
SMPXP EQU /PROGRAM/SMPXP
QUAL *
PMR SPACE 4
** PMR - PROCESS INTER-MAINFRAME FUNCTION REQUEST.
*
* ENTRY NONE.
*
* EXIT NONE.
MNR PMRF,(/PROGRAM/PMR,MMF,/PROGRAM/HNG)
MEC SPACE 4,10
** MEC - MOVE ECS STORAGE.
*
* ENTRY
*T SM 12/ INC,30/,18/ CP
* INC = INCREMENT.
* CP = CONTROL POINT ADDRESS.
*
* EXIT
*T SM 60/0
MNR MECF,(/PROGRAM/MEC,UEC,/PROGRAM/HNG)
SPACE 4
* MONITOR/PROGRAM MODE EQUIVALENCES.
PX EQU /MONITOR/PX
PR EQU /MONITOR/PR
SMPR EQU /MONITOR/SMPR
SMIN EQU /MONITOR/SMIN
PPRX EQU /MONITOR/PPRX
QUAL MONITOR
CSM EQU /PROGRAM/CSM
CSM1 EQU /PROGRAM/CSM1
REJ EQU /PROGRAM/REJ
TTL CPUMTR - CPU MONITOR.
TITLE CPUMTR BLOCK ORGANIZATION.
BLOCKS SPACE 4,10
** CPUMTR COMMON BLOCK ORGANIZATION.
*
* CPUMTR IS ORGANIZED TO PLACE OPTIONAL CODE INTO COMMON
* BLOCKS WHICH CAN BE LOADED OR IGNORED AT DEAD START TIME,
* DEPENDING UPON WHICH FEATURES ARE TO BE USED BY THE OPERATING
* SYSTEM. WITH THE BLOCK ORGANIZTION A SITE OR MACHINE NOT
* USING AN OPTIONAL FEATURE SUCH AS ECS OR MULTI-MAINFRAME
* DOES NOT HAVE TO LOAD THIS CODE INTO CMR WITH CPUMTR.
* A START OF BLOCK MACRO *BLOCK* AND AN END OF BLOCK MACRO
* *ENDBLK* ARE USED TO DEFINE A CPUMTR COMMON BLOCK. THESE
* MACROS PROVIDE THE LOADER AND QUAL BLOCK DEFINITIONS FOR
* THE CPUMTR BLOCK. EACH BLOCK WILL NORMALLY BE QUALIFIED WITH
* ITS NAME TO ASSURE PROGRAMMER AWARENESS OF WHICH ROUTINES
* AND DATA CELLS RESIDE IN WHICH BLOCK.
* A NULL BLOCK WILL USUALLY BE ASSOCIATED WITH EACH
* OPTIONAL BLOCK AND WILL BE LOADED WHEN THE OPTIONAL BLOCK
* IS NOT.
* WHEN THERE ARE TWO ASSOCIATED BLOCKS, THE CPUMTR LOADER
* WILL MAKE A DECISION AT DEADSTART TIME AS TO WHICH BLOCK TO
* LOAD. FOR EXAMPLE IN THE CASE OF ECS TRANSEFER CODE, THE
* LOADER WOULD CHECK THE ECS FIELD LENGTH TO DETERMINE THE
* PRESENCE OF ECS. IF THERE IS NO ECS FIELD LENGTH THE NULL
* ECS TRANSFER BLOCK WOULD BE LOADED.
BLOCK CMU,(MOVE STORAGE WITH CMU.),PROGRAM
SMP SPACE 4
** NOTE -
* THE *CMU* MUST NOT BE USED IN MONITOR MODE ON A DUAL-CPU
* MAINFRAME WITH ONLY ONE *CMU*, BECAUSE IT MAY BE IN USE BY
* THE OTHER CPU, CAUSING MONITOR MODE TO WAIT FOR IT TO FINISH.
CSC SPACE 4,10
** CSC - CLEAR STORAGE USING *CMU*.
*
* ENTRY (A5) = OUTPUT REGISTER ADDRESS.
* (X5) = OUTPUT REGISTER.
* (X1) = FUNCTION PARAMETERS FROM OUTPUT REGISTER.
* (X7) = 0.
*
* EXIT ((A5)) = 0.
*
* CALLS CEC, CMP1, HNG, PRG.
*
* USES X - ALL.
* A - 3, 4, 7.
* B - 2, 3, 4, 5, 6.
MVED EQU 5 MOVE DIFFERENTIAL FOR OVERLAPPING CLEAR
* *CMP* RETURN PROCESSING.
CSC3 SX7 B0+
TNZ B3,(/MCE/CSTX,MCE,/PROGRAM/PRG1) IF NOT LIST
CSC4 SA3 A3+B1 READ NEXT LIST ENTRY
SB5 -MVED RESET (B5)
SB2 B7-B5 SET SIZE OF INITIAL CLEAR
NZ X3,CSC1 IF NOT END OF LIST
TEQ (/MCE/CSTX,MCE,/PROGRAM/PRG1) EXIT
* ENTRY.
CSC LX5 -24
SB3 X5 (B3) = 0 IF LIST PRESENT
SB5 -MVED SET MOVE DIFFERENTIAL
BX3 X1
LX5 59-43+24
SB7 -B1
MX2 -4
TNG X5,(/PROGRAM/CEC,UEC,/PROGRAM/HNG) IF CLEARING ECS
SB6 CSC3 *CMP* RETURN ADDRESS
SB2 B7-B5 SET SIZE OF INITIAL CLEAR
NZ B3,CSC1 IF NOT LIST
SA3 A5+B1 READ FIRST LIST WORD
CSC1 BX6 X3
AX3 24
ZR X3,CSC4 IF NOTHING TO CLEAR
BX4 X2*X3
NZ X4,CSC2 IF MORE THAN 15 WORDS TO CLEAR
SB2 X3+B7
CSC2 SA7 X6+B2 CLEAR PRIMER AREA OR SHORT BLOCK
SB2 B2-B1
PL B2,CSC2 IF MORE TO CLEAR
ZR X4,CSC4 IF SHORT BLOCK
SB4 X3+B5 SET WORD COUNT
MX0 -24
SA4 CMPB ADDRESS INCREMENT
SX1 -MVED MOVE DIFFERENTIAL
SB5 CSCA MOVE DESCRIPTOR WORD
BX6 -X0*X6 FWA
SB2 X4 100B
EQ CMP1 ENTER MOVE LOOP
CSCA CON 0 MOVE DESCRIPTOR WORD
CMP SPACE 4
** CMP - CMU MOVE LOOP FOR USE IN PROGRAM MODE.
* CMP PROCESSES BOTH UPWARD AND DOWNWARD MOVES WITH NO CHECK
* FOR OVERLAP. IF AN OVERLAP MAY EXIST AND IS NOT DESIRED
* *SMC* MUST BE CALLED TO PREVENT AN OVERLAPING MOVE.
*
* ENTRY (X0) = ADDRESS TO MOVE FROM.
* (B4) = WORD COUNT OF MOVE.
* (X1) = (X0) - ADDRESS TO MOVE TO.
* (B6) = EXIT ADDRESS.
*
* IF ENTERED AT *CMP1* -
* (X4) = ADDRESS INCREMENT (CMPB).
* (X6) = ADDRESS TO MOVE FROM.
* (X1) = (X6) - ADDRESS TO MOVE TO.
* (A4) = CMPB.
* (B2) = 100B.
* (B6) = RETURN ADDRESS.
*
* USES X - 0, 1, 4, 6, 7.
* B - 2, 4, 5.
* A - 1, 4, 7.
*
* PRESERVES B3.
CMP SA4 CMPB READ ADDRESS INCREMENT
BX6 X0 SET ADDRESS FOR START OF MOVE
SB2 X4+ 100B
SB5 CMPA MOVE DESCRIPTOR WORD
* ENTERED HERE FROM *SMC*.
CMP1 MX7 -18 SET ADDRESSES
BX0 -X1
IX0 X6+X0
BX6 -X7*X6
LX6 30
BX0 -X7*X0
BX6 X6+X0
SA1 A4+B1
* CMU MOVE LOOP.
CMP2 GE B4,B2,CMP3 IF .GE. 100B WORDS TO MOVE
SX1 B4 SET CHARACTER COUNT FOR SHORT BLOCK
SX0 B4+B4
LX1 3
MX7 -4
IX1 X1+X0
BX0 -X7*X1 LL
BX1 X7*X1 LU
LX0 30-4
LX1 48-4
BX1 X1+X0
CMP3 BX7 X6+X1 MERGE ADDRESSES AND CHARACTER COUNT
IX6 X6+X4 INCREMENT ADDRESSES
SA7 B5 STORE DESCRIPTOR WORD
SB4 B4-B2 DECREMENT WORD COUNT
IM B5 MOVE STORAGE
GT B4,B0,CMP2 IF MORE WORDS TO TRANSFER
JP B6 RETURN
* THE FOLLOWING WORDS MUST REMAIN IN ORDER.
CMPA CON 0 INDIRECT MOVE DESCRIPTOR WORD
CMPB VFD 30/100B,30/100B ADDRESS INCREMENT
VFD 12/100B*10/20B,48/0 CHARACTER COUNT FOR 100B WORDS
SMC SPACE 4
** SMC - STORAGE MOVE WITH CMU.
* SMC MOVES BLOCKS OF 100B WORDS UPWARD OR DOWNWARD
* PREVENTING OVERLAP.
*
* ENTRY (X0) = ADDRESS TO MOVE FROM.
* (B4) = WORD COUNT OF MOVE.
* (X1) = (X0) - ADDRESS TO MOVE TO.
* (B6) = EXIT ADDRESS.
*
* USES X - 0, 1, 4, 6, 7.
* B - 2, 4, 5, 6.
* A - 1, 4, 7.
*
* CALLS CMP1.
SMC SA4 CMPB ADDRESS INCREMENT
SB5 SMCA MOVE DESCRIPTOR WORD
BX6 X0
SB2 X4 100B
PL X1,CMP1 IF DOWNWARD MOVE - NO OVERLAP
SX6 X4
BX4 -X4 COMPLEMENT INCREMENT
IX6 X0-X6 START MOVE FROM END OF BLOCK
SX0 B4 WORD COUNT
IX6 X0+X6
EQ CMP1 ENTER MOVE LOOP
SMCA CON 0 MOVE DESCRIPTOR WORD
ENDBLK
BLOCK 0CMU,(MOVE STORAGE WITH REGISTERS.),PROGRAM
SMR SPACE 4
** SMR - STORAGE MOVE VIA REGISTERS.
* SMR MOVES BLOCKS OF 10B WORDS THROUGH A REGISTER MOVE
* LOOP. BLOCKS WHICH ARE NOT MULTIPLES OF 10B WORDS
* SHOULD BE MOVED WITH *MSR*.
*
* ENTRY (X0) = ADDRESS TO MOVE FROM.
* (B4) = WORD COUNT OF MOVE.
* (X1) = (X0) - ADDRESS TO MOVE TO.
* (B6) = EXIT ADDRESS.
*
* USES X - ALL.
* B - 2, 4, 5, 6.
* A - 1, 2, 3, 4, 6, 7.
SMR SB5 X1+ B5 = MOVE DIFFERENCE
SA1 X0+ A1 = FWA TO MOVE FROM
SX0 B4-B1 (X0) = WORD COUNT - 1
SB2 B1 SET DIRECTION OF MOVE
PL B5,SMR1 IF DOWNWARD MOVE
SB4 B4-B1
SA1 A1+B4
SB2 -1
SMR1 SX5 -B1
AX0 3 (X0) = WORD COUNT - 10B
SA2 A1+B2
SB2 B2+B2
* REGISTER MOVE LOOP.
SMR2 SA3 A1+B2 READ NEXT TWO WORDS
BX6 X1
SA4 A2+B2
LX7 X2
SA6 A1-B5 STORE TWO WORDS
IX0 X0+X5 DECREMENT BLOCK COUNT
SA7 A2-B5
SA1 A3+B2 READ NEXT TWO WORDS
SA2 A4+B2
BX6 X3
LX7 X4
SA6 A3-B5 STORE TWO WORDS
SA7 A4-B5
SA3 A1+B2 READ NEXT TWO WORDS
SA4 A2+B2
BX6 X1
LX7 X2
SA6 A1-B5 STORE TWO WORDS
SA7 A2-B5
SA1 A3+B2 READ NEXT TWO WORDS
SA2 A4+B2
BX6 X3
LX7 X4
SA6 A3-B5 STORE LAST TWO WORDS
SA7 A4-B5
NZ X0,SMR2 IF NOT END OF MOVE
SX0 B1+B1
SMR3 BX6 X1 MOVE THE LAST 10B WORDS
LX7 X2
SA6 A1-B5
SA7 A2-B5
NG X0,SMR4 IF END OF MOVE
SA1 A1+B2 READ THE NEXT TWO WORDS
SA2 A2+B2
IX0 X0+X5 DECREMENT THE LOOP COUNT
EQ SMR3 LOOP TO STORE THE NEXT TWO WORDS
SMR4 JP B6 RETURN
CSP SPACE 4,10
** CSP - CLEAR STORAGE THROUGH THE CPU.
*
* ENTRY (A5) = PPU OUTPUT REGISTER ADDRESS.
*
* USES X - 0, 1, 5, 6.
* B - 3, 4, 5, 6.
* A - 1, 6, 7.
CSP LX5 -24
SB3 X5 (B3) = 0 IF LIST PRESENT
BX6 X6-X6
LX5 59-43+24
TNG X5,(/PROGRAM/CEC,UEC,/PROGRAM/HNG) IF CLEARING ECS
SB4 12B
SB6 B1+B1
NZ B3,CSP1 IF NOT LIST OPTION
SA1 A5+B1 GET LIST ENTRY
CSP1 BX5 X1
AX1 24 EXTRACT WORD COUNT
ZR X1,CSP4 IF NOTHING TO CLEAR
SB5 X1-1 WORDS TO CLEAR
LT B5,B4,CSP3 IF LESS THAN 13 WORDS
SA7 X5+B5
SB4 B4-B6
SA6 A7-B1
SB5 B5-B6 WORDS TO CLEAR
CSP2 SA7 A7-B6 CLEAR 10 WORD BLOCKS
SA6 A6-B6
SA7 A7-B6
SA6 A6-B6
SA7 A7-B6
SB5 B5-B4 DECREMENT WORD COUNT
SA6 A6-B6
SA7 A7-B6
SA6 A6-B6
GT B5,B4,CSP2 IF STILL 11 OR MORE WORDS TO CLEAR
CSP3 SA6 X5+B5
SB5 B5-B1
PL B5,CSP3 IF STILL MORE TO CLEAR
TNZ B3,(/MCE/CSTX,MCE,/PROGRAM/PRG1) IF NOT LIST
SB4 12B
CSP4 SA1 A1+1
NZ X1,CSP1 IF NOT END OF LIST
TEQ (/MCE/CSTX,MCE,/PROGRAM/PRG1) EXIT
ENDBLK
BLOCK CME,(CENTRAL MEMORY EXTENSION.)
SPACE 4,10
HNG EQU /MONITOR/HNG
MT EQU /MONITOR/MT
PPR1 EQU /MONITOR/PPR1
T1 EQU /MONITOR/T1
T2 EQU /MONITOR/T2
T3 EQU /MONITOR/T3
RA EQU /MONITOR/RA
RA1 EQU /MONITOR/RA1
RB6 EQU /MONITOR/RB6
SPACE 4,10
* DEFINE CME INSTRUCTION BLOCK.
CME$ EQU 1
CCP SPACE 4,10
** CCP - *CCP* EXTENSION FOR *CME* MACHINE.
*
* ENTRY (B3) = RETURN ADDRESS.
* (X1) = *JCB* *CSJT* WORD.
* (A1) = ADDRESS OF *JCB* *CSJT* WORD.
*
* EXIT CONVERTED SCHEDULING PARAMETERS SET IN *JCB* ENTRY.
*
* USES X - 0, 1, 2, 3, 6, 7.
* A - 1, 3, 6.
* B - 4.
CCP BSS 0 ENTRY
SA3 CCPA =15.625
BX7 -X0*X1 UNEXTENDED CPU SLICE
LX1 -12
BX6 -X0*X1 RECALL CPU SLICE
IX7 X7-X6 UNEXTENDED SLICE - RECALL SLICE
PX6 X6
NX6 X6
FX6 X6*X3
UX6,B4 X6
LX6 B4 CONVERTED RECALL CPU SLICE
LX1 -12
BX2 -X0*X1 CPU SLICE EXTENSION
IX7 X7+X2 UNEXTENDED SLICE + EXTENSION - RECALL SLICE
PX2 X2
NX2 X2
FX2 X2*X3
UX2,B4 X2
LX2 B4 CONVERTED CPU SLICE EXTENSION
LX6 -18
BX6 X6+X2
PX7 X7
NX7 X7
FX7 X7*X3
UX7,B4 X7
LX7 B4 CONVERTED (*US* + *SE* - *RS*)
LX6 36
BX6 X6+X7
SA6 A1+B1
ERRNZ CSAT-CSJT-1 WORDS MUST BE CONTIGUOUS
LX1 -12
BX6 -X0*X1 SYSTEM I/O CPU THRESHOLD
PX6 X6
NX6 X6
FX6 X6*X3
UX6,B4 X6
LX6 B4 CONVERTED SYSTEM I/O CPU THRESHOLD
SA1 A6+B1
ERRNZ CSBT-CSAT-1 WORDS MUST BE CONTIGOUS
MX0 42
BX1 X0*X1
BX6 X1+X6
SA6 A1
JP B3 RETURN
CCPA CON 15.625
CPT SPACE 4,15
** CPT - EXTENSION FOR CYBER 180.
*
* ENTRY (B3) = EXIT ADDRESS.
* (B6) = 200B IF ENTERED AT *CPT1* (*BNJ* CALL).
*
* EXIT TO /MONITOR/CPT1.
* (X0) = CPU TIME INCREMENT IN MACHINE UNITS.
* (MT+A0) = 0 IF RA+1 PROCESS AND NOT CPU SWITCH.
* (MT+A0) = -ACAD2 IF NOT RA+1 PROCESS OR IF CPU SWICH.
* (CL+CPBT+A0) RESET TO CURRENT CLOCK.
* (CL+CMST+A0) UPDATED.
*
* USES X - 0, 1, 2, 3, 5, 6, 7.
* A - 1, 2, 3, 6, 7.
* B - 4, 6.
CPT BSS 0 ENTRY
SB6 B0+ DO NOT SET CPU SWITCH FLAG
* ENTRY FROM /MONITOR/*BNJ*.
CPT1 SA1 CL+CMST+A0 GET MONITOR MODE PARAMETERS
SA2 CL+CPBT+A0 GET PROGRAM MODE BASE TIME
SA3 MT+A0 GET MONITOR MODE ACCUMULATED TIME
RC X6 READ CLOCK
UX1,B4 X1
SB6 B4+B6 SET CPU SWITCH STATUS
PX7 B6,X6 SET FUNCTION WITH STATUS AND NEW BASE TIME
SA6 A2 UPDATE PROGRAM MODE BASE TIME
SA7 A1 UPDATE MONITOR MODE PARAMETERS
SX7 B0+ SET TO CLEAR MONITOR MODE ACCUMULATOR
ZR B6,CPT3 IF RA+1 PROCESS AND NOT CPU SWITCH
ERRNZ CCPF CODE DEPENDS ON VALUE
TX7 -ACAD2 - (EXCHANGE JUMP TIME)
ZR B4,CPT3 IF RA+1 PROCESS
* COMPUTE MONITOR MODE TIME SINCE LAST BASE TIME.
*
* THE MICROSECOND CLOCK ON THE CYBER 170-865 AND 170-875 WILL
* WRAP APPROXIMATELY EVERY 1.2 HOURS, SINCE IT IS ONLY 32 BITS
* WIDE. ALL OTHER MODELS IN THE 170-800 SERIES HAVE 48 BIT
* COUNTERS, WHICH WILL WRAP ONLY ONCE EVERY 9 YEARS OR SO.
* SINCE THIS COUNTER IS RESET AT DEADSTART, IT IS SAFE TO
* ASSUME THAT IF A WRAP IS DETECTED, THE COUNTER IS ONLY 32
* BITS WIDE.
IX5 X6-X1 TIME SINCE MONITOR MODE BASE TIME
PL X3,CPT2 IF *MT* NOT PREVIOUSLY ADJUSTED BY *CPT*
SX3 B0
CPT2 IX3 X3+X5 ADD CURRENT AND ACCUMULATED TIME
IX3 X3-X7 ADD EXCHANGE JUMP TIME
PL X5,CPT3 IF NO OVERFLOW OF COUNTER
SX0 1
LX0 32
IX3 X3+X0
* COMPUTE PROGRAM MODE CPU TIME USED.
*
* IF MONITOR MODE WAS NOT ENTERED TO PROCESS AN RA+1 CALL OR IF
* A CPU SWITCH IS PENDING, THE MONITOR MODE ACCUMULATOR FOR THE
* CPU WILL BE RESET WITH A VALUE OF *-ACAD2*. SINCE EXIT FROM
* MONITOR MODE ADDS AN INCREMENT OF *ACAD* (TWICE THE VALUE OF
* *ACAD2*) TO THE ACCUMULATOR, THE RESULT IN THIS CASE WILL BE
* TO ACCOUNT ONLY FOR THE EXCHANGE JUMP BACK TO PROGRAM MODE.
* *CPT* WILL ALREADY HAVE ACCOUNTED FOR THE EXCHANGE JUMP INTO
* MONITOR MODE.
CPT3 IX6 X6-X2 COMPUTE TIME USED
SA7 MT+A0 RESET MONITOR MODE ACCUMULATOR
IX0 X6-X3 DEDUCT MONITOR MODE TIME
PL X0,/MONITOR/CPT1 IF NO UNDERFLOW
SX0 B0+
EQ /MONITOR/CPT1 ENTER MAIN *CPT* PROCESSOR
CSM SPACE 4,15
** CSM - CLEAR STORAGE THROUGH CPU (MONITOR MODE).
*
* ENTRY (X1) = WORD COUNT.
* (X2) = FWA.
* (B3) = RETURN ADDRESS.
*
* EXIT (X7) = 0.
*
* USES X - ALL.
*
* CALLS /MONITOR/RB3.
CSM MX6 -3 INITIALIZE
SX0 B1
BX5 -X6*X1 REMAINDER
BX7 X7-X7
AX1 3 10B WORD BLOCK COUNT
ZR X1,CSM2 IF .LT. 10B
IX3 X2+X0 FWA+1
SX6 B0+
SX4 2
CSM1 EWX6 X2
IX1 X1-X0 DECREMENT BLOCK COUNT
NO
EWX7 X3
IX2 X2+X4
IX3 X3+X4
EWX6 X2
EWX7 X3
IX2 X2+X4
IX3 X3+X4
EWX6 X2
EWX7 X3
IX2 X2+X4
IX3 X3+X4
EWX6 X2
EWX7 X3
IX2 X2+X4
IX3 X3+X4
NZ X1,CSM1 IF NOT COMPLETE
CSM2 ZR X5,/MONITOR/RB3 IF COMPLETE
IX5 X5-X0
EWX7 X2
IX2 X2+X0
EQ CSM2 CLEAR REMAINDER
MNR SPACE 4,10
** MNR - *CME* EXTENSION TO PROGRAM MODE EXIT PROCESSING.
MNR SA1 B2 EXCHANGE PACKAGE P-ADDRESS
SA2 B0
SA3 VFLR
MX0 24
BX4 X0*X1
NZ X2,MNR2 IF WORD ZERO IS NON-ZERO
BX6 X3
ZR X4,MNR2 IF P-ADDRESS IS ZERO
AX6 18
SX7 B0+ CLEAR RESPONSE
NZ X6,/MONITOR/MTRX IF REQUEST NOT COMPLETE
MNR1 SA7 X3 SET RESPONSE
SA6 A3 CLEAR REQUEST WORD
SA1 VFLXP+STSW SET NULL STATUS
MX0 -57
BX7 -X0*X1
SA7 A1+
EQ /MONITOR/BNJ1 BEGIN NEW JOB
MNR2 SX6 VFL RESET P-ADDRESS
SX7 B1 SET RESPONSE
BX1 -X0*X1 CLEAR P-ADDRESS
LX6 36
LX7 36
BX6 X6+X1
SA6 A1
BX6 X6-X6 CLEAR REQUEST WORD
EQ MNR1 EXIT
MSR SPACE 4,15
** MSR - MONITOR MODE STORAGE MOVE THROUGH REGISTERS
* FOR *CME* MAINFRAMES.
*
* ENTRY (X0) = ADDRESS TO MOVE FROM.
* (X1) = (X0) - ADDRESS TO MOVE TO.
* (B4) = WORD COUNT.
* (B6) = RETURN ADDRESS.
*
* CALLS PSM.
*
* USES X - 0, 1, 4, 6, 7.
* B - 4, 5.
MSR SB5 MSR1 *PSM* RETURN ADDRESS
EQ PSM PRESET STORAGE MOVE
* (X0) = ADDRESS TO MOVE FROM.
* (X1) = ADDRESS TO MOVE TO.
* (X4) = INCREMENT (1 OR -1).
* (B4) = BLOCK COUNT (WORD COUNT / 10B).
* (B6) = RETURN ADDRESS.
MSR1 ERX6 X0 LOAD UP FIRST DATA
IX0 X0+X4
ERX7 X0
IX0 X0+X4
SB4 B4-1 DECREMENT BLOCK COUNT
EWX6 X1
IX1 X1+X4
ERX6 X0
IX0 X0+X4
EWX7 X1
IX1 X1+X4
ERX7 X0
IX0 X0+X4
EWX6 X1
IX1 X1+X4
ERX6 X0
IX0 X0+X4
EWX7 X1
IX1 X1+X4
ERX7 X0
IX0 X0+X4
EWX6 X1
IX1 X1+X4
ERX6 X0
IX0 X0+X4
EWX7 X1
IX1 X1+X4
ERX7 X0
IX0 X0+X4
EWX6 X1
IX1 X1+X4
EWX7 X1
IX1 X1+X4
GT B4,B0,MSR1 IF MORE BLOCKS TO MOVE
JP B6 RETURN
PLF SPACE 4,10
** PLF - PROCESS LOCAL FNT.
PLF SA3 B7+FLSW GET RA AND NFL
MX0 -12
BX1 -X0*X5 EXTRACT NFL ADDRESS/PARAMETER
LX5 24
MX0 -3
BX2 -X0*X5 EXTRACT SUBFUNCTION
AX3 RSHF
LX5 59-41-24
MX0 -RMSK
BX4 -X0*X3
AX3 48-RSHF
LX4 6 RA
MX0 -18
ZR X3,HNG IF NO NFL
BX6 X4
LX3 6 NFL
SA6 RA
SB6 X2-TPLFL-1
PL B6,HNG IF ILLEGAL SUBFUNCTION
JP TPLF+TPLFL+1+B6 JUMP TO PROCESSOR
* EXIT TO PROCESSOR WITH -
*
* (X0) = 42/-0,18/0.
* (X1) = NFL ADDRESS/PARAMETER.
* (X3) = NFL SIZE.
* (X4) = RA.
* (X5) = *CREATE SPECIAL FILE* FLAG IN LEFT-MOST BIT.
* (X7) = 0.
* (RA) = RA.
TPLF BSS 0
LOC 0
+ IX2 X3-X1
EQ PLF14 (DLFS) - DELETE ENTRY
+ IX2 X3-X1
SX7 B1
EQ PLF14 (DLCS) - RETURN FILE COUNT
* EQ PLF1 (CRFS) - CREATE LOCAL FNT ENTRY
TPLFL BSS 0
LOC *O
* SET UP FOR FNT SEARCH.
PLF1 SA7 T2 CLEAR EMPTY ENTRY POINTER
SX2 X3-FNTN COMPUTE ADDRESS OF LAST ENTRY
SX6 LENF
PX2 X2
PX3 X6
NX3 X3
FX1 X2/X3
UX1 B6,X1
LX1 X1,B6
IX3 X6*X1
SA1 A5+B1
SX2 FNTN ALLOW USE OF SPECIAL FILE RESERVED ENTRY
NG X5,PLF2 IF SPECIAL FILE
SX2 X2+SRFE*LENF PREVENT USE OF RESERVED ENTRIES
PLF2 IX6 X4-X2
SA6 A7+B1 SAVE FWA OF LAST RESERVED ENTRY
SX3 X3+FNTN
IX7 X4-X3 ADDRESS OF LAST ENTRY
BX5 X0*X1 FILE NAME
SA7 A7-B1
EWX5 X7 SAVE FILE NAME MATCH
SX1 FNTN-LENF*2
SX2 FNTN-LENF
IX6 X4-X1
IX7 X4-X2
* SEARCH FOR MATCHING ENTRY.
PLF4 SX3 LENF*2 SEARCH INCREMENT
IX6 X6-X3
IX7 X7-X3
ERX1 X6
ERX2 X7
BX3 X1-X5
BX4 X2-X5
BX3 X0*X3
BX4 X0*X4
ZR X3,PLF7 IF FOUND
ZR X4,PLF6 IF FOUND
ZR X1,PLF8 IF EMPTY
PLF4.1 NZ X2,PLF4 IF NOT EMPTY
SA1 A6
IX1 X7-X1
PL X1,PLF4 IF USE OF RESERVED ENTRY NOT ALLOWED
SA7 T2 SAVE ADDRESS OF EMPTY ENTRY
PLF4.9 SX3 LENF*2
* SEARCH FOR MATCH (EMPTY ENTRY FOUND).
PLF5 IX6 X6-X3
IX7 X7-X3
ERX1 X6
ERX2 X7
BX1 X1-X5
BX2 X2-X5
BX1 X0*X1
BX2 X0*X2
ZR X1,PLF7 IF FOUND
NZ X2,PLF5 IF NOT FOUND
PLF6 BX6 X7
PLF7 SA4 T1
SX7 B0+ CLEAR LAST ENTRY
EWX7 X4
BX2 X6-X4
ZR X2,PLF10 IF LAST ENTRY
SA3 RA
IX3 X3-X6
LX3 36 BYTE 1 OF RESPONSE
SX7 B1 STATUS = FILE ALREADY EXISTS
BX7 X3+X7
EQ PPR1 EXIT
* EMPTY ENTRY FOUND.
PLF8 SA1 A6
IX1 X6-X1
PL X1,PLF4.1 IF USE OF RESERVED ENTRY NOT ALLOWED
SA6 T2 SAVE ADDRESS OF EMPTY ENTRY
EQ PLF4.9 CONTINUE SEARCH
* NO MATCH FOUND, CREATE ENTRY.
PLF10 SA4 T2 ADDRESS OF FIRST EMPTY ENTRY
SA1 RA UPDATE LOCAL FILE COUNT
SX2 LFCN
IX2 X1-X2
ERX6 X2
SX3 X6-MXLF+SRFE+2 CHECK MAXIMUM FILE COUNT
ZR X4,PLF11 IF NO FREE ENTRY
SX7 FNTN+SRFE*LENF
IX1 X1-X7
IX1 X4-X1
MX7 1
BX7 X7*X1
LX7 1
IX6 X6+X7 INCREMENT FILE COUNT IF NOT SPECIAL FILE
SX3 X6-MXLF+SRFE+1
PL X3,PLF11 IF FILE LIMIT EXCEEDED (MAXIMUM NFL)
EWX6 X2
SX7 LOFT*100B SET LOCAL FILE TYPE
BX7 X5+X7
EWX7 X4
R= X5,FSTL
SX7 4 FST COMPLETE/NOT BUSY
IX6 X5+X4 ADDRESS OF FST
EWX7 X6
SA1 RA
IX7 X1-X4 NFL ADDRESS
LX7 36
EQ PPR1 EXIT WITH RESPONSE
PLF11 SX7 B1+B1 STATUS = LOCAL FILE LIMIT
PL X3,PPR1 IF FILE LIMIT EXCEEDED (MAXIMUM NFL)
LX7 1 STATUS = NEED MORE NFL
EQ PPR1 EXIT
* DELETE FNT ENTRY.
PLF14 NG X2,HNG IF NFL ADDRESS OUT OF RANGE
IX2 X4-X1 ADDRESS OF FNT
ERX3 X2 READ FNT
SX6 X1-FNTN-SRFE*LENF-LENF
R= X1,FSTL
IX5 X2+X1 ADDRESS OF FST
ZR X3,HNG IF EMPTY
MX3 1
ERX0 X5 READ FST
NZ X7,PLF17 IF COUNTING FILES
BX3 -X6*X3
LX3 1
BX6 X6-X6 CLEAR FNT/FST
EWX6 X2
EWX6 X5
IX5 X5+X1
ERRNZ FSTL-1
ERRNZ LENF-3
EWX6 X5
SX6 LFCN DECREMENT FILE COUNT IF NOT SPECIAL FILE
IX6 X4-X6
ERX2 X6
IX1 X2-X3
NG X1,HNG IF NEGATIVE FILE COUNT
EWX1 X6 UPDATE *LFCN*
SA2 B7+EOCW CHECK EXECUTE-ONLY FILE
SA5 A5
MX1 12
LX5 -12
BX6 X5-X2
BX6 X1*X6
NZ X6,PPR1 IF NO MATCH
BX6 -X1*X2
SA6 A2 CLEAR EXECUTE ONLY FILE POINTER
EQ PPR1 RETURN
* COUNT FILES ON EQUIPMENT SPECIFIED IN FST.
PLF17 SA2 B7+FLSW FETCH NFL SIZE
MX7 12
BX2 X7*X2
SX6 FNTN
LX2 6+12 NFL
IX2 X2-X6
SX3 LENF COMPUTE ADDRESS OF LAST FNT SLOT
PX5 X3
PX2 X2
NX5 X5
FX1 X2/X5
UX1 B6,X1
LX1 X1,B6
IX6 X1*X3
MX7 59 INITIALIZE FILE COUNT
SX6 X6+FNTN-FSTL
SA4 RA FETCH REFERENCE ADDRESS
SX5 B1
IX6 X4-X6 ADDRESS OF LAST FST SLOT IN NFL
SX1 FNTN-FSTL-LENF
IX1 X4-X1 INITIALIZE NFL SCAN
EWX0 X6
PLF18 IX1 X1-X3
ERX4 X1 READ FST ENTRY
BX2 X4-X0
AX2 48
NZ X2,PLF18 IF NOT MATCHING EST ORDINAL
BX4 X1-X6
IX7 X7+X5 INCREMENT FILE COUNT
NZ X4,PLF18 IF NOT END OF NFL
LX7 12
EWX4 X6 CLEAR SEARCH OBJECTIVE
EQ PPR1 EXIT
PSM SPACE 4,20
** PSM - PRESET STORAGE MOVE.
*
* ENTRY (X0) = ADDRESS TO MOVE FROM.
* (X1) = (X0) - ADDRESS TO MOVE TO.
* (B4) = WORD COUNT.
* (B5) = RETURN ADDRESS.
* (B6) = RETURN ADDRESS FOR CALLING ROUTINE.
*
* EXIT (X0) = ADDRESS TO MOVE FROM.
* (X1) = ADDRESS TO MOVE TO.
* (X4) = INCREMENT (1 OR -1).
* (B4) = BLOCK COUNT (WORD COUNT / 10B).
* (B6) = RETURN ADDRESS FOR CALLING ROUTINE.
*
* USES X - 0, 1, 4, 6, 7.
* B - 4.
*
* CALLS RB6.
*
* THE ADDRESSES ARE ADJUSTED TO PREVENT OVERLAP, IF NECESSARY.
PSM SX4 B1+ INCREMENT
SX7 B4 WORD COUNT
MX6 -3
BX6 -X6*X7 REMAINDER
IX7 X0-X1 ADDRESS TO MOVE TO
PL X1,PSM1 IF DOWNWARD MOVE
SX1 B4+ WORD COUNT
IX0 X0+X1 FWA = LWA+1
IX7 X7+X1
IX0 X0-X4 FWA = LWA
IX7 X7-X4
BX6 -X6 COMPLEMENT REMAINDER
BX4 -X4 COMPLEMENT INCREMENT
PSM1 BX1 X7 FWA OF MOVE
SX7 B4 WORD COUNT
AX7 3 TRUNCATE WORD COUNT
SB4 X7 BLOCK COUNT (WORD COUNT / 10B)
PSM2 ZR X6,PSM3 IF NO REMAINDER
ERX7 X0 MOVE REMAINDER
IX0 X0+X4
EWX7 X1
IX1 X1+X4
IX6 X6-X4
EQ PSM2 LOOP FOR NEXT WORD
PSM3 ZR B4,RB6 IF MOVE COMPLETE
JP B5 RETURN
RTC SPACE 4,15
** RTC - UPDATE REAL-TIME CLOCK FROM CPU MICROSECOND CLOCK.
*
* READS THE CPU MICROSECOND CLOCK AND UPDATES THE REAL TIME
* CLOCK (RTCL) WHEN PROCESSING *MTR* REQUESTS.
*
* ENTRY (X5) = CPU MICROSECOND CLOCK.
*
* EXIT (RTCL) = UPDATED TO NEAREST SECOND AND MILLISECOND.
* (X5) = CPU MICROSECOND CLOCK AT ENTRY.
*
* USES X - 1, 2, 3, 4, 5, 6, 7.
* A - 1, 2, 3, 5, 6, 7.
* B - 4.
RTC SA2 RTCA CPU CLOCK VALUE AT LAST WHOLE MILLISECOND
SX3 B0+
IX1 X5-X2 MICROSECONDS SINCE LAST WHOLE MILLISECOND
PL X1,RTC1 IF NO OVERFLOW
* SINCE THE 48 BIT CPU CLOCK ON A CYBER 180 WILL OVERFLOW ONLY
* AFTER APPROXIMATELY 9 YEARS, IT IS SAFE TO ASSUME THAT IF AN
* OVERFLOW HAS OCCURRED IT IS ON A CYBER 170-865/875, WHICH
* USES A 32 BIT CPU CLOCK WHICH OVERFLOWS EVERY 1.2 HOURS.
SX3 B1+ CORRECT FOR OVERFLOW
LX3 32
IX1 X1+X3
RTC1 SX6 1000 ONE MILLISECOND
IX7 X1-X6
PX1 X1
NG X7,/MONITOR/PMN1 IF .LT. ONE MILLISECOND
BX7 X5
SA7 RTCE SAVE ENTRY CLOCK VALUE
PX7 X6
NX7 X7
FX7 X1/X7 CALCULATE MILLISECONDS
UX7 X7,B4
LX7 B4 INTEGER MILLISECONDS
IX6 X6*X7
IX6 X2+X6 MICROSECONDS AT NEW WHOLE MILLISECOND
BX6 -X3*X6 CLEAR POSSIBLE OVERFLOW (CYBER 865/875)
SA6 A2
MX2 24
SA3 RTCC *RTCL* AT LAST *CPUMTR* UPDATE
BX1 -X2*X3 ISOLATE OLD *RTCL* COMPONENTS
BX3 X2*X3
IX7 X1+X7 CURRENT MILLISECONDS
SA1 RTCB MICROSECONDS AT LAST WHOLE SECOND
LX3 24
BX7 -X2*X7 NEW *RTCL* MILLISECOND COMPONENT
BX2 X2-X2
SX4 B1
IX1 X5-X1 MICROSECONDS SINCE LAST WHOLE SECOND
SB4 10-1
PL X1,RTC2 IF NO OVERFLOW
SX2 B1 CORRECT FOR OVERFLOW
LX2 32
IX1 X1+X2
IX5 X5+X2
RTC2 SX6 1000000/100B
LX6 6
IX6 X1-X6
NG X6,RTC3 IF LESS THAN ONE SECOND
NG B4,RTC3 IF MORE THAN A 10 SECOND UPDATE
BX1 X6
SB4 B4-B1
IX3 X3+X4 INCREMENT SECONDS
NZ X6,RTC2 IF NOT WHOLE SECONDS
RTC3 IX6 X5-X1 MICROSECONDS AT NEW WHOLE SECOND
MX1 -24
BX6 -X2*X6 CLEAR POSSIBLE OVERFLOW (CYBER 865/875)
SA6 A1
BX3 -X1*X3 NEW *RTCL* SECONDS COMPONENT
LX3 36
BX7 X3+X7 UPDATE REAL TIME CLOCK
SA7 A3+ SAVE NEW *RTCL* VALUE
SA7 RTCL
PL B4,RTC4 IF NOT AN EXCESSIVE UPDATE
SA1 RTCD COPY OPERATOR MESSAGE
BX6 X1
SA1 A1+B1
TA6 MS2W,SCA
BX6 X1
SA1 A1+B1
SA6 A6+B1
BX6 X1
SA6 A6+B1
RTC4 SA5 RTCE RESTORE ENTRY CLOCK VALUE
EQ /MONITOR/PMN1 EXIT TO PROCESS *MTR* REQUEST
RTCA CON 0 MICROSECONDS AT LAST WHOLE MILLISECOND
RTCB CON 0 MICROSECONDS AT LAST WHOLE SECOND
RTCC CON 377777000000000000B *RTCL* INITIAL AND PREVIOUS
RTCD DATA C*CLOCK UPDATE WARNING.*
RTCE CON 0 CPU CLOCK AT ENTRY
SMI SPACE 4,15
** SMI - PROGRAM MODE STORAGE MOVE USING
* CM TO CM COPY INSTRUCTION.
*
* ENTRY (X0) = ADDRESS FROM MOVE TO.
* (X1) = (X0) - ADDRESS TO MOVE TO.
* (B4) = WORD COUNT OF MOVE.
* (B6) = RETURN ADDRESS.
*
* USES X - 0, 1, 2, 3, 4, 6, 7.
* B - 4, 5.
*
* CALLS RB6.
SMI SB5 400B MAXIMUM WORD COUNT / TRANSFER
SX7 B4+ WORD COUNT
GE B4,B5,SMI1 IF WORD COUNT .GE. TRANSFER SIZE
SB5 B4+ SET TRANSFER SIZE TO WORD COUNT
SMI1 SX4 B5 WORD COUNT / TRANSFER
BX2 X0 PRESET FWA OF MOVE
PL X1,SMI3 IF DOWNWARD MOVE
IX6 X4+X1
NG X6,SMI2 IF DIFFERENCE BIG ENOUGH
BX4 -X1 USE DIFFERENCE AS WORD COUNT
SMI2 IX6 X7+X0 LWA+1 OF BLOCK TO BE MOVED
IX2 X6-X4 FWA OF MOVE = LWA+1 - INCREMENT
EQ SMI4 DETERMINE BLOCK COUNT
SMI3 IX6 X4-X1
NG X6,SMI4 IF DIFFERENCE BIG ENOUGH
BX4 X1 USE DIFFERENCE AS WORD COUNT
* DETERMINE BLOCK COUNT.
SMI4 PX0 X4 WORD COUNT / TRANSFER
PX6 X7 WORD COUNT
NX0 X0
FX0 X6/X0
UX0,B4 X0
LX6 X0,B4
IX0 X6*X4 BLOCK COUNT
IX3 X7-X0 REMAINDER
* SET UP FOR MOVE.
IX0 X2-X1 ADDRESS TO MOVE TO
LX2 30
BX0 X0+X2 INSERT ADDRESS TO MOVE FROM
SB5 X4 WORD COUNT / TRANSFER
PL X1,SMI5 IF DOWNWARD MOVE
BX4 -X4 COMPLEMENT INCREMENT
SMI5 MX2 -30 BUILD INCREMENT WORD
BX7 -X2*X4
BX4 -X2*X4
LX7 30
BX4 X7+X4
SB4 X6+ BLOCK COUNT
* MOVE STORAGE (MAIN LOOP).
SMI6 WE B5 MOVE STORAGE
+ SB4 B4-B1 DECREMENT BLOCK COUNT
IX0 X0+X4 INCREMENT/DECREMENT ADDRESSES
GT B4,B0,SMI6 IF NOT COMPLETE
ZR X3,RB6 IF NO REMAINDER
* MOVE REMAINDER.
SB5 X3+ REMAINING STORAGE LENGTH
PL X4,SMI7 IF DOWNWARD MOVE
IX0 X0-X4 RESET LAST INCREMENT/DECREMENT
IX0 X0-X3 DECREMENT REMAINING LENGTH
LX3 30
IX0 X0-X3
SMI7 WE B5 MOVE REMAINDER
+ JP B6 RETURN
VLM SPACE 4,10
** VLM - VERIFY FIELD LENGTH STARTUP PROCESSOR.
*
* EXIT TO */MONITOR/RCC1*.
* (VFLR) = 24/0, 18/ CPA, 18/ PP OR
* TO */MONITOR/PPR1*, IF *VLFM* IN PROGRESS.
*
* USES X - 1, 4, 6, 7.
* A - 1, 6.
* B - 3, 6.
VLM LX1 7-36 GET CONTROL POINT
SX4 7600B
BX6 X4*X1
SA1 VFLR VFL REQUEST WORD
SX7 2 PRESET RESPONSE
NZ X6,VLM1 IF CONTROL POINT SPECIFIED
SX6 B7+
VLM1 SX4 A5+ OUTPUT REGISTER ADDRESS
LX6 18
LX7 36
SB6 VFLXP EXCHANGE PACKAGE ADDRESS
SB3 /MONITOR/MTRX *RCC* RETURN ADDRESS
BX6 X6+X4 ASSEMBLE REQUEST
NZ X1,PPR1 IF *VFLM* ALREADY IN PROGRESS
SA6 A1 SET REQUEST
EQ /MONITOR/RCC RECALL CPU
VFLXP SPACE 4,10
** VFLXP - FIELD LENGTH VERIFICATION EXCHANGE PACKAGE.
*
* THIS EXCHANGE PACKAGE IS USED TO VERIFY THE FIELD LENGTH
* OF A PROGRAM AFTER A MEMORY PARITY ERROR HAS BEEN DETECTED.
* IT MUST BE SEPARATE FROM THE REST OF THE SYSTEM BECAUSE IT
* MAY ABORT DUE TO A HARD DOUBLE-BIT ERROR IN THE FIELD LENGTH
* IN QUESTION.
VFLXP EXP P=/CME/VFL,FL=(,MCM),FLX=(,MXM),A5=VFLR,B1=1,MA=VFLXP,E
,M=(,CXPFE)
* STSW.
VFD 3/ZCPS INITIAL CPU STATUS
VFD 57/0
* CWQW.
VFD 2/1
VFD 7/MPRS CPU PRIORITY
VFD 1/0
VFD 1/0 CPU SLICE ACTIVE
VFD 1/0 RECALL FLAG
VFD 1/1 EXTENDED CPU SLICE INCOMPLETE
VFD 2/0
VFD 9/0 SERVICE CYCLE
VFD 9/SSSC*JCBE SERVICE PARAMETERS INDEX
VFD 1/0 *MTR* BYPASS FLAG
VFD 2/0 NO CPU SELECTION
VFD 3/0
VFD 3/FVXT FL VERIFICATION EXCHANGE PACKAGE TYPE
VFD 18/0 *WQ* LINKAGE
* CSAW.
VFD 60/0
* *CTMW*.
VFD 60/0
VFL SPACE 4,10
** VFL - VERIFY FIELD LENGTH.
*
* ENTRY (A5) = VFLR.
*
* CALLS CSM.
VFLX XJ RETURN
* CLEAR CM FL.
VFL SA5 A5 GET REQUEST
AX5 18 SHIFT TO CONTROL POINT ADDRESS
SA2 X5+1 RA
SA1 X5+2 FL
AX2 36 FWA TO CLEAR
AX1 36 WORD COUNT
SB3 VFL1 *CSM* RETURN ADDRESS
EQ CSM CLEAR STORAGE
* CHECK CM FL.
VFL1 SA5 A5 GET REQUEST
AX5 18
SA3 X5+FLSW GET NEGATIVE FL LENGTH
SA2 X5+1 RA
SA1 X5+2 FL
SX4 B1 SET INCREMENT
AX3 48
AX2 36 FWA
AX1 36 WORD COUNT
LX3 6 NEGATIVE FL OFFSET
IX2 X2-X3 START FWA AT END OF NFL
IX1 X1+X3 ADD NFL SIZE TO WORD COUNT
IX1 X1-X4 PRE-DECREMENT WORD COUNT
VFL2 ERX3 X2
NO
IX1 X1-X4 DECREMENT WORD COUNT
IX2 X2+X4 INCREMENT ADDRESS
PL X1,VFL2 IF NOT COMPLETE
TNO /CME/VFL5,XUEM (865/875 AND USER EM IN EXTERNAL EM)
* CLEAR UEM FL.
SA5 A5 GET REQUEST
AX5 18 SHIFT TO CONTROL POINT ADDRESS
SA2 X5+4 RAE
SA1 X5+5 FLE
AX2 36 FWA TO CLEAR
AX1 36 WORD COUNT
TLX2 (6,ESM170,0)
TLX1 (6,ESM170,0)
ZR X1,VFL5 IF FLE = 0
BX7 X7-X7
SX6 B1+
VFL2.1 WX7 X2 CLEAR USER EM
IX1 X1-X6
IX2 X2+X6
NZ X1,VFL2.1 IF NOT END OF USER EM
* CHECK UEM FL.
VFL3 SA5 A5 GET REQUEST
AX5 18
SA2 X5+4 RAE
SA1 X5+5 FLE
SX4 B1 SET INCREMENT
AX2 36 FWA
AX1 36 WORD COUNT
TLX2 (6,ESM170,0)
TLX1 (6,ESM170,0)
IX1 X1-X4 PRE-DECREMENT WORD COUNT
VFL4 RX3 X2
NO
IX1 X1-X4 DECREMENT WORD COUNT
IX2 X2+X4 INCREMENT ADDRESS
PL X1,VFL4 IF NOT COMPLETE
* SET RESPONSE.
VFL5 SA5 A5 GET REQUEST
SX6 X5 EXTRACT PP OUTPUT REGISTER ADDRESS
SA6 A5
EQ VFLX RETURN
VFLR VFD 24/0
VFD 18/0 CONTROL POINT ADDRESS
VFD 18/0 PP OUTPUT REGISTER ADDRESS
XJ2 SPACE 4,10
** XJ2 - ACCUMULATE ACCOUNTING ADJUSTMENTS.
*
* EXIT TO */MONITOR/XJ1.1*.
*
* USES X - 1, 2, 4, 6, 7.
* A - 1, 2, 6, 7.
* B - 6.
XJ2 TNO /NVE/XJ1,NVE
XJ3 SA1 CL+CMST+A0 MONITOR MODE STATUS
SA2 MT+A0 MONITOR MODE TIME ACCUMULATOR
TX7 ACAD EXCHANGE JUMP OVERHEAD FACTOR
SX6 B0 CLEAR BASE TIME TO FLAG MONITOR MODE EXIT
UX1,B6 X1 EXTRACT MONITOR MODE BASE TIME
PX6 B6,X6
ZR B6,XJ5 IF NOT TO ACCUMULATE MONITOR MODE TIME
RC X4
IX7 X2+X7 ADD EXCHANGE FACTOR
IX5 X4-X1 MONITOR MODE TIME INCREMENT
PL X5,XJ4 IF NO OVERFLOW
* NOTE - THE MICROSECOND CLOCK ON THE CYBER 170-865 AND 170-875
* WILL WRAP APPROXIMATELY EVERY 1.2 HOURS, SINCE IT IS ONLY 32
* BITS WIDE. ALL OTHER MODELS IN THE 170-800 SERIES HAVE 48
* BIT COUNTERS, WHICH WILL WRAP ONLY ONCE EVERY 9 YEARS OR SO.
* SINCE THIS COUNTER IS RESET AT DEADSTART, IT IS SAFE TO
* ASSUME THAT IF A WRAP IS DETECTED, THE COUNTER IS ONLY 32
* BITS WIDE.
SX4 1
LX4 32
IX5 X5+X4
XJ4 IX7 X7+X5
SA7 MT+A0 UPDATE MONITOR MODE TIME
XJ5 SA6 A1 UPDATE MONITOR MODE STATUS
EQ /MONITOR/XJ1.1 EXCHANGE TO PROGRAM
ENDBLK
BLOCK 0CME,(NO CENTRAL MEMORY EXTENSION.)
SPACE 4,10
HNG EQU /MONITOR/HNG
PPR1 EQU /MONITOR/PPR1
T1 EQU /MONITOR/T1
T2 EQU /MONITOR/T2
T3 EQU /MONITOR/T3
RA EQU /MONITOR/RA
RA1 EQU /MONITOR/RA1
APQ SPACE 4,10
** APQ - CHECK FOR *1LT* ASSIGNMENT.
*
* ENTRY (X6) = REQUEST.
*
* EXIT (X2) = PP AVAILABILITY MASK.
* (APQC) = NEW PP ALLOCATION MASK.
*
* USES X - 1, 2, 3, 4, 7.
* A - 1, 7.
* B - 6.
APQ9 SX3 3R1LT
MX1 18
LX3 -18
BX3 X3-X6
BX1 X1*X3
NZ X1,/MONITOR/APQ1.0 IF NOT *1LT*
SA1 APQD GET ASSIGNMENT MASK
MX3 10
TX4 A5-1,-FP
LX3 -12
LX4 -3
SB6 X4-12B
PL B6,APQ10 IF SECOND PP CHASSIS
SB6 X4+
APQ10 AX4 B6,X1 ADJUST PP MASK
LX1 B6,X1
BX4 X3*X4 FIRST PP CHASSIS SELECTION
LX3 -10
BX1 X3*X1 SECOND PP CHASSIS SELECTION
BX7 X4+X1
BX2 X7*X2 ALLOWABLE PP SELECTION
SA7 /MONITOR/APQC SET SELECTION MASK
EQ /MONITOR/APQ1.0 ASSIGN THE PP
APQD VFD 45/-040120060050020B,15/0
CSM SPACE 4,15
** CSM - CLEAR STORAGE THROUGH CPU (MONITOR MODE).
*
* ENTRY (X1) = WORD COUNT.
* (X2) = FWA.
* (B3) = RETURN ADDRESS.
*
* EXIT (X7) = 0.
*
* USES X - 0, 1, 3, 5, 6, 7.
* A - 3, 6, 7.
*
* CALLS /MONITOR/RB3.
CSM SA3 X2-1 GET FWA - 1
BX7 X3
SX0 B1
SA7 A3 INITIALIZE A7
MX3 -3
BX5 -X3*X1 EXTRACT REMAINDER
SX6 B0
AX1 3 SET BLOCK COUNT
BX7 X7-X7
ZR X1,CSM3 IF .LT. 8 WORDS TO CLEAR
* CLEAR 8 WORD BLOCKS.
CSM1 SA6 A7+B1
IX1 X1-X0 DECREMENT BLOCK COUNT
SA7 A6+1
CSM2 SA6 A7+B1
SA7 A6+B1
SA6 A7+B1
SA7 A6+B1
SA6 A7+B1
SA7 A6+B1
NZ X1,CSM1 IF NOT COMPLETE
CSM3 ZR X5,/MONITOR/RB3 IF COMPLETE
IX5 X5-X0
SA7 A7+B1 CLEAR REMAINDER
NZ X5,CSM3 IF NOT COMPLETE
JP B3 RETURN
PLF SPACE 4,10
** PLF - PROCESS LOCAL FNT.
PLF SA3 B7+FLSW GET RA AND NFL SIZE
MX0 -12
AX3 12
BX4 -X0*X3
AX3 36
ZR X3,HNG IF NO NFL
LX4 6
BX6 X6-X6
LX3 6 NFL
SB5 X4 RA
SA1 B5-FNTN+LENF GET FIRST FNT ENTRY
BX1 -X0*X5 EXTRACT NFL ADDRESS
LX5 24
MX0 -3
BX2 -X0*X5 EXTRACT SUBFUNCTION
MX0 -18
LX5 59-41-24
SB6 X2-TPLFL-1
PL B6,HNG IF ILLEGAL SUBFUNCTION
JP TPLF+TPLFL+1+B6 JUMP TO PROCESSOR
* EXIT TO FUNCTION PROCESSOR WITH -
*
* (X0) = 42/-0,18/0.
* (X1) = NFL ADDRESS/PARAMETER.
* (X3) = NFL SIZE.
* (X5) = REQUEST WORD LEFT-SHIFTED 59-35.
* (A1) = ADDRESS OF FIRST FNT ENTRY.
* (B5) = RA.
TPLF BSS 0
LOC 0
+ IX4 X3-X1 (DLFS) - DELETE ENTRY
EQ PLF14
+ SX7 B1 (DLCS) - RETURN FILE COUNT
IX4 X3-X1
EQ PLF14
* EQ PLF1 (CRFS) - CREATE LOCAL FNT ENTRY
TPLFL BSS 0
LOC *O
* SET UP FOR FNT SEARCH.
PLF1 SA4 A5+B1 FILE NAME
BX6 X6-X6
SX2 X3-FNTN COMPUTE ADDRESS OF LAST FNT ENTRY
SX3 LENF
PX2 X2
PX3 X3
NX3 X3
FX1 X2/X3
BX7 X0*X4
UX1 B6,X1
SA2 A1-LENF
SX3 LENF
LX1 X1,B6
IX3 X1*X3
SB6 X3+FNTN
SB3 LENF*2 SEARCH INCREMENT
SB6 B5-B6 ADDRESS OF LAST ENTRY
SA7 B6
SB4 B5-FNTN ALLOW USE OF SPECIAL FILE RESERVED ENTRY
NG X5,PLF4 IF SPECIAL FILE
SB4 B4-SRFE*LENF PREVENT USE OF RESERVED ENTRIES
* SEARCH FOR MATCH OR EMPTY ENTRY.
*
* NOTE - THE SEARCH METHOD USED THROUGHOUT THIS PROCESSOR
* IS TO STORE THE TARGET ENTRY AT THE END OF THE
* TABLE, THUS GUARANTEEING A MATCH. ONCE IT IS
* FOUND, THE LAST ENTRY IS CLEARED, AND THE ADDRESS
* RETURNED IS CHECKED AGAINST THE LAST ENTRY. IF
* THEY MATCH, THE SEARCH IS DEEMED UNSUCCESSFUL.
PLF4 SA1 A1-B3
SA2 A2-B3
BX3 X4-X1
BX7 X4-X2
BX3 X0*X3
BX7 X0*X7
ZR X3,PLF7 IF FOUND
ZR X7,PLF6 IF FOUND
ZR X1,PLF8 IF EMPTY
PLF4.1 NZ X2,PLF4 IF NOT EMPTY
SX7 A2-B4
PL X7,PLF4 IF USE OF RESERVED ENTRY NOT ALLOWED
SX6 A2
BX6 -X0*X6
* EMPTY ENTRY FOUND, SEARCH FOR MATCH.
PLF5 SA1 A1-B3
SA2 A2-B3
BX3 X4-X1
BX7 X4-X2
BX3 X3*X0
BX7 X7*X0
ZR X3,PLF7 IF FOUND
NZ X7,PLF5 IF NOT FOUND
PLF6 SA1 A2+
PLF7 BX7 X7-X7 CLEAR LAST ENTRY
SX3 A1-B6
SA7 B6+
ZR X3,PLF10 IF LAST ENTRY
SB4 A1
SX3 B5-B4 NFL ADDRESS
LX3 36 BYTE 1 OF RESPONSE
SX7 B1 STATUS = FILE ALREADY EXISTS
BX7 X7+X3
EQ PPR1 EXIT
* EMPTY ENTRY FOUND.
PLF8 SX7 A1-B4
PL X7,PLF4.1 IF USE OF RESERVED ENTRY NOT ALLOWED
SX6 A1 SET ADDRESS OF FREE ENTRY
BX6 -X0*X6
EQ PLF5 SEARCH FOR MATCH
* NO MATCH FOUND, CREATE ENTRY.
PLF10 SA1 B5-LFCN INCREMENT LOCAL FILE COUNT
SX2 X1-MXLF+SRFE+2 CHECK MAXIMUM FILE COUNT
ZR X6,PLF11 IF NO FREE ENTRY FOUND
SB4 X6
SX3 B5-B4
SX3 X3-FNTN-SRFE*LENF-LENF
MX7 1
BX7 -X3*X7
LX7 1
IX7 X1+X7 INCREMENT FILE COUNT IF NOT SPECIAL FILE
SX2 X7-MXLF+SRFE+1
PL X2,PLF11 IF FILE LIMIT EXCEEDED (MAXIMUM NFL)
SA7 A1
BX4 X0*X4
SX7 LOFT*100B SET LOCAL FILE TYPE
BX7 X7+X4
SA7 X6
SX7 4 SET FST - OPERATION COMPLETE, NOT BUSY
SA7 A7+FSTL
SX7 B5-B4 NFL ADDRESS OF FNT ENTRY
LX7 36
EQ PPR1 EXIT WITH RESPONSE
PLF11 SX7 B1+B1 STATUS = LOCAL FILE LIMIT
PL X2,PPR1 IF FILE LIMIT EXCEEDED (MAXIMUM NFL)
LX7 1 STATUS = NEED MORE NFL
EQ PPR1 EXIT
* DELETE FNT ENTRY.
PLF14 NG X4,HNG IF NFL ADDRESS OUT OF RANGE
SB3 X1
SA2 B5-B3 CLEAR FNT ENTRY
ZR X2,HNG IF EMPTY FNT SLOT
MX5 12
SA4 A2+B1 READ *FST* ENTRY (FOR *DLCS* FILE COUNT)
NZ X7,PLF17 IF COUNTING FILES
ERRNZ FSTL-1
SA6 A2
SA6 A2+B1
SA6 A6+B1
ERRNZ LENF-3
SX4 X1-FNTN-SRFE*LENF-LENF
MX6 1
SA2 B5-LFCN DECREMENT FILE COUNT IF NOT SPECIAL FILE
BX6 -X4*X6
LX6 1
IX6 X2-X6
NG X6,HNG IF NEGATIVE FILE COUNT
SA6 A2
SA2 B7+EOCW CHECK FOR EXECUTE-ONLY FILE
BX6 -X5*X2
AX2 48 POSITION FNT ADDRESS
BX1 X2-X1
NZ X1,PPR1 IF NOT DELETING EXECUTE-ONLY FNT
SA6 A2
EQ PPR1 RETURN
* COUNT FILES ON EQUIPMENT SPECIFIED IN FST.
PLF17 SX6 LENF
SX2 X3-FNTN COMPUTE ADDRESS OF LAST FNT SLOT
PX3 X6
PX2 X2
NX3 X3
FX1 X2/X3
SX5 B1
UX1 B6,X1
LX1 X1,B6
IX3 X1*X6
SA1 B5-FNTN+LENF+FSTL FIRST FNT ENTRY
SB6 X3+FNTN-FSTL
BX6 X4 STORE SEARCH OBJECTIVE AT END OF NFL
SB6 B5-B6
MX7 59 INITIALIZE FILE COUNT
SA6 B6
PLF18 SA1 A1-LENF READ FST ENTRY
BX2 X4-X1
AX2 48
NZ X2,PLF18 IF NOT MATCHING EST ORDINAL
SX6 A1-B6
IX7 X7+X5 INCREMENT FILE COUNT
NZ X6,PLF18 IF NOT END OF NFL
LX7 12
SA6 B6 CLEAR SEARCH OBJECTIVE
EQ PPR1 EXIT
ENDBLK
BLOCK CMUMTR,(1 CPU MONITOR MODE CMU MOVE.),MONITOR
MSM SPACE 4
** MSM - MONITOR MODE CMU MOVE.
*
* ENTRY (X0) = ADDRESS TO MOVE FROM.
* (B4) = WORD COUNT OF MOVE.
* (X1) = (X0) - ADDRESS TO MOVE TO.
* (B6) = EXIT ADDRESS.
*
* USES X - 0, 1, 4, 6, 7. (*MSM* AND *MSR* REGISTER USAGE)
* B - 4, 5.
* A - 1, 4, 6, 7.
MSM SB5 X1 MOVE DIFFERENCE
SA1 X0 FWA TO MOVE FROM
SX1 B4 SET CHARACTER COUNT OF BLOCK
SX0 B4+B4
LX1 3
MX6 -4
IX1 X1+X0
BX0 -X6*X1 LL
BX1 X6*X1 LU
LX0 30-4
SX6 A1
LX1 48-4
BX1 X1+X0
MX7 -18
SX0 A1-B5 SET ADDRESS OF MOVE
BX6 -X7*X6
BX0 -X7*X0
LX6 30
BX0 X1+X0 MERGE CHARACTER COUNT
BX6 X0+X6
SA6 MSMA STORE DESRCIPTOR WORD
IM MSMA
JP B6 RETURN
MSMA CON 0 INDIRECT MOVE DESCRIPTOR WORD
ENDBLK
BLOCK 0CMUMTR,(REGISTER MOVE.),MONITOR
MSM SPACE 4
** MSR - MONITOR MODE MOVE STORAGE WITH REGISTERS.
*
* ENTRY (X0) = ADDRESS TO MOVE FROM.
* (B4) = WORD COUNT OF MOVE.
* (X1) = (X0) - ADDRESS TO MOVE TO.
* (B6) = EXIT ADDRESS.
*
* USES X - 0, 1, 4, 6, 7. (*MSM* AND *MSR* REGISTER USAGE)
* B - 4, 5.
* A - 1, 4, 6, 7.
MSR SB5 X1+ MOVE DIFFERENCE
SA1 X0+ FWA TO MOVE FROM
SB4 B4-10B
NG B4,MSR2 IF LESS THAN 10B WORDS TO MOVE
* REGISTER MOVE LOOP.
MSR1 BX6 X1
SB4 B4-10B DECREMENT WORD COUNT
SA4 A1+B1
SA6 A1-B5
LX7 X4
SA1 A4+B1
SA7 A4-B5
BX6 X1
SA4 A1+B1
SA6 A1-B5
LX7 X4
SA1 A4+B1
SA7 A4-B5
BX6 X1
SA4 A1+B1
SA6 A1-B5
LX7 X4
SA1 A4+B1
SA7 A4-B5
BX6 X1
SA4 A1+B1
SA6 A1-B5
LX7 X4
SA1 A4+B1
SA7 A4-B5
PL B4,MSR1 IF MORE 10 WORD BLOCKS TO MOVE
MSR2 SB4 B4+10B
EQ MSR4
MSR3 SB4 B4-B1
BX6 X1
SA6 A1-B5
SA1 A1+B1
MSR4 GT B4,B0,MSR3 IF MORE WORDS TO MOVE
JP B6 RETURN
ENDBLK
BLOCK CPP,(CONCURRENT PP REQUEST CODE.)
CPR SPACE 4,10
** CPR - *CPRM* FUNCTION PROCESSOR.
*
* ENTRY (X1) = CALLING PARAMETERS.
* (X7) = 0.
*
* EXIT (X7) = REASON CODE AND STATUS.
CPR BSS 0 ENTRY
AX1 36 GET SUBFUNCTION
SB5 /MONITOR/PPRX ERROR EXIT ADDRESS
MX6 -12
SB4 X1
SA1 CPPL
BX6 -X6*X5 GET PARAMETER
GT B4,B1,CPR8 IF NOT ASSIGN OPERATION
SB6 X6-2 DETERMINE IF REQUEST IS FOR A LEGAL BARREL
SX7 5 RC = *INCORRECT CIO BARREL NUMBER*
NG B6,CPR2 IF INCORRECT BARREL PARAMETER
GT B6,B1,CPR2 IF INCORRECT BARREL PARAMETER
SB3 5 SET CPP-S PER BARREL
ZR B6,CPR1 IF BARREL ZERO REQUESTED
SX2 X1
AX2 12
SX2 X2-6
NG X2,CPR2 IF BARREL 1 NOT PRESENT
SB6 50B SET TO SCAN BARREL 1
* SUBFUNCTION 0 (ASSIGN CPP).
CPR1 TA3 B6,FPC
ZR X3,CPR3 IF FREE CPP FOUND
SB3 B3-1
SB6 B6+10B
NZ B3,CPR1 IF MORE CPP-S TO CHECK
SX7 3 RC = *CPP NOT AVAILABLE*
CPR2 LX7 24-0 POSITION ERROR CODES
EQ /MONITOR/MTRC STORE OUTPUT REGISTER AND EXIT MONITOR
CPR3 EQ B4,B1,CPR5 IF ASSIGN AND LOAD CPP (SUBFUNCTION 1)
SA2 CPRA CHECK IF CALL FOR NOS/VE PP
SA4 A5+B1
BX2 X2-X4
MX0 18
BX2 X0*X2
SB3 B7+
SB4 CPR4 RETURN ADDRESS
NZ X2,WPR IF CALL NOT FOR NOS/VE PP
TB3 SCA SYSTEM CONTROL POINT NUMBER
EQ WPR WRITE PARAMETER WORDS
CPR4 SX7 A3
LX7 36-0 SET ST=INPUT REGISTER AND RC=0
EQ /MONITOR/MTRC STORE (OR) AND EXIT MONITOR MODE
* ASSIGN AND LOAD CPP (SUBFUNCTION 1).
CPR5 SB3 B7 CONTROL POINT ADDRESS
SB4 CPR6 RETURN ADDRESS
TB7 SCA SET CONTROL POINT FOR *1MA* CALL
EQ WPR WRITE PARAMETER WORDS
CPR6 SA1 A5+B1
BX6 X1
SB6 CPR7+400000B RETURN ADDRESS AND CPP FLAG
EQ /MONITOR/SPL SEARCH PERIPHERAL LIBRARY
CPR7 BX6 X7
SX2 B1
SX7 7 RC = *LIBRARY LOCKED*
NG X1,CPR9 IF LIBRARY LOCKED
LX2 48
SX7 X7+B1 RC = *PROGRAM NOT FOUND*
NZ X5,CPR9 IF PP PROGRAM NOT FOUND
BX7 X6+X2
SA7 A3+B1 SET CPP OUTPUT REGISTER
SX7 A3 SET ST = CPP INPUT REGISTER, RC = 0
LX7 36-0
SA7 A5
SA1 CPRB SET UP *1MA* CALL
SX0 A3 *IR* OF CPP
SX2 A5 *OR* OF CALLING PP
LX2 12-0
BX2 X0+X2
BX6 X1+X2 PP CALL FORMAT
SB4 /MONITOR/LA1MA SET INDEX INTO *TAPQ* TABLE
SB3 /MONITOR/MTRX EXIT ADDRESS
EQ /MONITOR/APQ ASSIGN PP
* SUBFUNCTION 2 (RETURN CPP).
CPR8 SB4 B4-2 CHECK SUBFUNCTION
GT B4,B0,/MONITOR/HNG1 IF INCORRECT SUBFUNCTION
SX0 X1 VALIDATE THAT CPP EXISTS
AX0 12
SX7 4 RC = *INCORRECT CPP NUMBER*
IX1 X0-X6
LX6 3 MULTIPLY BY 10B
NG X1,CPR2 IF CPP DOES NOT EXIST
TA3 X6,FPC
MX0 18
BX3 X0*X3
SA1 CPRA
TB3 SCA SYSTEM CONTROL POINT NUMBER
SX7 10001B RC = *CPP NOT ASSIGNED*
BX0 X1-X3
NZ X0,CPR2 IF CPP IS NOT ASSIGNED TO *VER*
BX7 X7-X7
CPR9 SA2 B3+STSW
SA1 PPAL
SX0 B1
LX0 48-0
IX6 X2-X0 DECREMENT PP COUNT AT CP
SA6 A2
LX0 12-48
IX6 X0+X1 INCREMENT AVAILABLE CPP COUNT
SA6 A1
BX6 X6-X6 CLEAR INPUT REGISTER
TX1 A3,-FP
SA6 A3
LX1 PPXES-PPCES
TA6 X1+ACPP,FPX CLEAR CP ASSIGNMENT
EQ CPR2 EXIT
CPRA VFD 18/3L*VP,42/0 SIGNIFIES A NOS/VE PP
CPRB VFD 18/0L1MA,6/0,12/10B,24/0
DDB SPACE 4,15
** DDB - *DDB* EXTENSION FOR CONCURRENT PPS.
*
* *DDB* GETS CALLED WHEN IT IS NECESSARY TO DUMP A DAYFILE
* BUFFER.
*
* ENTRY (A5) = REQUEST ADDRESS.
* (B7) = CONTROL POINT ADDRESS.
*
* EXIT TO /MONITOR/DDB3 WITH (X0) = (B7), IF CALLED FROM CPP.
* TO /MONITOR/DDB IF NOT CALLED FROM CPP.
*
* USES X - 0, 2.
* B - 3.
*
* CALLS DDD.
DDB TX2 A5,-FPC
NG X2,/MONITOR/DDB IF NOT CALLED FROM A CPP
TX2 A5,-SP
PL X2,/MONITOR/DDB IF NOT CALLED FROM A CPP
SB3 DDB1 SET *DDD* RETURN ADDRESS
JP /MONITOR/DDD ATTEMPT TO DUMP DAYFILE DIRECT
DDB1 SX0 B7 WAIT FOR 1 SECTOR OF SPACE
SX4 B6+ SET DAYFILE INDEX
BX5 X4+X5
JP /MONITOR/DDB3 CHANGE FUNCTION TO *CDBM*
DDD SPACE 4,15
** DDD - *DDD* EXTENSION FOR CONCURRENT PP-S.
*
* *DDD* GETS CALLED WHEN ATTEMPTING TO INITIATE A DAYFILE
* BUFFER DUMP BY CALLING *1DD* DIRECTLY AND THE CONTROL POINT
* INVOLVED HAS ROLLOUT REQUESTED. IF A *CPP* IS REQUESTING THE
* DUMP, *1DD* WILL BE CALLED. OTHERWISE, IT WILL NOT BE.
*
* ENTRY (A5) = REQUEST ADDRESS.
* (B3) = RETURN ADDRESS FOR */MONITOR/DDD*.
*
* EXIT TO */MONITOR/DDD2*, IF CALLED FROM A CPP.
* TO (B3), IF NOT CALLED FROM A CPP.
*
* USES X - 2.
DDD TX2 A5,-FPC
NG X2,/MONITOR/RB3 IF NOT CALLED FROM A CPP
TX2 A5,-SP
NG X2,/MONITOR/DDD2 IF CALLED FROM A CPP
JP B3 RETURN
DPP SPACE 4,10
** DPP - *DPPM* EXTENSION FOR CONCURRENT PP-S.
*
* ENTRY (A5) = *OR* ADDRESS OF CPP TO DROP.
* (A2) = ADDRESS OF *ACPP*.
*
* EXIT TO *APQ*, TO CALL *1MA* WHICH WILL IDLE THE CPP.
*
* USES X - 3, 4, 6, 7.
* A - 4, 7.
* B - 3, 4, 7.
DPP BSS 0 ENTRY
SX7 3L*MA RESET INPUT REGISTER
LX7 59-17
MX4 18
BX7 X4*X7
SA7 A5-B1
SA4 PPAL INCREMENT COUNT OF AVAILABLE CPP-S
SX3 10000B
IX7 X4+X3
SA7 A4
BX7 X7-X7
SA7 A2 CLEAR *ACPP*
SA7 A5+ CLEAR OUTPUT REGISTER
SB3 DPP1
EQ /MONITOR/JAV CHECK JOB ADVANCE CONDITIONS
DPP1 SA2 DPPA SET PP CALL
SX3 A5-B1 INPUT REGISTER ADDRESS
BX6 X2+X3
TB7 SCA SET CONTROL POINT FOR *1MA* CALL
SB4 /MONITOR/LA1MA SET INDEX INTO *TAPQ* TABLE
SB3 /MONITOR/MTRX EXIT ADDRESS
EQ /MONITOR/APQ ASSIGN PP
DPPA VFD 18/0L1MA,6/0,12/12B,24/0
LMS SPACE 4,15
** LMS - *LMSM* EXTENSION FOR CONCURRENT PPS.
*
* ENTRY (X0) = 77777777777777770000B.
* (X2) = SUBFUNCTION CODE.
* (X6) = *WDSE* MASK = -0 IF *WDSE* PRESENT.
*
* EXIT (X0) = 11B.
* (X3) = *CHRV* VALUE FROM MB+1.
* (X4) = OLD DRIVER INDEX.
* (X5) = *6DC*/*6DD* DRIVER INDEX.
* (X6) = 12/0, 12/*WDSE* VALUE, 24/0, 12/2.
* (A3) = MESSAGE BUFFER ADDRESS.
* (B3) = SUBFUNCTION CODE.
*
* USES X - 0, 2, 3, 4, 5, 6, 7.
* A - 2, 3.
* B - 3.
LMS13 SA3 A5+B1 GET *MB*
SB3 X2 (B3) = SUBFUNCTION CODE
SA2 A3+B1 GET *MB*+1
LX5 59-44
SX4 37B*10000B
MI X5,LMS14 IF *6DD* REQUEST BIT IS SET
SX5 /MONITOR/LA6DC*10000B SET NEW DRIVER INDEX
EQ LMS15 COMPLETE *6DC* LOAD PROCESSING
LMS14 SX5 /MONITOR/LA6DD*10000B SET *6DD* DRIVER INDEX
LMS15 BX7 -X0*X2 GET *CHRV* VALUE
BX0 X6*X0 GET *WDSE* VALUE
LX0 36
BX4 X4*X2
BX0 -X0*X3
SX6 B1+B1 INHIBIT PRESET IF *6DC* ALREADY LOADED
LX3 X7
BX6 X6+X0
SX0 11B
EQ /MONITOR/LMS4 CHECK FOR DRIVER LOAD NEEDED
SPL SPACE 4,10
** SPL - *SPLM* EXTENSION FOR CONCURRENT PPS.
*
* ENTRY ENTRY CONDITIONS FOR *SPL*.
*
* EXIT (B6) = B6 + 400000B, IF REQUEST IS FOR A CPP.
*
* USES X - 3, 4.
SPL TX3 A5,-FPC CHECK FOR CALL FROM CPP
TX4 A5,-SP
NG X3,/MONITOR/SPL IF NOT FROM CPP
PL X4,/MONITOR/SPL IF NOT FROM CPP
SB6 B6+400000B
EQ /MONITOR/SPL SEARCH PERIPHERAL LIBRARY
SPL1 PL B6,SPL2 IF REQUEST WAS FOR AN NPP
SB6 B6-400000B
SPL2 TJP (/PROBE/SPL,PROBE,B6) RETURN
TITLE SUBROUTINES.
WPR SPACE 4,15
** WPR - WRITE PARAMETER WORDS INTO CPP-S COMMUNICATION AREA.
*
* ENTRY (A3) = *IR* ADDRESS OF ASSIGNED CPP.
* (A5) = *OR* ADDRESS OF CALLING PP.
* (B3) = CONTROL POINT ADDRESS.
* (B4) = RETURN ADDRESS.
*
* EXIT TO *CPR2*, IF PP LIMIT EXCEEDED.
* *MB* OF CALLING PP WRITTEN INTO CPP-S *IR*.
* *MB+1* OF CALLING PP WRITTEN INTO CPP-S *MB*.
*
* USES X - 0, 1, 2, 4, 6, 7.
* A - 1, 2, 4, 7.
* B - 6.
WPR SA4 B3+STSW
SX7 6 RC = *MAXIMUM PP-S ALREADY ASSIGNED*
TX2 B3,-SCA
MX0 -5
LX4 0-48
ZR X2,WPR1 IF CALL FOR SYSTEM CONTROL POINT
BX0 -X0*X4
SB6 X0-NPPCP-1
PL B6,CPR2 IF PP LIMIT EXCEEDED
WPR1 SX0 B1
IX7 X4+X0 INCREMENT PP COUNT
LX7 48-0
SA7 A4
SA2 PPAL
LX0 12-0
IX7 X2-X0 DECREMENT AVAILABLE CPP COUNT
SA7 A2
SA1 A5+B1
SX2 B3 ADD CONTROL POINT NUMBER
LX2 36-0-7
BX7 X1+X2
SA2 A1+B1
BX6 X2
SA7 A3
SA6 A3+2 WRITE PARAMETER WORD INTO NEW CPP-S MB
* IF NOT CALLED TO THE SYSTEM CONTROL POINT, AN ALTERNATE
* ASSIGNMENT TO THE SYSTEM CONTROL POINT WILL BE SET TO ALLOW
* A STORAGE MOVE OF THE CALLING JOB WHILE THE CPP DEADSTART IS
* IN PROGRESS.
TX7 B3,-SCA
ZR X7,WPR2 IF CALLED TO SYSTEM CP
SX7 B1
LX7 23-0 SET ALTERNATE CP FLAG
WPR2 TX1 SCA
BX7 X7+X1
LX1 24
TX2 A3,-FP
BX7 X7+X1
LX1 24-7
LX2 PPXES-PPCES
BX7 X7+X1
TA7 X2+ACPP,FPX SET CP ASSIGNMENT
JP B4 RETURN
ENDBLK
BLOCK PCP,(PSEUDO-CONTROL POINT CODE.)
APC SPACE 4,20
** APC - ASSIGN PSEUDO-CONTROL POINT.
*
* ENTRY (X1) = *STSW* LEFT SHIFTED 59-31.
* (X2) = EJT ORDINAL.
* (X4) = EJT *JSNE* WORD.
* (A1) = *STSW* ADDRESS.
* (B7) = CPA ADDRESS.
*
* EXIT (B3) = UNCHANGED.
* (B5) = PCP NUMBER IF ROLLOUT TO PCP POSSIBLE.
* (B6) = -1 IF COMPOUND ROLLOUT.
* = 0 IF SIMPLE PSEUDO-ROLLOUT.
* (B7) = CPA ADDRESS (UNCHANGED).
* TO *RPC* TO INITIATE ROLLOUT TO PCP.
* TO /MONITOR/*JAV2* IF ROLLOUT TO PCP NOT POSSIBLE.
*
* USES X - ALL.
* B - 3, 4, 5, 6.
* A - 1 - 6.
*
* CALLS RPC.
APC BSS 0 ENTRY
* CHECK JOB FOR CONDITIONS PREVENTING PSEUDO-ROLLOUT.
SX6 X2+
SA2 B7+SRUW
SA3 B7+FLIW
SA6 APCC SAVE EJT ORDINAL
MX0 -12
AX1 36-32
SX6 4000B
BX1 -X0*X1 ERROR FLAG
MX7 -36
LX2 11-41 POSITION ACCUMULATOR OVERFLOW FLAG
BX3 -X7*X3 PENDING FL OR FLE INCREASE
BX2 X4+X2
IX1 X1+X3
BX2 X6*X2 SET OVERFLOW AND SCP CONNECTION STATUS
IX2 X1+X2
ZR X2,APC2 IF NO CONDITIONS PREVENTING PSEUDO-ROLLOUT
* ROLL OUT JOB TO MASS STORAGE IF PSEUDO-ROLLOUT NOT POSSIBLE.
APC1 SA1 B7+STSW
MX6 -1
LX6 31-0
BX6 X6*X1 CLEAR PSEUDO-ROLLOUT ALLOWED FLAG
SA6 A1
EQ /MONITOR/JAV2 CALL *1AJ* FOR MASS STORAGE ROLLOUT
* SAVE REGISTERS AND INITIALIZE PCP SEARCH.
APC2 SA1 PCPP
SX6 A5+ SAVE (A5)
TX3 SC SYSTEM CP NUMBER
SB4 X1+TFSW PCPA FWA + *TFSW*
SA6 APCB
SX7 B3+ SAVE (B3)
SB5 X3+1 FIRST PCP NUMBER
SX6 77777B INITIALIZE LOWEST PRIORITY
SA1 CMCL
SA7 APCA
TX2 NPCP NUMBER OF PCP-S
LX1 -48
BX1 -X0*X1 MOVING CP/PCP NUMBER
* SEARCH FOR AVAILABLE PCP.
APC3 SX2 X2-1 DECREMENT PCP INDEX
NG X2,APC4 IF END OF SCAN
BX3 X2
LX3 7 PCP INDEX * 200B
SA4 B4+X3 READ THIS PCP-S *TFSW* WORD
LX4 -48
BX4 -X0*X4 EJT ORDINAL
ZR X4,APC5 IF FREE PCP
SX3 B5+X2 PCP NUMBER
BX3 X3-X1
ZR X3,APC3 IF PCP MOVING
CX5 X4,EJT CONVERT EJT ORDINAL TO OFFSET
TA5 X5+JSNE,EJT
SA3 A4+STSW-TFSW
LX5 59-0
AX3 48
NG X5,APC3 IF PCP JOB INTERLOCKED
SA5 A5+SCLE-JSNE
AX5 54 SERVICE CLASS
CX4 X5,JCB CONVERT JCB ORDINAL TO OFFSET
NZ X3,APC3 IF ACTIVITY AT PCP
TA4 X4+EXQT,JCB
LX4 -12
BX7 -X0*X4 WEIGHTING FACTOR (WF)
SB3 X7
LX4 -36+12
BX4 -X0*X4 LOWER BOUND PRIORITY (LB)
SA3 RTCL
AX3 36 REAL TIME SECONDS (RT)
SA5 A5+SCHE-SCLE
LX5 36
AX5 36 ENTRY TIME (ET)
IX3 X3-X5 RT - ET
AX3 X3,B3 (RT - ET) / WF
IX4 X3+X4 PRIORITY = LB + (RT - ET) / WF
IX5 X4-X6
PL X5,APC3 IF HIGHER PRIORITY THAN CURRECNT LOWEST
SX6 X4 SET NEW LOWEST PRIORITY PCP JOB
SB6 B5+X2 SET NEW LOWEST PRIORITY PCP NUMBER
EQ APC3 CONTINUE SCAN
* PROCESS NO PCP AVAILABLE. INITIATE COMPOUND ROLLOUT OF
* LOWEST PRIORITY PCP JOB IF THAT JOB-S PRIORITY IS LOWER THAN
* THAT OF THE CP JOB.
APC4 SA3 B7+TFSW
TA1 PCNS,SDA
SX7 B1
IX7 X1+X7 INCREMENT *NO PCP* COUNTER
SA7 A1
LX3 -48
BX4 -X0*X3 CP JOB-S EJT ORDINAL
CX3 X4,EJT CONVERT EJT ORDINAL TO OFFSET
TA3 X3+SCHE,EJT
BX3 -X0*X3 CP JOB-S SCHEDULING PRIORITY
IX3 X6-X3
PL X3,APC7 IF LOWEST PCP PRIORITY .GE. CP JOB-S
SX4 B6-B5 PCP INDEX
LX4 7
TB4 X4,PCPA PCPA ADDRESS FOR *RPC*
SB5 B6 PCP NUMBER FOR *RPC*
SB6 -B1 INDICATE *APC* CALL
EQ APC6 INITIATE COMPOUND ROLLOUT
* INITIATE ROLLOUT TO UNOCCUPIED PCP.
APC5 SA1 APCC GET EJT ORDINAL
SB6 B0+ INDICATE SIMPLE PSEUDO-ROLLOUT TO *RPC*
TB4 X3,PCPA *PCPA* ADDRESS FOR *RPC*
LX1 48
AX3 7 PCP INDEX
BX6 X1
SB5 B5+X3 PCP NUMBER
SA6 B4+TFSW RESERVE PCP
* RESTORE REGISTERS AND INITIATE PSEUDO-ROLLOUT OR COMPOUND
* ROLLOUT.
APC6 SA1 APCA RESTORE (B3)
SA2 A1+B1 RESTORE (A5)
ERRNZ APCB-APCA-1 CODE DEPENDS ON VALUE
SB3 X1
SA5 X2
EQ RPC INITIATE PSEUDO OR COMPOUND ROLLOUT
* RESTORE REGISTERS AND INITIATE ROLLOUT TO MASS STORAGE.
APC7 SA1 APCA RESTORE (B3)
SA2 A1+B1 RESTORE (A5)
ERRNZ APCB-APCA-1 CODE DEPENDS ON VALUE
SB3 X1
SA5 X2
EQ APC1 INITIATE ROLLOUT TO MASS STORAGE
APCA CON 0 (B3) SAVE AREA
APCB CON 0 (A5) SAVE AREA
APCC CON 0 EJT ORDINAL
RPC SPACE 4,20
** RPC - INITIATE PSEUDO-ROLLOUT OR PCP ROLLOUT.
*
* ENTRY (B3) = EXIT ADDRESS.
* (B4) = PCPA ADDRESS.
* (B5) = PCP NUMBER.
* (B6) = -1 IF COMPOUND ROLLOUT.
* = 0 IF SIMPLE PSEUDO-ROLLOUT.
* .GT. 0 IF SIMPLE PCP ROLLOUT.
* (B7) = CPA ADDRESS IF SIMPLE PSEUDO-ROLLOUT OR
* COMPOUND ROLLOUT.
* = PCPA ADDRESS IF SIMPLE PCP ROLLOUT.
*
* EXIT (B3) = UNCHANGED.
* TO *APQ*.
*
* USES X - ALL.
* A - 1, 2, 3, 6.
* B - 4, 6, 7.
*
* CALLS APQ.
RPC BSS 0 ENTRY
SX5 B1 *1RO* FUNCTION CODE - 2
SX7 B1
GT B6,B0,RPC1 IF SIMPLE PCP ROLLOUT
TA1 POTS,SDA
SX5 -B6
IX6 X1+X7 INCREMENT PSEUDO-ROLLOUT COUNTER
SA6 A1+
EQ B6,B0,RPC2 IF SIMPLE PSEUDO-ROLLOUT
RPC1 TA1 PCTS,SDA INCREMENT PCP ROLLOUT COUNTER
SA3 B4+TFSW GET PCP EJT ORDINAL
IX6 X1+X7
LX3 -48
SA6 A1+
MX0 -12
BX3 -X0*X3 PCP JOB EJT ORDINAL
CX6 X3,EJT CONVERT EJT ORDINAL TO OFFSET
TA3 X6+JSNE,EJT READ PCP EJT ENTRY
BX6 X3+X7 SET JOB INTERLOCK
SA6 A3
RPC2 SA2 RPCA
SX4 B5+ PCP NUMBER
LX5 24
IX2 X2+X5 SET *1RO* FUNCTION CODE
BX6 X2+X4 MERGE PCP NUMBER INTO *1RO* CALL
SB6 B6-B1
SB4 /MONITOR/LA1RO SET *1RO* FAST PP LOAD TABLE INDEX
NG B6,/MONITOR/APQ IF NOT SIMPLE PCP ROLLOUT
TB7 SCA SET SYSTEM CONTROL POINT ASSIGNMENT
EQ /MONITOR/APQ ASSIGN PP
RPCA VFD 18/3L1RO,6/0,12/2,24/0 *1RO* REQUEST
ENDBLK
BLOCK CP830,(CYBER 810/830 RESIDENT CODE.),MONITOR
CSP SPACE 4,20
** CSP - CHECK FOR SPECIAL PP PROGRAM.
*
* ON CYBER 810/830 MAINFRAMES WITH 20 PPS, CERTAIN PROGRAMS
* ARE ASSIGNED ONLY TO BARREL 1.
*
* ENTRY (X6) = PP CALL.
* (X2) = AVAILABLE PP FLAGS.
* (B7) = CP ADDRESS.
*
* EXIT (X2) = UPDATED AVAILABLE PP FLAGS.
* (APQC) = PP SELECTION MASK.
*
* USES X - 2, 3, 4, 7.
* A - 4, 7.
CSP BSS 0 ENTRY
SA4 CSPB PRESET TABLE SEARCH
MX3 18
BX3 X3*X6 GET PACKAGE NAME
LX3 18
MX7 -18 GET PP ROUTINE
BX7 -X7*X4
IX7 X3-X7
ZR X7,CSP2 IF *1AJ* CALL
PL X7,CSP1 IF SYSTEM CALL (*1XX* PP NAME)
SA4 CSPA-1 PRESET ALTERNATE TABLE SEARCH
* CHECK FOR SPECIAL PP-S.
CSP1 SA4 A4+B1 READ NEXT ENTRY
MX7 -18 GET PP ROUTINE
BX7 -X7*X4
IX7 X3-X7
NG X7,APQ1.0 IF PACKAGE NAME NOT IN TABLE
NZ X7,CSP1 IF NO MATCH
* ASSIGN SPECIFIED BARREL.
CSP2 MX7 20
LX7 -12
BX7 X7*X4
BX2 X7*X2
SA7 APQC
EQ APQ1.0 RETURN TO *APQ*
CSP SPACE 4,10
**** LIST OF PP ROUTINES AND ASSOCIATED BARREL.
*
*T 12/ 0, 20/ B, 10/ 0, 18/ PP.
* B - BARREL TO LOAD PP ROUTINE.
* PP - PP ROUTINE NAME.
*
* NOTE - BOTH LISTS MUST BE IN ASCENDING ALPHABETICAL ORDER.
* SPECIAL SYSTEM ROUTINES.
CSPA VFD 12/0,20/BARREL1,10/0,18/3LCPD *CPD*
VFD 12/0,20/BARREL1,10/0,18/3LLDD *LDD*
VFD 12/0,20/BARREL1,10/0,18/3LLDQ *LDQ*
VFD 12/0,20/BARREL1,10/0,18/3LLDR *LDR*
VFD 12/0,20/BARREL1,10/0,18/3LMP3 *MP3*
VFD 12/0,20/BARREL1,10/0,18/3LMTE *MTE*
VFD 12/0,20/BARREL1,10/0,18/3LNDR *NDR*
VFD 12/0,20/BARREL1,10/0,18/3LPFU *PFU*
VFD 12/0,20/BARREL1,10/0,18/3LTCS *TCS*
VFD 12/0,20/BARREL1,10/0,18/3LVER *VER*
CSPB VFD 12/0,20/BARREL1,10/0,18/3L1AJ *1AJ*
VFD 12/0,20/BARREL1,10/0,18/3L1KB *1KB*
VFD 12/0,20/BARREL1,10/0,18/3L1LT *1LT*
VFD 12/0,20/BARREL1,10/0,18/3L1MS *1MS*
VFD 12/0,20/BARREL1,10/0,18/3L1MT *1MT*
VFD 12/0,20/BARREL1,10/0,18/3L1PC *1PC*
VFD 12/0,20/BARREL1,10/0,18/3L1PD *1PD*
VFD 12/0,20/BARREL1,10/0,18/3L1PL *1PL*
VFD 12/0,20/BARREL1,10/0,18/3L1PM *1PM*
VFD 12/0,20/BARREL1,10/0,18/3L1RI *1RI*
VFD 12/0,20/BARREL1,10/0,18/3L1RO *1RO*
VFD 12/0,20/BARREL0,10/0,18/3L1VN *1VN*
VFD 12/0,20/BARREL1,10/0,18/3L1VO *1VO*
CON -0 END OF TABLE
BARREL0 EQU 1777BS10
BARREL1 EQU 1777B
****
ENDBLK
BLOCK CP176,(CYBER 176 RESIDENT CODE.),MONITOR
BNJ SPACE 4,10
** BNJ - EXTENSION FOR THE CYBER 176.
*
* ENTRY (A6) = ADDRESS-1 OF EEA REGISTER.
BNJ30 TX7 EEAD SET ERROR EXIT ADDRESS
LX7 36
SA7 A6+B1
JP /MONITOR/MTR RETURN
CJS SPACE 4,10
** CJS - EXTENSION FOR THE CYBER 176.
*
* ENTRY (B4) = RETURN ADDRESS.
* (B6) = EXCHANGE PACKAGE ADDRESS.
CJS7 SA4 B6+3 CLEAR PSD
MX2 12
LX2 -12
BX6 -X2*X4
SA6 A4
JP B4 RETURN
CPT SPACE 4,10
** CPT - EXTENSION FOR THE CYBER 176.
CP76 SA1 CXP+15B ACCUMULATED INTERRUPT COUNT
SA2 CL+CPBT+A0 READ BASE TIME
TB6 READ CPU CLOCK
MX7 -18
SX6 B6
BX6 -X7*X6
IX6 X1+X6
SA6 A2+ SET NEW BASE TIME
IX0 X6-X2 TIME USED IN MACHINE UNITS
EQ /MONITOR/CPT1 COMPUTE CP TIME USED
CXJ SPACE 4,10
** CXJ - CLOCK INTERRUPT NULL PROGRAM.
*
* ENTRY (X0) = 400000B.
* (X5) = INTERRUPT COUNT.
CXJ XJ CXP RETURN TO CALLER
IX5 X5+X0 COUNT EXCHANGE
JP CXJ RETURN
EXP SPACE 4,10
** EXP - ERROR EXCHANGE PROGRAM.
*
* ENTRY (X0) = 77770000777777777777B.
* (X4) = 1.
* (X5) = COUNT OF EXCHANGES.
EXP XJ 0
SA1 B2+3 GET PSD
MX6 3
MX2 9
LX6 -9
BX6 X6*X1 EXTRACT MODE BITS
BX2 X6+X2
IX5 X5+X4 COUNT EXIT
LX2 -12
BX7 -X0*X1
BX2 X2*X1 EXTRACT CONDITION BITS
SX3 B2
ZR X7,EXP1 IF NO ERROR CONDITIONS - CPUMTR LOST
AX2 37
ZR X2,EXP3 RETURN IF ERROR CONDITION PERMITTED
LX2 -6
LX6 11
PL X2,EXP1 IF NO SCM DIRECT RANGE ERROR
LX2 1
AX2 1 CLEAR SCM RANGE CONDITION
MI X6,EXP1 IF MODE 1 NOT SELECTED
ZR X2,EXP3 IF NO OTHER ERRORS
SB3 EXP
EXP1 SX7 B2
LX3 30
BX6 X3+X7
SA6 B0 *ALERT* DSD
EXP2 SB3 B3-B1
NZ B3,EXP2 DELAY
SA2 B0 CHECK FOR FLAG CLEARED
NZ X2,EXP2 HANG UNLESS CLEARED
SA2 B2+6 READ MA (NEA)
EXP3 BX6 X0*X1 CLEAR CONDITION BITS AND RETURN
SA6 A1
JP EXP RETURN
PPE SPACE 4,20
** PPE - PROCESS PSD ERROR.
*
* ENTRY (B2) = USER EXCHANGE PACKAGE ADDRESS.
* (B3) = RA OF CONTROL POINT.
*
* EXIT TO *MTR1* IF NO ERRORS.
* TO *SEF* OTHERWISE.
PPE SA1 B2+3 CHECK CONDITION FLAGS (PSD)
MX6 3
MX2 9
LX6 -9
BX6 X6*X1 MODE BITS
BX2 X2+X6 ADD MASK TO CHECK ALL NON-MODE CONDITIONS
LX2 -12
BX2 X2*X1
ZR X2,/MONITOR/MTRX IF NO ERROR CONDITION
LX1 59-39
TNG X1,(/IH819/PPE,IH819,/MONITOR/MTRX) IF STEP
SX7 ARET ARITHMETIC ERROR
* MAP ERROR AND P ADDRESS INTO RA+0.
SX6 B0+ INITIALIZE MAPPING REGISTER
SX1 40B CM PARITY BIT
LX2 59-46
PL X2,PPE1 IF NO SCM SECDED ERROR
BX6 X1+X6 MAP SCM SECDED AS CM PARITY
PPE1 MX0 5 MASK FOR ADDRESS RANGE ERRORS
LX2 1
BX3 X0*X2
SX1 B1 ADDRESS RANGE BIT
MX0 2 MASK FOR INFINITE AND INDEFINTITE MODES
ZR X3,PPE2 IF NO RANGE ERRORS
BX6 X1+X6 MAP ALL RANGE ERRORS AS ADDRESS RANGE
PPE2 LX2 10 MAP OVERFLOW AND INDEFINITE
LX0 3
BX1 X0*X2
BX6 X1+X6
MX0 18 ADD P ADDRESS TO MAPPED BITS
SA1 B2
LX6 48
LX0 -6
BX1 X0*X1
LX1 -6
SA2 B3 INSERT MAPPED BITS AND P IN RA+0
SA2 X2
MX0 -30
BX6 X1+X6
BX2 -X0*X2
BX6 X2+X6
SA6 A2
EQ /MONITOR/SEF SET ERROR FLAG
TIM SPACE 4,10
** TIM - EXTENSION FOR THE CYBER 176.
* ACCUMULATED JOB CLOCK CYCLE COUNT.
TIM7 SB4 TIM9 SET *DSB* RETURN ADDRESS
SA2 CPTA+A0 QUARTER NANOUNITS TO CLOCK CYCLES
PX2 X2
NX2 X2
EQ /PROGRAM/DSB DIVIDE 60 BIT INTEGER
* ACCUMULATED CLOCK CYCLE COUNT SINCE DEADSTART.
TIM8 SA1 CL+CPBT+A0 READ BASE TIME
BX6 X1
TIM9 PX1 X6
SB3 A5-B1 RESTORE RA
EQ /MONITOR/TIM1 STORE RESULT
ENDBLK
BLOCK BUFIO,(BUFFERED I/O PROCESSING.)
DLB SPACE 4,10
** DLB - DELETE BUFFER FROM I/O QUEUE.
*
* ENTRY (A2) = ADDRESS OF *UNCT* WORD IN *PUT* ENTRY.
* (A3) = CONTROL BUFFER ADDRESS.
* (B3) = RETURN ADDRESS.
* (X2) = *UNCT* WORD OF *PUT* ENTRY.
*
* USES X - 1, 2, 3, 4, 5, 6, 7.
* A - 2, 4, 6, 7.
* B - 5, 7.
DLB SA4 A3+IOLK CHECK I/O LINKUP
MX5 -12
MX7 -24
LX5 12
LX7 24
SX6 5000B I/O INTERLOCK, WRITE FLAGS
BX7 X7*X4 CLEAR QUEUE LINKAGE
LX4 -24
MX5 -12
LX6 48
BX3 -X5*X4 FORWARD LINK
BX7 -X6*X7 CLEAR FLAGS
LX4 -12
SA7 A4
BX6 -X5*X4 BACKWARD LINK
BX7 -X5*X4
SB7 X3+
NZ X6,DLB2 IF NOT FIRST BUFFER IN CHAIN
BX2 X5*X2
BX2 X2+X3 INSERT NEW FIRST
EQ DLB3 PROCESS FORWARD LINK
DLB2 LX7 CBTLS PROCESS BACKWARD LINK
TA4 X7+IOLK,CBT
LX4 -24
BX7 X5*X4 FORWARD LINK
BX7 X7+X3 INSERT NEW FORWARD LINK
LX7 24
SA7 A4
DLB3 ZR X3,DLB4 IF LAST BUFFER
LX3 CBTLS PROCESS FORWARD LINK
TA4 X3+IOLK,CBT
LX4 -36
BX4 X5*X4 CLEAR OLD BACKWARD LINK
BX7 X4+X6 INSERT NEW BACKWARD LINK
LX7 36
SA7 A4+
DLB4 SX4 B1 DECREMENT QUEUE SIZE
LX4 24
LX5 12
IX6 X2-X4
BX3 -X5*X2 CURRENT BUFFER
TX2 A3,-CBT COMPUTE DELETED BUFFER ORDINAL
LX3 -12
AX2 CBTLS
BX7 X3-X2
NZ X7,DLB6 IF NOT CURRENT BUFFER
BX6 X5*X6 ADVANCE TO NEXT QUEUE ENTRY
SX2 B7
NZ B7,DLB5 IF NOT END OF QUEUE
SA4 A2+B1
ERRNZ HSCT-UNCT-1 INDEXES MUST BE CONSECUTIVE
MX3 -12
MX7 59
BX2 -X3*X6 FIRST REQUEST
LX7 58
BX6 X7*X6 CLEAR REQUEST(S) WAITING FLAG
BX7 X5*X4 CLEAR REQUEST COUNT
SA7 A4
* SET NEW CURRENT *CB* ORDINAL IN THE *PUT* SO AS TO EXCLUDE
* THOSE BUFFERS CONTAINING PREVIOUSLY PROCESSED ERRORS.
DLB5 SB6 DLB6
EQ SCB SELECT CURRENT BUFFER IN I/O QUEUE
DLB6 SA6 A2+ RESET *PUT* ENTRY
* DECREMENT DEVICE ACTIVITY COUNT.
SA1 A3+FSTC EST ORDINAL
MX3 -12
LX1 12
BX7 -X3*X1 EST ORDINAL
CX4 X7,EST CONVERT EST ORDINAL TO OFFSET
TA4 X4+EQDE,EST READ EST ENTRY
BX7 -X3*X4 *MST* ADDRESS/10B
LX7 3
SA4 X7+DALL DECREMENT ACTIVITY COUNT
SB5 A2+ SAVE *PUT* ENTRY ADDRESS
SA2 X7+CTLL
BX1 X4
LX1 59-36
LX2 36
BX5 -X3*X2
SX5 X5-1
PL X5,DLB7 IF NO UNDERFLOW
SX5 0
DLB7 BX2 X2*X3
BX7 X2+X5
LX7 24
SA7 A2 UPDATE *CTLL*
PL X1,DLB8 IF NO RECENT *DSWM* ACCESS TO DEVICE
LX1 59-37-59+36
NG X1,DLB10 IF UNIT IS BEING ACCESSED VIA *DSWM*
DLB8 MX7 54
BX2 X7*X5
LX7 48
ZR X2,DLB9 IF NOT ACTIVITY OVERFLOW
SX5 77B
DLB9 BX4 X7*X4 CLEAR OLD ACTIVITY
LX5 48
BX7 X4+X5 ADD IN COMPUTED ACTIVITY
SA7 A4 UPDATE *DALL*
DLB10 LX6 59-58
SX3 B1
PL X6,/MONITOR/RB3 IF *RW* FLAG CLEAR
ERRNZ HSCT-UNCT-1 CODE DEPENDS ON VALUE
SA4 B5+B1
LX3 12
IX7 X4+X3 INCREMENT REQUESTS PROCESSED
LX4 59-12-8
ERRNZ RCTH-400B VALUE MUST BE 2**8
NG X4,/MONITOR/RB3 IF REQUEST COUNT LIMIT
SA7 A4+
JP B3 RETURN
HHE SPACE 4,10
** HHE - HANG ON HALF-EXIT.
*
* ENTRY VIA *RJ* SO THAT ERROR EXIT ADDRESS IS SAVED.
*
* EXIT NONE (IT NEVER DOES).
*
* CALLS MSC.
HHE PS ENTRY
SX1 HHEA * ESM ERROR - BUFFERED I/O.*
SB5 HHE1 *MSC* RETURN ADDRESS
EQ /MONITOR/MSC SET MESSAGE IN SYSTEM CONTROL POINT
HHE1 EQ * HANG
HHEA DATA C* ESM ERROR - BUFFERED I/O.*
IOC SPACE 4,25
** IOC - I/O CONTROL.
*
* ENTRY (X2) = 24/ FCN, 24/ RCD, 12/CBO
*
* FCN = 0, ENTER BUFFER IN UNIT I/O QUEUE.
* = 2, SET RECALL CONTROL ON BUFFER.
* = 3, 819 I/O RESTART.
*
* RCD = RECALL DATA.
*
* CBO = CONTROL BUFFER ORDINAL.
*
* EXIT ((B7) + 16B) = RESPONSE.
*
* RESPONSE = 0, I/O COMPLETE.
* 1, RECALL CONTROL SET.
*
* USES X - ALL.
* A - 1, 2, 3, 4, 6, 7.
* B - 3, 4, 5, 6, 7.
*
* CALLS /IH819/INR.
IOC9 SA2 A3+IOLK
SA4 A3+LSLK
PL X2,IOC10 IF I/O INTERLOCK CLEAR
SX6 1
BX7 X4+X7
NO
SA7 A4+
IOC10 TA6 16B,SCA STORE RESPONSE
IOCX SX7 B0+ CLEAR I/O REQUEST
TB7 SCA SYSTEM CONTROL POINT
TA7 IORQ
EQ /MONITOR/MTRX RETURN
IOC MX4 -12
BX4 -X4*X2 CONTROL BUFFER ORDINAL
MX7 -24
LX2 -12
SB6 X4 CONTROL BUFFER ORDINAL
BX7 -X7*X2 RECALL DATA
LX2 -24
LX4 CBTLS
SB7 X2 FUNCTION CODE
TA3 X4+PAD1,CBT CBT ADDRESS
MX2 -12
TA4 X4+HSLK,CBT GET *PUT* ORDINAL
BX2 -X2*X4 *PUT* ORDINAL
LX2 PUTLS
SX6 B0+
TA2 X2+UNCT,PUT *PUT* ENTRY
ZR B7,IOC0 IF ENTER BUFFER REQUEST
SB7 B7-2
ZR B7,IOC9 IF TO SET RECALL CONTROL REQUEST
TEQ (/IH819/RIO,IH819,/BUFIO/IOCX) RESTART 819 I/O
* ENTER REQUEST IN UNIT I/O QUEUE.
IOC0 MX7 -12
SB3 B0 CLEAR FORWARD LINK
BX1 -X7*X2 FIRST
SB7 B1 SET INITIAL PASS
NZ X1,IOC1 IF NOT EMPTY QUEUE
SX6 B6 CONTROL BUFFER ORDINAL
BX2 X6+X2
LX6 12
BX2 X6+X2
SB4 B0 CLEAR BACKWARD LINK
SX4 B6 SET INITIAL ORDINAL
EQ IOC4 ENTER REQUEST IN QUEUE
IOC1 SB5 X1 PREVIOUS ORDINAL
LX1 CBTLS
TA4 X1+PAD1,CBT OLD DISK ADDRESS
MX1 24
LX1 -12
BX7 X1*X4
BX6 X1*X3
IX6 X7-X6
NO
PL X6,IOC2 IF SLOT FOUND
SA1 A4+IOLK-PAD1
SX5 A4 PREVIOUS CONTROL BUFFER ADDRESS
SB4 B5 PREVIOUS CONTROL BUFFER ORDINAL
MX7 -12
LX1 -24
SB7 B0 CLEAR INITIAL PASS FLAG
BX1 -X7*X1
NZ X1,IOC1 IF NOT END OF QUEUE
LX7 36
BX4 -X7*X4 EXTRACT CYLINDER NUMBERS
BX7 -X7*X3
IX7 X7-X4
SX7 X7-CCTH
NG X7,IOC3 IF NOT BEYOND THRESHOLD
SX7 B1 SET REQUEST(S) WAITING FLAG
LX7 58
BX2 X7+X2
EQ IOC3 ENTER REQUEST AT END OF QUEUE
IOC2 ZR B7,IOC3 IF NOT START OF QUEUE
SX7 B1+
SB3 B5 FORWARD LINK
LX7 58
MX6 48
BX2 X7+X2 SET REQUEST(S) WAITING FLAG
SB4 B0 BACKWARD LINK
SX4 B6 INSERT NEW START OF QUEUE
BX6 X6*X2
BX2 X4+X6
EQ IOC4 ENTER BUFFER IN QUEUE
* ENTER NEW CONTROL BUFFER IN UNIT I/O QUEUE.
IOC3 SA3 X5+IOLK LINK TO PREVIOUS ENTRY
MX7 -12
LX3 -24
BX5 -X7*X3
BX7 X7*X3
SB3 X5 FORWARD LINK
SX4 B6 NEW ENTRY ORDINAL
BX7 X4+X7
LX7 24
SA7 A3+
IOC4 LX4 CBTLS NEW ENTRY LINK WORD
TA3 X4+IOLK,CBT
MX7 36
LX3 -24
BX7 X7*X3 CLEAR LINK FIELDS
SX6 B4 LINK IN NEW ENTRY
LX6 12
BX7 X7+X6
SX3 B3
BX6 X3+X7
MX7 1 SET I/O INTERLOCK
LX6 24
BX6 X7+X6
LX7 24+1
SA6 A3
IX2 X2+X7 INCREMENT QUEUE SIZE
ZR B3,IOC6 IF END OF QUEUE
LX3 CBTLS PROCESS LINK TO NEXT ENTRY
TA3 X3+IOLK,CBT
MX7 48
LX3 -36
BX7 X7*X3 CLEAR BACKWARD LINK
SX4 B6 NEW ENTRY ORDINAL
BX7 X7+X4
LX7 36
SA7 A3+
IOC6 LX2 -12 CHECK CURRENT *CB* ORDINAL
MX0 -12
SX4 B6 ORDINAL OF NEW BUFFER
BX7 -X0*X2
MX5 -54
NZ X7,IOC7 IF CURRENT *CB* PRESENT
BX2 X2+X4
IOC7 LX2 12
BX6 X2 UPDATE *PUT* ENTRY
LX4 CBTLS
SA6 A2
* INCREMENT DEVICE ACTIVITY COUNT.
TA4 X4+FSTC,CBT
LX4 12
BX7 -X0*X4 EST ORDINAL
CX4 X7,EST CONVERT EST ORDINAL TO OFFSET
TA4 X4+EQDE,EST READ EST ENTRY
BX7 -X0*X4 MST ADDRESS / 10B
LX7 3
SA4 X7+DALL INCREMENT ACTIVITY COUNT
SX7 B1
SA3 A4+CTLL-DALL
LX7 24
IX6 X3+X7
SA6 A3
LX6 -24
BX3 -X0*X6 EXTRACT QUEUE SIZE
LX4 59-37
NG X4,IOC8.1 IF DEVICE IS BEING ACCESSED VIA *DSWM*
LX3 54
SX7 X3 MOST SIGNIFICANT SIX BITS
LX4 6-59+37
ZR X7,IOC8 IF NOT OVERFLOW
MX3 6
IOC8 BX4 -X5*X4 REMOVE OLD COUNT
BX7 X3+X4
LX7 -6 UPDATE COUNT
SA7 A4
IOC8.1 NG X2,IOCX IF UNIT INTERLOCKED
TNO /BUFIO/IOCX,IHPFMD IF NOT 819
MX5 1
BX6 X5+X2 SET UNIT INTERLOCK
LX2 -12
BX0 -X0*X2
SA6 A2+
SB3 IOCX *INR* RETURN ADDRESS
EQ /IH819/INR INITIATE REQUEST
SBR SPACE 4,15
** SBR - SET BUFFER RECALL.
*
* ENTRY (B3) = RETURN ADDRESS.
* (A3) = CONTROL BUFFER ADDRESS.
*
* IF 819 DEVICES -
* (B4) = CHANNEL NUMBER.
* (B7) = 0 IF INPUT XP, 20 IF OUTPUT XP.
*
* USES X - 3, 4, 6.
* A - 4, 6.
*
* CALLS /IHPFMD/RPP, /IH819/RPP.
SBR SA4 A3+LSLK CHECK FOR RECALL CONTROL
MX3 36
BX6 X3*X4 CLEAR RECALL CONTROL
BX4 -X3*X4
SA6 A4
ZR X4,/MONITOR/RB3 IF NO RECALL CONTROL SET
BX6 X4
AX4 18
TNZ X4,(/IHPFMD/RPP,IHPFMD,/IH819/RPP) IF NOT PP RECALL
SA4 X6 SIGNAL PP TO REISSUE
SX3 B1
LX3 46
BX6 X3+X4
SA6 A4
JP B3 RETURN
SCB SPACE 4,10
** SCB - SELECT CURRENT BUFFER FOR I/O QUEUE.
*
* ENTRY (B6) = RETURN ADDRESS.
* (X2) = ORDINAL OF FORWARD LINKED BUFFER.
* (X6) = *UNCT* WORD WITH CURRENT *CB* FIELD CLEAR.
*
* EXIT (X6) = NEW *UNCT* WORD FOR *PUT* ENTRY.
*
* USES A - 4.
* X - 2, 3, 4, 5, 6, 7.
SCB LX6 -24 POSITION UNIT QUEUE SIZE
MX3 -12
BX7 -X3*X6 EXTRACT QUEUE SIZE
LX6 24
SCB1 ZR X7,RB6 IF QUEUE EMPTY
LX2 CBTLS
BX5 X6 PRESERVE *PUT* INFORMATION
TA4 X2+HSLK,CBT
LX2 12-CBTLS REBUILD *UNCT* WORD
BX6 X5+X2
PL X4,RB6 IF NOT *CBT* ENTRY WITH ERRORS
MX6 -59
SA4 A4-B1
ERRNZ IOLK+1-HSLK CODE DEPENDS ON VALUE
LX6 -1
NO
BX5 -X6*X5 CLEAR REQUESTS WAITING FLAG
LX4 -24
SX7 X7-1 DECREMENT QUEUE SIZE
BX2 -X3*X4
LX6 X5
NZ X2,SCB1 IF NOT END OF QUEUE
SX2 X5+
EQ SCB1 CHECK START OF QUEUE
TITLE CPU MONITOR BUFFERED I/O HANDLER.
BFM SPACE 4,25
** BFM - *BFMM* MONITOR FUNCTION.
*
* ENTRY AT *BFM* IF MONITOR MODE *BFMM* FUNCTION
* TO BE PROCESSED.
* AT *BFM3* IF PROGRAM MODE *BFMM* FUNCTION
* TO BE PROCESSED.
* REFER TO *BFMM* DOCUMENTATION FOR OUTPUT REGISTER
* AND FNT DESCRIPTION.
*
* EXIT TO /MONITOR/PMR TO SWITCH TO PROGRAM MODE.
* TO /MONITOR/PPR1 TO EXIT MONITOR MODE FUNCTION.
* TO /PROGRAM/PRG OR /PROGRAM/PRG1 TO EXIT
* PROGRAM MODE FUNCTION.
* REFER TO *BFMM* DOCUMENTATION FOR OUTPUT REGISTER
* EXIT DISCRIPTION.
*
* ERROR TO /MONITOR/HNG IF INCORRECT *BFMM* OPERATION CODE
* OR IF INVALID SUBFUNCTION OR INVALID MULTIPLE
* WRITE BUFFER COUNT FOR *BMVI* OPERATION.
* TO /PROGRAM/HNG IF NEXT TRACK NOT RESERVED WHEN
* ADVANCING TRACK/SECTOR FOR MULTIPLE WRITE BUFFER
* REQUEST.
*
* CALLS LBM, LMM, SNT.
* MONITOR MODE *BFMM* ENTRY.
BFM LX1 -12
AX1 54
SX2 X1-BMMX
PL X2,/MONITOR/HNG IF INVALID OPERATION
SX2 X1-BMVI
MX0 12
LX0 -12
BX4 X0*X5 GET MULTIPLE WRITE BUFFER COUNT
BX5 -X0*X5 CLEAR EXTRANEOUS PARAMETERS
NZ X2,/MONITOR/PMR IF NOT VALIDATE OPERATION
* PROCESS *BMVI* SUBFUNCTION.
MX3 -6
BX2 -X3*X5 GET VALIDATE SUBFUNCTION
MX0 48
BX5 X0*X5 SET SUBFUNCTION IF VALIDATE FAILS
ERRNZ BMRD INDEX MUST BE ZERO
LX5 -12
SX1 X5 FNT ORDINAL
SA3 B7+FLSW GET RA
LX2 6
LX5 12
ZR X2,BFM1 IF READ SUBFUNCTION
SX6 X2-BMRW*100B-100B
PL X6,/MONITOR/HNG IF INVALID SUBFUNCTION
SA7 A5+B1 CLEAR *MB*
BX5 X5+X4 RESET MULTIPLE WRITE BUFFER COUNT
SA7 A7+B1 CLEAR *MB+1*
LX4 18
SX6 X4-11
PL X6,/MONITOR/HNG IF BUFFER COUNT TOO LARGE
BX5 X5+X2 SET WRITE/REWRITE OPERATION
R= X2,BMWR
BFM1 NG X4,/MONITOR/PMR IF WRITE BUFFER ALREADY INTERLOCKED
LX3 -RSHF
MX7 -RMSK
BX3 -X7*X3 RA / 100B
LX3 6
IX3 X3-X1 ABSOLUTE FNT ADDRESS
SX1 B1
IX3 X3+X1 *FST* ADDRESS
IX1 X3+X1
ERX1 X1 READ I/O LINK WORD
BX7 -X0*X1
ZR X7,/MONITOR/PMR IF NO LINK TO VALIDATE
BX6 X5
SA6 A5 UPDATE *BFMM* CALL IN OUTPUT REGISTER
ERX3 X3 READ *FST*
BX6 X3
SB6 BFM2 SET RETURN ADDRESS FOR *INB*
EQ INB VALIDATE AND INTERLOCK BUFFER
BFM2 SA5 A5
LX6 12
MX7 -24
BX7 -X7*X6
ZR X7,/MONITOR/PMR IF BUFFER NOT FOUND
MX0 -6
LX0 11-5
BX1 -X0*X6
NZ X1,/MONITOR/PPR1 IF REJECT CONDITION
LX0 47-11
BX6 -X0*X5
ZR X6,/MONITOR/PPR1 IF NOT MULTIPLE BUFFER REQUEST
MX1 1 SET BUFFER INTERLOCKED FLAG
SX7 B0+ CLEAR RESPONSE
LX1 41-59
BX5 X5+X1
EQ /MONITOR/PMR SWITCH TO PROGRAM MODE
* PROGRAM MODE *BFMM* ENTRY.
* SET UP CALL TO BUFFER MANAGER.
BFM3 BX2 X5
MX0 -12
LX2 -12
AX2 54
TX3 A5-1,-SP
SB6 X2-BMFO
ZR X3,BFM5 IF PSEUDO PP
SA4 A5+1
BX6 X0*X4 CLEAR *CHRV* FIELD
SX4 EPNS
NG B6,BFM4 IF NOT A FLUSH OPERATION
BX6 X4+X6
BFM4 SA6 A4+
BFM5 LX1 59-41
MX0 -36
BX5 -X0*X5
LX5 -12
SB6 BFM6 SET RETURN ADDRESS FOR *LBM*
PL X1,LBM IF CURRENT BUFFER NOT INTERLOCKED
MX0 -RMSK
EQ BFM7 CHECK FOR MULTIPLE BUFFER REQUEST
BFM6 MX0 5
MX7 -24
BX2 X0*X6
LX6 12
BX7 -X7*X6
NZ X2,/PROGRAM/PRG1 IF REJECT CONDITION
MX0 -RMSK
BFM7 SA5 A5 CHECK FOR MULTIPLE BUFFER REQUEST
MX6 7
LX6 47-59
BX1 X6*X5
ZR X1,/PROGRAM/PRG1 IF NOT MULTIPLE BUFFER REQUEST
* PROCESS MULTIPLE BUFFER WRITE REQUEST.
LX5 -12
SX2 X5 FNT ORDINAL
SA3 B7+FLSW GET RA
LX3 -RSHF
BX3 -X0*X3
MX0 48
LX3 6
IX3 X3-X2 ABSOLUTE FNT ENTRY ADDRESS
SX2 B1
IX6 X3+X2
ERX3 X6 GET FST ENTRY
SA6 BAFS SAVE FST ADDRESS
LX1 59-41
NG X1,BFM8 IF CURRENT BUFFER INTERLOCKED
IX6 X6+X2 SAVE BUFFER LINK
ERX2 X6
BX2 X0*X2
AX7 12
BX7 X7+X2
EWX7 X6
BFM8 SX1 X1
ZR X1,BFM16 IF NO MULTIPLE BUFFER COUNT
BX6 X3 SAVE ORIGINAL FST ENTRY
LX3 12
SA6 BFST
BX6 -X0*X3 GET EQUIPMENT
CX2 X6,EST CONVERT EST ORDINAL TO OFFSET
TA2 X2+EQDE,EST READ EST ENTRY
BX1 -X0*X2 MST ADDRESS/10B
LX1 3
SA2 X1+MDGL GET SECTOR LIMIT
BX2 -X0*X2
LX1 18
BX7 X1+X2
LX3 -24 GET CURRENT SECTOR
BX4 -X0*X3
MX6 -LSLBS CALCULATE MOD 40B OF CURRENT SECTOR
BX4 -X6*X4
IX6 X3-X4 CALCULATE FIRST SECTOR IN BUFFER
SA3 BAFS GET ABSOLUTE FST ADDRESS
SA7 BDDC SAVE DEVICE DESCRIPTION AND BUFFER COUNT
LX6 12
EWX6 X3
SX5 BMWR*100B SET WRITE OPERATION WITH RECALL ALLOWED
* CHECK FOR END OF TRACK.
BFM10 SX1 X7 SECTORS PER TRACK
ERX3 X3 GET FST ENTRY
SX4 LSLB LOGICAL SECTORS PER I/O BUFFER
LX3 -12
IX6 X3+X4 ADVANCE TO FIRST SECTOR IN NEXT BUFFER
BX2 -X0*X6 GET CURRENT SECTOR
IX1 X2-X1
NG X1,BFM12 IF NOT END OF TRACK
LX7 -18
SX1 X7 MST ADDRESS
LX6 -12
BX0 -X0*X6 GET CURRENT TRACK
SB6 BFM11 SET RETURN ADDRESS FOR *SNT*
EQ SNT SET NEXT TRACK
BFM11 PL X2,/PROGRAM/HNG IF NEXT TRACK NOT ASSIGNED
MX0 36 CLEAR CURRENT TRACK AND SECTOR
BX3 X0*X3
LX6 12
BX6 X3+X6 SET NEXT TRACK
BFM12 SA1 BAFS GET ABSOLUTE FST ADDRESS
LX6 12
EWX6 X1 UPDATE FST ENTRY
LX5 -12
SB6 BFM13 SET RETURN ADDRESS FOR *LBM*
SA1 A5
MX0 -24
LX1 -12
BX1 -X0*X1 GET CONTROL POINT AND FNT ORDINAL
BX5 X5+X1
EQ LBM CALL I/O BUFFER MANAGER
* PROCESS I/O BUFFER MANAGER RESPONSE.
BFM13 MX0 -12
BX4 -X0*X6 GET BUFFER INDEX
NG X6,BFM18 IF BUFFER RECALL
MX7 5
LX1 X6,B1
NG X1,BFM15 IF BUFFER BUSY
BX1 X7*X6 BUFFER MANAGER STATUS
NZ X1,BFM16 IF BUFFER UNAVAILABLE/INACCESSIBLE DEVICE
MX7 1
SA1 BDDC GET BUFFER POSITION COUNTER
LX7 42-59
SA5 A5
IX6 X5-X7 DECREMENT BUFFER COUNT
MX3 6
LX3 -12
IX7 X1+X7 INCREMENT BYTE POSITION
BX1 X3*X1
SA2 A5+B1 GET *MB*
LX1 -42
SA7 A1
SB6 X1-5
NG B6,BFM14 IF ROOM TO STORE LINK IN *MB*
SA2 A2+1 GET *MB+1*
SX1 B6+
BFM14 LX1 2 CALCULATE BYTE INDEX * 12D
BX5 X3*X6
SB6 X1
LX1 1
SA6 A5
SB6 X1+B6
LX4 B6
BX6 X2+X4
SA6 A2
BX6 X5
SX5 BMWR*100B+1 SET WRITE OPERATION WITH NO RECALL
SA3 BAFS GET ABSOLUTE FST ADDRESS
NZ X6,BFM10 IF MORE BUFFERS TO REQUEST
BFM15 SX1 0
BFM16 SA3 BAFS GET ABSOLUTE FST ADDRESS
SX7 B1
IX3 X3+X7
ERX2 X3 RETURN FIRST BUFFER ORDINAL IN *OR*
BX7 -X0*X2
BX7 X7+X1 RETURN BUFFER MANAGER REPLY STATUS
LX7 12
BFM17 SA2 BFST RESTORE ORIGINAL FST
BX6 X2
SA1 A3 GET ABSOLUTE FST ADDRESS
EWX6 X1
SA7 A5
EQ /PROGRAM/PRG EXIT
* PROCESS BUFFER RECALL (FOR SECOND BUFFER ONLY IN MULTIPLE
* WRITE BUFFER REQUEST).
BFM18 MX7 -24 RETURN RECALL ORDINAL AND STATUS
LX6 12
SA3 BAFS GET ABSOLUTE FST ADDRESS
SX2 B1
IX1 X3+X2
ERX2 X1 RETURN FIRST BUFFER ORDINAL IN *MB*
BX7 -X7*X6
BX6 -X0*X2
SA6 A5+B1
EQ BFM17 RESTORE FST
PST SPACE 4,40
** PST - *PIOM* SECTOR TRANSFER (SF = 0, 1, 2, 3, 4).
*
* ENTRY (A0) = CPU NUMBER.
* (A5) = PP *OR* ADDRESS.
* (X5) = (OR).
* (B2) = EXCHANGE PACKAGE ADDRESS, IF IN MONITOR MODE.
* (B5) = *PIOM* SUBFUNCTION - 1.
* SEE *PIOM* DOCUMENTATION FOR *OR* AND *MB*
* DESCRIPTION.
* (MB+1) = 1/ MODE, 23/,18/ PROC,18/ DVI.
* MODE = 1 INDICATES PROGRAM MODE ENTRY.
* PROC = PROGRAM MODE PROCESSOR ADDRESS.
* DVI = DEVICE INDICATOR (0=ECS, 1=BUFFERED DEVICE)
* PP I/O BUFFER RESERVED FOR *PIOM*
* SUBFUNCTIONS 0, 1, 2.
*
* EXIT A0, A5, B5 SAME AS ON ENTRY.
* (B2) = EXCHANGE PACKAGE ADDRESS, IF IN MONITOR MODE.
* PARAMETERS IN *OR* AND *MB* UPDATED FOR
* *PIOM* SUBFUNCTIONS 3, 4.
* (MB+1) .LT. 0, IF PROGRAM MODE EXIT,
* OTHERWISE MONITOR MODE EXIT.
* TO /PROGRAM/HNG, IF SHORT PRU ENCOUNTERED AND
* NOT READ TO EOR (SF = 3) OR EOF/EOI ENCOUNTERED
* ON READ TO EOR (SF = 3, SECTOR COUNT = 7777B).
* TO /ECS/PIOX, IF TRANSFER COMPLETE OR I/O RECALL
* REQUIRED.
* TO /ECS/PIOR, IF I/O BUFFER BUSY.
*
* CALLS BPF, CLM, HHE, /PROGRAM/HNG, INB, /ECS/PIOP,
* /ECS/PIOR, /ECS/PIOX, UDP.
*
* NOTE *PST* IS ENTERED IN PROGRAM MODE (SF = 3, 4)
* OR MONITOR MODE (SF = 0, 1, 2). *PST* WILL
* SWITCH TO PROGRAM MODE IF AN I/O REQUEST
* IS REQUIRED (SF = 0, 1, 2).
* MB+2 AND MB+3 ARE USED TO CONTAIN A PSEUDO FNT.
* BUILD PSEUDO FNT IN MESSAGE BUFFER.
PST SB6 PST1 *BPF* RETURN ADDRESS
EQ BPF BUILD PSEUDO FNT IN MESSAGE BUFFER
* VALIDATE I/O BUFFER LINK.
PST1 ZR X7,PST3 IF NO I/O BUFFER LINK
SX2 BMRD VALIDATE READ SUBFUNCTION
SX1 B5+B1
SB7 PST2 SET RETURN ADDRESS FOR *CLM*
LX1 -1
SB6 CLM1 RETURN ADDRESS FOR *INB*
NG X1,INB IF READ OPERATION
SX2 BMWR VALIDATE WRITE BUFFER
EQ INB INTERLOCK BUFFER
PST2 ZR X6,PST3 IF BUFFER NOT INTERLOCKED
SA3 A5+B1
MX7 1
SX2 B1+
LX3 59-6
BX2 X7+X2
BX6 -X2*X3
PL X3,PST5 IF NOT *1MV* RECALL AFTER FLUSH
BX1 X1-X1 CLEAR STATUS / HOLD WRITE BUFFER
NG B5,PST38 IF RESERVE WRITE BUFFER SUBFUNCTION
LX6 6-59
MX1 60 CLEAR STATUS / CAUSE WRITE BUFFER RELEASE
SA6 A3 CLEAR *1MV* ACTIVE AND LINK FLAGS
EQ PST38 RELEASE BUFFER AND EXIT
PST3 SA3 A5+2
SB6 PST4 SET PROGRAM MODE RETURN ADDRESS
PL X3,/ECS/PIOP IF SWITCH TO PROGRAM MODE REQUIRED
* REENTRY FROM PROGRAM MODE.
* INITIATE READ OR WRITE.
PST4 SX0 BMWR*100B ALLOCATE I/O BUFFER FOR WRITE
ERRNZ BMWR-1 CODE DEPENDS ON VALUE
SX6 B5+B1
SA4 A5+B1 GET *STREAMED READ* FLAG
LX5 6-36 CHECK FOR REWRITE
BX2 X0*X5 0 = WRITE, 100 = REWRITE
SB7 PST5 SET RETURN ADDRESS FOR *CLM*
IX2 X2+X0 100 = WRITE, 200 = REWRITE
ERRNZ BMRW-BMWR-1 INDEXES MUST BE CONSECUTIVE
LX6 -1
PL X6,CLM IF PRU OR DIRECT WRITE OR RESERVE BUFFER
R= X2,0+BMRD*100B
NZ B5,CLM IF DIRECT READ
LX4 59-9
NG X4,CLM IF READ STREAMING ON PRU READ
SX2 1+BMRD*100B READ ONE BUFFER IF NO STREAMING
EQ CLM CALL I/O BUFFER MANAGER
PST5 SX1 B0 RETURN STATUS = NO ERROR
MX7 1
NG B5,PST38 IF RESERVE WRITE BUFFER SUBFUNCTION
* CALCULATE SECTOR CONTROL WORD ADDRESS.
PST6 SA4 A5+B1 GET BEGINNING SECTOR
MX2 -12
SA1 A5+4 GET I/O BUFFER LINK (CONTROL BUFFER INDEX)
MX3 -LSLBS MOD 40B OF SECTOR
LX4 -12
BX4 -X2*X4
LX1 CBTLS
BX5 -X3*X4
SB7 X5
MX7 -24
AX5 CBTLS SECTOR CONTROL WORD INDEX
TA3 X1+IOLK,CBT BUFFER ADDRESS
IX1 X1+X5
BX0 X3
TA3 X1+PAD1,CBT SECTOR CONTROL WORD
BX6 X3
SX1 B7
BX0 -X7*X0 I/O BUFFER ADDRESS
LX1 6 MOD 40B OF SECTOR * 100B
SX7 B7 MOD 40B OF SECTOR
MX4 -3
IX0 X0+X1 FWA DATA IN I/O BUFFER
SX5 10000B
BX7 -X4*X7 MOD 10B OF SECTOR
MX3 24
SB4 X7
LX5 B4 POSITION MASK BIT TO CURRENT SECTOR FLAG
SX1 B5
LX1 -1
MX4 2
PL X1,PST7 IF PRU OR DIRECT READ
NZ X7,PST7 IF NOT FIRST PRU OF CONTROL WORD
SA1 A5
LX1 59-36
NG X1,PST7 IF REWRITE
LX4 23-59
BX6 -X4*X6 CLEAR VALID DATA FLAGS
PST7 GT B5,B1,PST16 IF DIRECT READ OR WRITE
SA4 A5+B1 GET PP BUFFER INCREMENT
SB6 A0
AX4 48
TX4 X4,ECSB FWA PP BUFFER
LX0 30 SET UP FOR EXTENDED MEMORY READ/WRITE
SA4 X4+B1 GET HEADER WORD
SB4 B7-LSLB+1
SX7 A4+B1 FWA DATA IN CM
SB3 100B SET WORD COUNT FOR TRANSFER
BX0 X0+X7
SA0 X7
LX0 30 30/ABSOLUTE FWA, 30/FWA I/O BUFFER DATA
ZR B5,PST13 IF PRU READ
* UPDATE SECTOR CONTROL WORD FOR PRU WRITE.
BX7 X3*X4
BX6 -X5*X6 CLEAR SHORT PRU FLAG
LX4 12
BX1 -X2*X4 SECTOR/TRACK LINKAGE
LX4 12
NZ B4,PST8 IF NOT LAST PRU OF CONTROL WORD
BX6 X2*X6 SET LINKAGE BYTE IN CONTROL WORD
BX6 X6+X1
PST8 ZR X1,PST11 IF EOF/EOI
BX1 -X2*X4 WORD COUNT
AX1 6
NZ X1,PST9 IF FULL PRU
NO
SA1 A4+B3
BX6 X6+X5 SET SHORT PRU FLAG
BX1 -X3*X1
BX7 X7+X1 MERGE HEADER INTO LAST DATA WORD
SA7 A1
PST9 SA6 A3 REWRITE SECTOR CONTROL WORD
SB4 B1 SET PRU COUNT FOR TRANSFER
EQ PST26 TRANSFER DATA
* WRITE EOI SECTOR AFTER DIRECT WRITE WHEN BUFFER FLUSH
* REQUESTED.
PST10 SA0 ESMB+1 USE PROGRAM MODE BUFFER FOR EOI DATA
BX7 X7-X7 CLEAR FNT ENTRY IN EOI SECTOR
SA4 A5+B1 GET EOI TRACK AND SECTOR
MX1 12
SA7 A0
LX1 -12
BX7 X1*X4 BUILD FST ENTRY FOR EOI SECTOR
MX2 -24
LX4 -12
BX1 -X2*X4
BX7 X1+X7
LX7 12
SA1 PDTL GET PACKED DATE AND TIME
SA7 A7+B1
BX7 X1
SX1 A0
SA7 A7+B1
LX1 30
IX0 X0+X1
SB3 B1
MX1 -6
SB5 B5+B1
WE 3 WRITE EOI SECTOR SYSTEM INFORMATION
RJ HHE HANG ON HALF-EXIT
SA4 A0-B3 SET TO TRANSFER EOI LINKAGE
BX7 X7-X7
SX4 B0
IX0 X0-X1 ADVANCE DATA TRANSFER ADDRESS
PST11 BX1 -X2*X4 NEXT SECTOR / TRACK LINKAGE
SA7 A4+B3 SAVE HEADER WORD AS LAST DATA WORD
BX6 X6+X5 SET SHORT PRU FLAG
NZ B4,PST12 IF NOT LAST PRU OF CONTROL WORD
BX6 X6+X1 MERGE LINKAGE DATA
PST12 NZ X1,PST9 IF EOF
SA2 A5+4 GET I/O BUFFER LINK
SB4 PST9 SET RETURN ADDRESS FOR *IDE*
LX2 CBTLS
SX7 B7
TX3 X2+PAD1,CBT ADDRESS OF FIRST SECTOR CONTROL WORD
EQ IDE SET FLAGS TO IGNORE DATA AFTER EOI
* BUILD HEADER WORD FOR PRU READ.
PST13 BX7 X5*X6 CHECK FOR SHORT PRU
NZ X7,PST14 IF SHORT PRU
SA4 A5+B1
SX1 B3+ WORD COUNT
LX4 -12 GET CURRENT SECTOR
BX4 -X2*X4
LX1 36
SX7 X4+B1 NEXT SECTOR
LX7 -12
BX7 X7+X1
NZ B4,PST15 IF NOT LAST PRU OF CONTROL WORD
BX7 -X2*X6 GET LINKAGE BYTE FROM CONTROL WORD
LX7 -12
BX7 X7+X1
EQ PST15 SAVE HEADER WORD
PST14 SX1 B3-B1 GET HEADER WORD FROM LAST DATA WORD
BX7 X0 SAVE (X0)
LX0 30
SB4 A0 SAVE (A0)
AX0 30
SA2 A5+2 GET PROGRAM/MONITOR MODE FLAG
MX6 1
BX2 X6*X2
LX2 1
SA0 ESMB+X2
IX1 X0+X1
SX0 A0
LX0 30
BX0 X0+X1
RE 1 READ HEADER WORD
RJ HHE HANG ON HALF-EXIT
SA1 ESMB+X2
SA0 B4+ RESTORE (A0)
BX0 X7 RESTORE (X0)
BX7 X1 MOVE HEADER WORD
PST15 SA7 A0-B1 SAVE HEADER WORD IN PP BUFFER
SB4 B1 SET PRU COUNT FOR TRANSFER
EQ PST29 TRANSFER DATA
* CALCULATE NUMBER OF PRUS (1 TO LSLB) TO TRANSFER THIS PASS.
* FOR DIRECT READ OR WRITE.
PST16 SX1 B7-LSLB
SB5 B5-B1
BX1 -X1
SA4 A5 GET SECTOR COUNT
SB4 X1
SB3 B0
LX4 59-38 CHECK FOR READ TO EOR
SB6 B0
NG X4,PST17 IF READ TO EOR
AX4 24+59-38
BX2 -X2*X4
IX7 X2-X1
PL X7,PST17 IF SECTOR COUNT NOT EXHAUSTED
ZR X2,PST10 IF WRITE EOI AFTER DIRECT TRANSFER
SB4 X2+0
PST17 SX1 100B
GT B5,B1,PST21 IF DIRECT WRITE
* PROCESS DIRECT READ.
PST18 LX5 59-20
PL X5,PST19 IF NOT END OF DISK SECTOR
SX5 B1
SA3 A3+1 GET NEXT SECTOR CONTROL WORD
LX5 12+59-20
BX6 X3
PST19 LX5 -59+20
BX7 X5*X6 EXTRACT SHORT PRU FLAG
LX5 1 POSITION SHORT PRU MASK FOR NEXT PRU
MX2 -12
ZR X7,PST20 IF FULL PRU
PL X4,/PROGRAM/HNG IF NOT READ TO EOR
SX1 B6 GET HEADER WORD FROM LAST DATA WORD
LX1 6
SB4 A0+0 SAVE (A0)
SX1 X1+77B
BX7 X0 SAVE (X0)
LX0 30
SA0 ESMB+1 USE PROGRAM MODE BUFFER
AX0 30
IX1 X0+X1
SX0 A0+0
LX0 30
BX0 X0+X1
RE 1 READ HEADER WORD
RJ HHE HANG ON HALF-EXIT
SA1 ESMB+1
SA0 B4 RESTORE (A0)
BX0 X7 RESTORE (X0)
SB4 B6+B1
LX1 12
BX7 -X2*X1
AX1 48 WORD COUNT
NZ X7,PST20 IF NOT EOF/EOI
BX2 X1
SX1 B0 WORD COUNT = 0
NZ X2,PST20 IF EOF
SB6 B6-B1 RESET PRU COUNT TO PRECEED EOI
SB4 B4-B1
PST20 SB6 B6+B1
SB3 B3+X1 INCREMENT WORD COUNT OF TRANSFER
LT B6,B4,PST18 IF MORE PRUS TO CHECK
SB2 PST24 SET RETURN ADDRESS FOR *UDP*
EQ UDP UPDATE DIRECT TRANSFER PARAMETERS
* PROCESS DIRECT WRITE.
PST21 LX5 59-20
NG X5,PST23 IF END OF DISK SECTOR
LX5 -59+20
PST22 SB6 B6+B1
BX6 -X5*X6 CLEAR SHORT PRU FLAG
SB3 B3+X1 INCREMENT WORD COUNT
LX5 1
LT B6,B4,PST21 IF MORE PRUS
SB2 PST24 SET RETURN ADDRESS
SA6 A3 REWRITE SECTOR CONTROL WORD
EQ UDP UPDATE DIRECT TRANSFER PARAMETERS
PST23 SA6 A3 STORE SECTOR CONTROL WORD
SA4 A5 CHECK REWRITE STATUS
SA3 A3+B1 READ NEXT SECTOR CONTROL WORD
LX4 59-36
SX5 10000B
BX6 X3
MX7 2
NG X4,PST22 IF REWRITE
LX7 23-59
BX6 -X7*X6 CLEAR VALID DATA FLAGS
EQ PST22 CONTINUE PROCESSING
* *PIOM* DIRECT TRANSFER PARAMETERS UPDATED
* (TRACK, SECTOR, SECTOR COUNT, SECTORS TRANSFERRED,
* AND CM ADDRESS FOR TRANSFER).
PST24 SA0 X5 ABSOLUTE CM ADDRESS OF TRANSFER
LX0 30
MX7 -30
BX0 X7*X0
BX7 -X7*X5
BX0 X0+X7
LX0 30
SX7 B5-B1
MX2 -12
SB5 B5+B1
ZR X7,PST29 IF DIRECT READ
SA1 A3+0
PL X6,PST25 IF ADVANCE TO NEXT TRACK
SA4 A5+1
MX7 -3
LX4 -12
BX6 -X2*X4
BX7 -X7*X4
NZ X7,PST26 IF NOT LAST PRU OF CONTROL WORD
PST25 BX1 X2*X1
BX6 X6+X1 SAVE LINKAGE INFORMATION
SA6 A3 REWRITE SECTOR CONTROL WORD
* TRANSFER DATA FROM PP BUFFER TO I/O BUFFER OR DIRECT FROM
* CONTROL POINT FIELD LENGTH TO I/O BUFFER.
PST26 SX7 B2 SAVE (B2)
SB2 BTSZ
SX1 B0
GE B2,B3,PST28 IF ONE BLOCK OR LESS TO WRITE
SA1 PSTA GET ADDRESS INCREMENT WORD
PST27 WE BTSZ
RJ HHE HANG ON HALF EXIT
SB2 B2+BTSZ
SA0 A0+BTSZ INCREMENT ADDRESSES
PST28 IX0 X0+X1
LT B2,B3,PST27 IF MORE FULL BLOCKS TO TRANSFER
SB2 B3-B2
WE B2+BTSZ WRITE REMAINDER OF BLOCK
RJ HHE HANG ON HALF-EXIT
EQ PST32 CHECK FOR TRANSFER COMPLETION
* TRANSFER DATA FROM I/O BUFFER TO PP BUFFER OR DIRECT FROM
* I/O BUFFER TO CONTROL POINT FIELD LENGTH.
PST29 SX7 B2 SAVE (B2)
SB2 BTSZ
SX1 B0
GE B2,B3,PST31 IF ONE BLOCK OR LESS TO READ
SA1 PSTA GET ADDRESS INCREMENT WORD
PST30 RE BTSZ
RJ HHE HANG ON HALF-EXIT
SB2 B2+BTSZ
SA0 A0+BTSZ INCREMENT ADDRESSES
PST31 IX0 X0+X1
LT B2,B3,PST30 IF MORE FULL BLOCKS TO TRANSFER
SB2 B3-B2
RE B2+BTSZ READ REMAINDER OF BLOCK
RJ HHE HANG ON HALF-EXIT
* DETERMINE IF TRANSFER COMPLETE.
PST32 SB7 B7+B4
SB2 X7 RESTORE (B2)
SA0 B6 RESTORE (A0) FOR PRU READ/WRITE
SX7 B1
SX3 B5
SB7 B7-LSLB
LX7 48-0
SA4 A5 GET PARAMETERS
LX3 -1
SX1 IFLS RETURN STATUS = INSUFFICIENT FL
NG X5,PST38 IF TRANSFER TERMINATED FOR READ TO EOR
SX1 B0+ RETURN STATUS = NO ERROR
LE B5,B1,PST34 IF PRU TRANSFER
SX0 B4 PRUS TRANSFERRED
LX4 -24
MX6 -12
LX0 6
SX2 B3+ WORD COUNT OF TRANSFER
BX6 -X6*X4 REMAINING SECTOR COUNT
IX2 X2-X0
NG X2,PST34 IF EOR ENCOUNTERED OR EOI WRITTEN
ZR B3,PST34 IF EOR/EOF/EOI ENCOUNTERED
LX4 0-37+24 CHECK FOR EOR READ OR WRITE EOI
MX0 -2
BX0 -X0*X4
BX6 X6+X0
ZR X6,PST34 IF SECTOR COUNT EXHAUSTED
NZ B7,PST6 IF NOT LAST PRU IN 4K BLOCK
SB6 PST33 SET RETURN ADDRESS FOR *BPF*
EQ BPF REBUILD PSEUDO FNT
PST33 SX2 BMRG*100B RELEASE BUFFER AND GET NEXT BUFFER
SB7 PST6 SET RETURN ADDRESS FOR *CLM*
PL X3,CLM IF DIRECT READ
* NOTE - IF SUPPORT FOR A DIRECT REWRITE OPERATION IS EVER
* NEEDED, CODE CAN BE ADDED HERE TO CHECK THE REWRITE FLAG
* AND IF SET, SET FUNCTION *BMRW* INSTEAD OF *BMWR*.
SX2 BMRF*100B+BMWR FLUSH WRITE BUFFER AND GET NEXT ONE
EQ CLM CALL I/O BUFFER MANAGER
* TRANSFER COMPLETE. RELEASE I/O BUFFER.
PST34 SA5 A5 CHECK FOR BUFFER FLUSH
MX2 42
PL X3,PST35 IF PRU READ OR DIRECT READ
LX7 59-0-48+0
LX5 59-37
PL X5,PST35 IF NO BUFFER FLUSH REQUESTED
SB7 B0+ FORCE FLUSH AND PP BUFFER RELEASE
BX1 -X1
PST35 NZ B7,PST38 IF NOT LAST PRU IN 4K BLOCK
SA3 A5+2 GET PROGRAM MODE FLAG
BX1 -X2*X1 SAVE RETURN STATUS IN MESSAGE BUFFER
BX3 X2*X3
SB6 PST36 SET PROGRAM MODE RETURN ADDRESS
BX6 X1+X3
SA6 A3
PL X3,/ECS/PIOP IF SWITCH TO PROGRAM MODE REQUIRED
* REENTRY FROM PROGRAM MODE.
* CALL I/O BUFFER MANAGER TO RELEASE READ BUFFER OR TO
* RELEASE WRITE BUFFER AND FLUSH THE BUFFER TO DISK.
PST36 SX4 B5
SB7 PST37 SET RETURN ADDRESS FOR *CLM*
LX4 -1
SX2 BMRB*100B RELEASE READ BUFFER
PL X4,CLM IF PRU READ OR DIRECT READ
SX2 BMRF*100B RELEASE WRITE BUFFER AND FLUSH TO DISK
EQ CLM CALL I/O BUFFER MANAGER
PST37 SA1 A4+B1 RESTORE RETURN STATUS
SX1 X1
EQ /ECS/PIOX EXIT
* RELEASE I/O BUFFER ASSIGNMENT.
PST38 SA2 A5+4 GET I/O BUFFER LINK
NO
LX2 CBTLS
+ TA3 X2+LSLK,CBT ** RELEASE BUFFER (UPDATE IN ONE WORD)
IX6 X3-X7 **
SA6 A3 **
EQ /ECS/PIOX EXIT
PSTA VFD 30/BTSZ,30/BTSZ ADDRESS INCREMENTS
ESMB BSS 1 MONITOR MODE EXTENDED MEMORY WORD BUFFER
BSS 3 PROGRAM MODE EXTENDED MEMORY WORD BUFFER
PBF SPACE 4,15
** PBF - *PIOM* BUFFER FLUSH (SF=5). PROGRAM MODE.
*
* ENTRY (A0) = CPU NUMBER.
* (A5) = PP *OR* ADDRESS.
* (B7) = CP ADDRESS.
* SEE *PIOM* DOCUMENTATION FOR *OR* AND *MB*
* DESCRIPTION.
*
* EXIT A0, A5, B7 SAME AS ON ENTRY.
* TO /PROGRAM/PRG, AFTER BUFFER FLUSH INITIATED.
*
* USES A - 1, 7.
* B - 6.
* X - 1, 2, 3, 4, 5, 6, 7.
*
* CALLS BPF, LBM.
PBF MX7 -12
SX1 BMFL SELECT BUFFER FLUSH FUNCTION
BX6 -X7*X5 EXTRACT FNT ORDINAL
SX7 EPNS ALLOW FLUSH ON *OFF* DEVICE
SX2 B7 CP NUMBER
LX2 18-7
BX5 X2+X6
LX1 -6
TX4 A5-1,-SP
SB6 PBF2 SET RETURN ADDRESS FOR *LBM*
BX5 X5+X1
EQ LBM CALL I/O BUFFER MANAGER
* THE BUFFER INDEX IS NOT CLEARED FOR A DIRECT ACCESS FILE
* SO THAT A DETERMINATION CAN BE MADE ON THE NEXT I/O OPERATION
* AS TO WHETHER THE BUFFER HAS BEEN WRITTEN TO THE DEVICE.
PBF2 SA1 FNTA CLEAR BUFFER INDEX
SX2 PMFT*100B
ERX3 X1 READ FNT
SX6 7700B
BX2 X2-X3
BX7 X7-X7
BX6 X6*X2
ZR X6,/PROGRAM/PRG1 IF DIRECT ACCESS FILE
R= X2,FUTL CLEAR BUFFER INDEX IN FST
IX2 X1+X2
ERX1 X2
MX3 48
BX6 X3*X1
EWX6 X2
EQ /PROGRAM/PRG1 EXIT AND CLEAR OUTPUT REGISTER
BPF SPACE 4,20
** BPF - BUILD PSEUDO FNT IN PP MESSAGE BUFFER.
*
* ENTRY REFER TO *PIOM* FOR DESCRIPTION OF *MB*.
* (A5) = *OR* ADDRESS.
* (B6) = RETURN ADDRESS.
*
* EXIT (MB+2) = 12/EQUIPMENT,12/0,12/TRACK,12/SECTOR,12/0.
* (MB+3) = 48/0,12/I/O BUFFER LINK.
* (X6) = *FST*.
* (X7) = I/O BUFFER LINK, IF NONZERO.
*
* USES A - 1, 4, 6, 7.
* X - 1, 4, 6, 7.
BPF SA4 A5+B1 GET PARAMETERS FROM MESSAGE BUFFER
MX1 -24
LX1 12
MX6 12
BX1 -X1*X4 TRACK AND SECTOR
LX4 12
MX7 0
BX6 X6*X4 EQUIPMENT
LX4 59-7-12
BX6 X6+X1
SA6 A5+3 SAVE PSEUDO FNT IN MESSAGE BUFFER
PL X4,BPF1 IF NO I/O BUFFER LINK
TX1 A5-1,-FP CALCULATE PP INDEX
AX1 3 PP INDEX INTO *PLT*
TA1 X1,PLT READ PP I/O BUFFER LINK
BX7 X1
BPF1 SA7 A6+B1 SAVE I/O BUFFER LINK IN PSEUDO FNT
JP B6 RETURN
CLM SPACE 4,35
** CLM - CALL I/O BUFFER MANAGER.
*
* ENTRY (B7) = RETURN ADDRESS.
* (A5) = *OR* ADDRESS.
* (X2) = 48/0,6/ OP,6/ BC.
* OP = I/O BUFFER MANAGER OPERATION.
* BC = BUFFER COUNT (USED FOR ONLY *BMRD* AND *BMRF*
* OPERATIONS).
* FOR *BMRD*, BC = 1 IF NON-STREAMED PRU READ.
* FOR *BMRF*, BC = *BMWR* IF WRITE.
* BC = *BMRW* IF REWRITE.
* (MB+1) .LT. 0, IF PROGRAM MODE.
* (MB+2) = PSEUDO FNT EQUIPMENT, TRACK, SECTOR.
* (MB+3) = PSEUDO FNT I/O BUFFER LINK (CONTROL BUFFER
* INDEX) FOR OP = 4, 5, 6.
*
* EXIT A0, A5, B2 SAME AS ON ENTRY.
* (B5) = *PIOM* SUBFUNCTION - 1.
* (A4) = *MB* ADDRESS.
* (X5) = (OR).
* (X6) = BUFFER ORDINAL.
* = 0 IF NO BUFFER INTERLOCKED.
* (MB) = I/O BUFFER LINK FLAG UPDATED.
* (MB+3) = I/O BUFFER LINK UPDATED.
* BUFFER LINK FOR THIS PP UPDATED IN *PLT*.
* TO /ECS/PIOR, IF I/O BUFFER BUSY.
* TO /ECS/PIOX, IF RECALL REQUIRED, I/O ERROR, ADDRESS
* ERROR OR INACCESSIBLE DEVICE.
*
* USES A - 3, 4, 6, 7.
* B - 5, 6.
* X - ALL.
*
* CALLS LBM, /ECS/PIOR, /ECS/PIOX.
CLM SX1 A5+2 PSEUDO FNT ADDRESS
LX2 -12
BX5 X1+X2
SB6 CLM1 SET *LBM* EXIT ADDRESS
EQ LBM CALL BUFFER MANAGER
* CHECK BUFFER STATUS. SAVE I/O BUFFER LINK.
* ENTRY FROM *INB* IN MONITOR MODE.
CLM1 UX0,B5 X5
SA4 A5+B1
AX0 42
MX1 1
SB5 X0-1 *PIOM* SUBFUNCTION - 1
SX7 X6 BUFFER ORDINAL (IF INTERLOCKED)
MX0 5
BX2 X0*X6 BUFFER MANAGER STATUS
SA7 A5+4 UPDATE PSEUDO FNT
LX1 7-59
SX6 X6 BUFFER ORDINAL (0 IF NOT INTERLOCKED)
BX7 -X1*X4 CLEAR PP BUFFER RESERVED FLAG
ZR X6,CLM2 IF BUFFER NOT INTERLOCKED
TX3 A5-1,-FP
AX3 3
BX7 X1+X4 SET PP BUFFER RESERVED FLAG
TA6 X3,PLT STORE PLT ENTRY
CLM2 SA7 A4 UPDATE *CHRV* IN MESSAGE BUFFER
MX4 1
NZ X2,CLM3 IF BUFFER MANAGER STATUS NONZERO
JP B7 EXIT
CLM3 SX1 -RCLS SET RECALL STATUS
NG X2,/ECS/PIOX IF RECALL
LX2 59-58
SX3 B5+B1 *PIOM* SUBFUNCTION
NG X2,/ECS/PIOR IF BUFFER BUSY
LX3 -1
PL X3,CLM4 IF WRITE REQUEST
LX4 48-59
CLM4 BX1 X6
ZR X6,CLM5 IF BUFFER NOT INTERLOCKED
LX1 CBTLS
+ TA3 X1+LSLK,CBT **** PERFORM IN ONE WORD ****
IX6 X3-X4 **** PERFORM IN ONE WORD ****
SA6 A3 **** PERFORM IN ONE WORD ****
CLM5 LX3 X2,B1
LX2 X3,B1
PL X3,CLM6 IF NOT I/O ERROR
SX4 B1
LX4 6
BX7 -X4*X7
SA7 A7 CLEAR *1MV* FLUSH FLAG
SA1 A5+2 CHECK PROGRAM MODE FLAG IN (MB+1)
SA3 FCBI BUFFER WITH ERROR (PROGRAM MODE)
NG X1,CLM5.1 IF PROGRAM MODE
SA3 FCBM BUFFER WITH ERROR (MONITOR MODE)
CLM5.1 MX0 -6
LX3 CBTLS
TA1 X3+HSLK,CBT
LX1 -48
BX1 -X0*X1 ERROR CODE FROM DRIVER
BX1 -X1 CAUSE PP I/O BUFFER RELEASE
EQ /ECS/PIOX EXIT
CLM6 SX1 -ADDE
PL X2,/ECS/PIOX IF ADDRESS ERROR
SX1 -LNRE SET *LOGICAL NOT READY* ERROR STATUS
EQ /ECS/PIOX EXIT
IDE SPACE 4,10
** IDE - IGNORE DATA AFTER EOI WRITE.
*
* ENTRY (B4) = RETURN ADDRESS.
* (X3) = FWA CONTROL BUFFER.
* (X7) = MOD 40B OF SECTOR CONTAINING EOI.
*
* USES A - 2, 7.
* X - 1, 2, 7.
IDE BSS 0 ENTRY
SX1 X7
AX7 CBTLS
IX2 X3+X7
SA2 X2 CONTROL WORD CONTAINING EOI
SX7 B1
LX1 -2
BX1 -X1*X7 SET SECOND SECTOR FLAG ONLY OR NO FLAG
IDE1 LX1 22-0 POSITION VALID DATA FLAGS
BX7 X2+X1
SA7 A2+ REWRITE CONTROL WORD
SX7 A2-PAD4
IX7 X7-X3
ZR X7,/MONITOR/RB4 IF LAST CONTROL WORD COMPLETED
SX1 3 SET BOTH FLAGS
SA2 A2+1 GET NEXT CONTROL WORD
EQ IDE1 COMPLETE REMAINING CONTROL WORDS
UDP SPACE 4,30
** UDP - UPDATE *PIOM* DIRECT TRANSFER PARAMETERS.
*
* ENTRY (A5) = PP *OR* ADDRESS.
* (B2) = RETURN ADDRESS.
* (B3) = WORD COUNT OF TRANSFER.
* (B4) = NUMBER OF SECTORS TO TRANSFER.
* SEE *PIOM* DOCUMENTATION FOR *OR* AND *MB*
* DESCRIPTION.
*
* EXIT PARAMETERS IN *OR* AND *MB* ADVANCED
* BY SPECIFIED SECTOR AND WORD COUNT.
* ADVANCES TO NEXT TRACK IF NECESSARY.
* (B3) = WORD COUNT OF TRANSFER, UPDATED IF TRANSFER
* PREMATURELY TERMINATED.
* (B4) = SECTOR COUNT OF TRANSFER, UPDATED IF TRANSFER
* PREMATURELY TERMINATED.
* (X6) .LT. 0, IF NO ADVANCE TO NEXT TRACK.
* (X6) .GT. 0, NEXT TRACK.
* (X5) = ABSOLUTE CM ADDRESS TO BEGIN TRANSFER, AND
* INSUFFICIENT FL FLAG (IF BIT 59 SET).
* TO /PROGRAM/HNG, IF NEXT TRACK NOT RESERVED,
* IF SECTOR COUNT TRANSFER ATTEMPTED BEYOND FL,
* OR IF LWA SPECIFICATION INVALID FOR READ TO EOR.
*
* USES A - 0, 1, 2, 4, 5, 7.
* B - 3, 4, 6.
* X - 1, 2, 4, 5, 6, 7.
UDP BSS 0 ENTRY
TX4 A5-1,-FP
LX4 PPXES-PPCES
MX1 -12
TA4 X4+ACPP,FPX GET CP/PCP ASSIGNMENT
SA5 A5+ GET *OR* PARAMETERS
LX4 -24
SX7 X4+ CP/PCP ADDRESS
BX4 X5 CHECK FOR READ TO EOR
SA2 X7+FLSW GET FL OF CP/PCP
LX4 59-38
BX7 -X1*X2
LX7 6 FL
SA0 77B
BX2 X7 SET MAXIMUM LWA+1 TRANSFER = FL
PL X4,UDP2 IF NOT READ TO EOR
SX1 X5+B3 RELATIVE CM FWA TRANSFER + WORD COUNT
LX5 -18
SX1 X1-1 LWA OF TRANSFER
SX6 X5 LWA SPECIFICATION
LX5 18
ZR X6,UDP1 IF NO LWA SPECIFICATION
NG X6,/PROGRAM/HNG IF INVALID LWA SPECIFICATION
IX2 X7-X6
NG X2,/PROGRAM/HNG IF LWA SPECIFICATION .GT. FL
BX2 X6 SET MAXIMUM LWA+1 TRANSFER
UDP1 IX1 X1-X2
NG X1,UDP2 IF TRANSFER DOES NOT EXCEED MAXIMUM
BX6 -X1 TERMINATE TRANSFER AT MAXIMUM ADDRESS
SB3 X6+B3
SB3 B3-1
SX6 B3+A0 RECALCULATE SECTOR COUNT
AX6 6
SB4 X6
UDP2 SX6 X5+B3 RELATIVE FWA TRANSFER + WORD COUNT
MX2 -18
IX7 X7-X6
BX6 -X2*X6
NG X7,/PROGRAM/HNG IF TRANSFER BEYOND FL
BX7 X2*X5 ADVANCE RELATIVE CM ADDRESS
BX7 X7+X6
BX5 -X2*X5
SA2 A2 GET RA OF CONTROL POINT
MX6 -RMSK
LX2 -RSHF
BX2 -X6*X2
LX2 6
IX5 X5+X2
MX6 1
BX1 -X1*X6 SET INSUFFICIENT FL FLAG
SX2 B3+A0 COMPUTE SECTOR COUNT
BX5 X5+X1
AX2 6
LX7 -24
NG X4,UDP3 IF READ TO EOR
IX7 X7-X2 DECREMENT SECTOR COUNT
UDP3 LX7 24
SA4 A5+B1 GET *MB* PARAMETERS
SA7 A5+ UPDATE *PIOM* *OR* PARAMETERS
LX4 12
MX6 -12
IX7 X4+X2 ADVANCE TOTAL SECTORS TRANSFERRED
BX7 -X6*X7 CLEAR POSSIBLE OVERFLOW
BX4 X6*X4 CLEAR OLD SECTORS TRANSFERRED FIELD
BX4 X4+X7
LX4 -24
IX7 X4+X2 ADVANCE CURRENT SECTOR
MX2 -12
LX4 -24
BX6 -X2*X4 EST ORDINAL
CX1 X6,EST CONVERT EST ORDINAL TO OFFSET
TA1 X1+EQDE,EST GET EST ENTRY
BX1 -X2*X1 MST ADDRESS / 10B
LX1 3
SA1 X1+MDGL GET SECTOR LIMIT
BX6 -X2*X1
BX1 -X2*X7
IX6 X1-X6
NG X6,UDP4 IF NOT END OF TRACK
BX6 -X2*X4 EQUIPMENT
LX4 12-2
CX1 X6,EST CONVERT EST ORDINAL TO OFFSET
TA1 X1+EQDE,EST READ EST ENTRY
MX6 -9
BX1 -X2*X1 MST ADDRESS / 10B
BX4 -X6*X4 TRT WORD INDEX
LX1 3
AX7 12 CLEAR CURRENT SECTOR
SA1 X1+TRLL SET FWA OF TRT
IX1 X1+X4
MX6 -2
SA1 X1+ READ TRT WORD
BX6 -X6*X7 TRT BYTE INDEX
SX4 12
IX6 X6*X4
SB6 X6
LX1 B6
PL X1,/PROGRAM/HNG IF NO NEXT TRACK
LX1 12
BX6 -X2*X1 GET NEXT TRACK
BX7 X2*X7 CLEAR TRACK
BX7 X7+X6 SET NEXT TRACK
LX7 12
UDP4 LX7 12 UPDATE *PIOM* *MB* PARAMETERS
SA7 A4
JP B2 RETURN
DIB SPACE 4,15
** DIB - DROP I/O BUFFERS.
*
* ENTRY (B5) = FIRST FREE TRACK POINTER.
* (B6) = FWA TRT.
* (A5) = PP *OR* ADDRESS.
* (X3) = TRACK AND PRU INCREMENT.
* (X4) = -3777B.
* (X6) = NUMBER OF TRACKS AND PRU-S DROPPED.
* (X7) = TRACK POINTER.
*
* EXIT ABOVE REGISTERS RESTORED AS ON ENTRY.
* (B7) .NE. 0 TO INDICATE DEVICE.
*
* USES A - 1, 3, 6, 7.
* B - 2, 5, 6.
* X - 1, 2, 3, 4, 5, 6, 7.
*
* CALLS LBM.
DIBA CON 0 PSEUDO FNT (EQUIPMENT, TRACK, SECTOR)
DIB1 SB5 B2 FIRST FREE TRACK POINTER
SA3 SCRA TRACK AND PRU INCREMENT
SB6 B7 FWA TRT
SA1 A3+B1 TRACK POINTER
BX7 X1
MX4 -11
SA1 A1+B1 NUMBER OF TRACKS AND PRU-S DROPPED
BX6 X1
EQ /PROGRAM/DTC5.1 RETURN TO DROP REMAINING TRACKS
DIB SA5 A5+ CHECK FOR PROGRAM MODE
SB2 B5 SAVE (B5)
LX5 59-58
SA7 B1+SCRA SAVE (W6)
PL X5,/PROGRAM/DTC5.1 IF NOT PROGRAM MODE
SB7 B6 SAVE (B6)
SA6 A7+B1 SAVE (X6)
BX6 X3
SX3 B1
SA6 A7-B1 SAVE (X3)
LX4 -12
SA1 A5 BUILD PSEUDO FNT
LX3 35-0
LX7 2+24
SX5 BMDB DROP I/O BUFFERS
LX1 12
BX1 -X4*X1 EQUIPMENT
SX2 DIBA-1 PSEUDO FNT ADDRESS
LX5 -6
BX7 X1+X7
SB6 DIB1 RETURN ADDRESS FOR *LBM*
BX7 X7+X3
BX5 X5+X2
SA7 X2+B1
* EQ LBM CALL I/O BUFFER MANAGER
LBM SPACE 4,45
** LBM - I/O BUFFER MANAGER.
*
* ENTRY (X5) = 6/OP, 6/PA, 24/0, 6/CP, 18/FNTA
* OP = OPERATION CODE.
* BMRD = READ BUFFER.
* BMWR = WRITE BUFFER.
* BMRW = REWRITE BUFFER.
* BMVI = VALIDATE AND INTERLOCK BUFFER.
* BMRG = RELEASE READ BUFFER AND GET NEXT.
* BMRB = RELEASE READ BUFFER.
* BMFL = FLUSH BUFFER.
* BMRF = RELEASE AND FLUSH WRITE BUFFER.
* BMFW = FLUSH ALL WRITE BUFFERS.
* BMTR = TERMINATE SHARED DEVICE READ
* ACCESS.
* BMTW = TERMINATE SHARED DEVICE WRITE
* ACCESS.
* BMDB = DROP ALL BUFFERS FOR FILE.
* BMDD = DROP ALL BUFFERS ON DEVICE.
* BMCR = COMPLETE SHARED DEVICE READ ACCESS
* REQUEST.
* BMCW = COMPLETE SHARED DEVICE WRITE ACCESS
* REQUEST.
* PA = OPERATION CODE DEPENDENT PARAMETER.
* FOR *BMRD* - BUFFER COUNT.
* 0 = USE DEFAULT BUFFER COUNT.
* BUFFER COUNT IF .NE. 0.
* FOR *BMWR* - RECALL ALLOWED FLAG.
* 0 = RECALL ALLOWED.
* 1 = RECALL NOT ALLOWED.
* FOR *BMVI* - OPERATION CODE TO BE
* EXECUTED IF BUFFER CANNOT BE
* INTERLOCKED IN MONITOR MODE.
* *BMRD* = INTERLOCK FOR READ.
* *BMWR* = INTERLOCK FOR WRITE.
* FOR *BMRF* - WRITE OPERATION CODE TO BE
* EXECUTED ON NEXT BUFFER AFTER
* FLUSH OF CURRENT BUFFER.
* 0 = NO WRITE OPERATION.
* *BMWR* = WRITE BUFFER.
* *BMRW* = REWRITE BUFFER.
* FOR *BMFW* - RESTART 819 I/O FLAG.
* 0 = DO NOT RESTART 819 I/O.
* RESTART 819 I/O IF .NE. 0.
* FOR *BMCR*, *BMCW* - STATUS CODE.
* 0 = NORMAL COMPLETION.
* 1 = *BRT* ENTRY EVICTED BY *MTE*.
* 2 = OTHER MACHINE CANNOT RELEASE
* WRITE ACCESS.
* CP = CONTROL POINT NUMBER IF PSEUDO-PP CALL.
* = 0 IF PP CALL.
* FNTA = FNT OFFSET IF PSEUDO-PP CALL.
* = PSEUDO FNT ADDRESS IF PP CALL.
* = EST ORDINAL IF OP = *BMFW* OR *BMDD*.
* = 0 IF *BMFW* TO PROCESS ALL EQUIPMENTS.
* (B6) = EXIT ADDRESS.
*
* EXIT (X6) = 5/ST, 43/0, 12/BI
* ST = STATUS.
* BIT 59 SET IF RECALL.
* BIT 58 SET IF BUFFER BUSY.
* BIT 57 SET IF I/O ERROR.
* BIT 56 SET IF INACCESSIBLE DEVICE.
* BIT 55 SET IF ADDRESS ERROR.
* BI = BUFFER INDEX.
* (FNTA) = ABSOLUTE FNT ADDRESS.
*
* USES X - 1, 2, 3, 4, 5, 6, 7.
* A - 1, 2, 3, 6, 7.
* B - 3, 6.
*
* CALLS DAB, FAW, FLB, RDB, REB, REN, RFB, RWB, WTB.
LBM SB3 SCRB SET SUBROUTINE CALL STACK POINTER
SX6 B6 SAVE RETURN ADDRESS
MX1 -6 GET FUNCTION CODE
SA6 RETA
LX5 6
BX7 -X1*X5 GET PRIMARY SUBFUNCTION
LX5 6 GET BUFFER COUNT/SECONDARY SUBFUNCTION
SA7 OPRC SAVE OPERATION CODE
SB6 X7
BX6 -X1*X5
LX5 -12
SA6 OPAR SAVE SUBFUNCTION PARAMETER
MX1 -24
SA6 BCNT
BX6 -X1*X5
SA6 RPRM
SX7 X6 GET FNT RELATIVE ADDRESS
AX6 18 GET CP NUMBER
ZR X6,LBM3 IF PP CALL
BX1 X6 GET CP RA
LX1 7
SA1 X1+FLSW
MX2 -RMSK
LX1 -RSHF
BX1 -X2*X1
LX1 6
IX7 X1-X7 FORM ADDRESS IN NEGATIVE FL
LBM3 SA7 FNTA SAVE FNT ADDRESS OR EST ORDINAL
SX6 B6-BMFW
ZR X6,LBM6 IF FLUSHING ALL WRITE BUFFERS
SX6 B6-BMDD
ZR X6,LBM6 IF DROPPING ALL BUFFERS
SX1 B1 GET FNT WORD 1
IX1 X7+X1
ERX1 X1
LX1 -12
MX7 -LSLBS
BX4 -X7*X1
MX5 -12
BX7 -X5*X1
SA7 OLSC
IX7 X7-X4 SET LOGICAL SECTOR TO START OF 4K BUFFER
LX1 -12 GET LOGICAL TRACK
SA7 LSEC
BX7 -X5*X1
LX1 -24 GET EST ORDINAL
SA7 LTRK
MX2 -9
BX1 -X2*X1 EST ORDINAL
CX2 X1,EST CONVERT EST ORDINAL TO OFFSET
SX6 B1
TA2 X2+EQDE,EST READ EST ENTRY
TX4 A5-1,-SP
SA3 CHRV
ZR X4,LBM4 IF PSEUDO PP
SA3 A5+1
LBM4 SX7 1
LX7 57-0
BX7 X7*X2
ZR X7,LBM5 IF NOT SHARED DEVICE
SX7 X1+ SET EST ORDINAL TO INDICATE SHARED DEVICE
LBM5 SA7 SDEO
BX7 -X5*X2 MST ADDRESS/10B
LX6 5-0
LX7 3
BX6 X6*X3 GET *READSYS* BIT FROM *CHRV*
BX2 X7
LX6 55-5
SA6 SFRF SET/CLEAR SYSTEM FILE READ FLAG
SA7 MSTA SAVE MST ADDRESS
SA2 X2+DILL
MX7 -6
BX7 -X7*X2
SA7 AILE ALGORITHM INDEX FOR *LDAM* EQUIPMENT
SA1 FNTA GET FNT WORD 2
SX7 B1+B1
IX1 X1+X7
ERX1 X1
BX7 -X5*X1 GET BUFFER INDEX
SA7 BIDX
SA3 A2+BDLL-DILL UNPACK READ AHEAD PARAMETERS
SX7 77B
BX6 X7*X3
AX3 6
SA6 RBTH READ BUFFER THRESHOLD
BX6 X7*X3
AX3 6
SA6 DBAT BUFFER ALLOCATION TRIGGER
SA2 BCNT
BX6 X7*X3
SA6 DCNT
NZ X2,LBM6 IF BUFFER COUNT SUPPLIED
SA6 BCNT
LBM6 SA1 A5 REREAD OUTPUT REGISTER
MX7 -6
BX6 X6-X6
BX7 -X7*X1 CHANNEL NUMBER, IF SELECTED BY CALLER
SA7 CHAN
SA6 FCBI
SA6 NCHV
SA6 DTSF CLEAR DATA STREAMING FLAG
PX7 X6 INITIALIZE BEST SYSTEM DEVICE ACTIVITY
SA6 CHEA
SA7 BSDA
SA6 SYDI
TNO /BUFIO/LBS,BIOMMF
JP B6+LBMA PROCESS FUNCTION
* ENTER FUNCTION PROCESSOR.
* (B3) = SUBROUTINE CALL STACK POINTER.
LBMA BSS 0
EQ RDB READ BUFFER
ERRNZ BMRD
EQ WTB WRITE BUFFER
ERRNZ BMWR-1
EQ RWB REWRITE BUFFER
ERRNZ BMRW-2
EQ * VERIFY/INTERLOCK MUST BE CALLED DIRECTLY
ERRNZ BMVI-3
EQ REB RELEASE READ BUFFER AND GET NEXT BUFFER
ERRNZ BMRG-4
EQ REN RELEASE READ BUFFER
ERRNZ BMRB-5
EQ FLB FLUSH BUFFER
ERRNZ BMFL-6
EQ RFB RELEASE AND FLUSH BUFFER
ERRNZ BMRF-7
EQ FAW FLUSH ALL WRITE BUFFERS
ERRNZ BMFW-10B
TEQ (/BUFIO/RRA,BIOMMF,/PROGRAM/HNG)
ERRNZ BMTR-11B
TEQ (/BUFIO/RWA,BIOMMF,/PROGRAM/HNG)
ERRNZ BMTW-12B
EQ DAB DROP ALL BUFFERS
ERRNZ BMDB-13B
EQ DBD DROP ALL BUFFERS ON DEVICE
ERRNZ BMDD-14B
TEQ (/BUFIO/CRR,BIOMMF,/PROGRAM/HNG)
ERRNZ BMCR-15B
TEQ (/BUFIO/CWR,BIOMMF,/PROGRAM/HNG)
ERRNZ BMCW-16B
* PROCESS NORMAL COMPLETION.
LBMX SA3 PUTO COUNT BUFFER REQUEST
SX7 B1+
LX3 PUTLS
SX6 B0+ CLEAR STATUS
+ TA1 X3+ACST,PUT **** PERFORM IN ONE WORD ****
IX7 X1+X7 **** PERFORM IN ONE WORD ****
SA7 A1 **** PERFORM IN ONE WORD ****
* EXIT BUFFER MANAGER WITH STATUS FROM *X6*.
LBMXS SA2 FCBI
ZR X2,LBM9 IF NO BUFFER FOR RESPONSE
BX1 X2
LX2 CBTLS
TA3 X2+HSLK,CBT GET DRIVER STATUS
MX4 1
BX2 X4*X3 GET I/O ERROR FLAG
LX2 57-59
BX6 X6+X2 MERGE STATUS AND ERROR FLAG
SX4 5
LX4 55-0
BX2 X4*X6 I/O ERROR AND ADDRESS ERROR FLAGS
TX5 A5-1,-SP
ZR X5,LBM7 IF PSEUDO PP
SA3 NCHV
SA4 A5+B1
LX4 59-6
NZ X3,LBM7 IF NO *CHRV* DATA PRESENT
NG X4,LBM8 IF *1MV* RECALL AFTER FLUSH
LBM7 NZ X2,LBM9 IF I/O OR ADDRESS ERROR
LBM8 BX6 X6+X1 MERGE STATUS AND BUFFER ORDINAL
LBM9 SA1 RETA GET RETURN ADDRESS
SB6 X1
BX7 X7-X7 CLEAR CONTROL BUFFER INTERLOCK
SA7 INLB
SA7 MSTA CLEAR MST ADDRESS FOR *CDAM*
SA5 A5+
JP B6 RETURN
PARM BSS 0 PARAMETER AREA
AILE BSS 1 ALGORITHM INDEX FOR *LDAM* EQUIPMENT
BAFS BSS 1 *BFMM* ABSOLUTE FST ADDRESS
BCNT BSS 1 BUFFER COUNT PARAMETER
BDDC BSS 1 *BFMM* DEVICE DESCRIPTORS AND BUFFER COUNT
BFST BSS 1 *BFMM* ORIGINAL FST ENTRY
BIDX BSS 1 BUFFER INDEX PARAMETER
BSDA BSS 1 BEST SYSTEM DEVICE ACTIVITY
BSDI BSS 1 INDEX OF BEST SYSTEM DEVICE
CAFL BSS 1 ROUTINE *CHA* - FORWARD LINK STORAGE
CETS BSS LLCV+1 ROUTINE *CHA* - EVICT TABLE STORAGE
CHAD BSS 1 ROUTINE *CHA* - HASH ADDRESS STORAGE
CHAN BSS 1 CHANNEL SELECTED BY CALLER
CHEA BSS 1 CURRENT HASH ENTRY ADDRESS
CLST BSS 1 CURRENT LIST
CSBS BSS 1 ROUTINE *CHA* SCRATCH
DBAT BSS 2 DATA BUFFER ALLOCATION TRIGGER
DCNT EQU DBAT+1 DEFAULT BUFFER COUNT
DTSF BSS 1 DATA STREAMING FLAG SET BY *REB*
FBLB BSS 1 FLUSH ALL WRITE BUFFERS LINK BYTE
FCBI BSS 1 FIRST CONTROL BUFFER (PROGRAM MODE)
FCBM BSS 1 FIRST CONTROL BUFFER (MONITOR MODE)
FNTA BSS 1 FNT ADDRESS
HTA BSS 1 HASH TABLE BASE ADDRESS
LSEC BSS 1 LOGICAL SECTOR
LTRK BSS 1 LOGICAL TRACK
MSTA BSS 1 MST ADDRESS
NCHV BSS 1 *CHRV* PRESENT FLAG
OLSC BSS 1 ORIGINAL LOGICAL SECTOR
OPAR BSS 1 OPERATION CODE PARAMETER
OPRC BSS 1 BUFFER MANAGER OPERATION CODE
PUTO BSS 1 24/SUSL, 18/RLSN, 18/PUTO
* SUSL = SINGLE UNIT SECTOR LIMIT
* RLSN = RELATIVE SECTOR NUMBER IN UNIT
* PUTO = *PUT* ORDINAL
RBCT BSS 2 READ BUFFER COUNT
RBTH EQU RBCT+1 READ BUFFER THRESHOLD
RETA BSS 1 RETURN ADDRESS (USED IN ROUTINE *LBM*)
RPRM BSS 1 RECALL PARAMETER
SDEO BSS 1 EST ORDINAL IF SHARED DEVICE
SDUR CON 0 SHARED DEVICE UNABLE TO RELEASE ACCESS
SDWR CON 0 SHARED DEVICE WRITE ACCESS REQUESTED
SFRF BSS 1 SYSTEM FILE READ FLAG
SYDI BSS 1 SYSTEM DEVICE TABLE INDEX
PARML EQU *-PARM PARAMETER BLOCK LENGTH
INLB CON 0 CONTROL BUFFER INTERLOCK CELL
SPACE 4,10
** SCRATCH AREA.
SCRA BSS 14B *DTKM* REGISTER SAVE AREA
SCRB BSS 14B *LBM* PROGRAM MODE REGISTER AREA
TITLE FUNCTION PROCESSORS.
CDA SPACE 4,15
** CDA - CHECK DEVICE ACCESSIBILITY.
*
* ENTRY (A5) = PP OUTPUT REGISTER ADDRESS.
* (B5) = EXIT ADDRESS.
* (X5) = -7777B.
* (MSTA) = MST ADDRESS.
*
* EXIT (X6) = 0 IF DEVICE MAY BE ACCESSED.
* = 3/0, 1/1, 56/0 IF DEVICE MUST NOT BE ACCESSED.
* TO *LBMXS* IF DEVICE IS INACCESSIBLE.
*
* USES A - 2, 3, 4.
* X - 2, 3, 4, 6.
CDA BSS 0 ENTRY
SA4 A5+1
TX3 A5-1,-SP
NZ X3,CDA0 IF NOT PSEUDO PP
SA4 CHRV
CDA0 SA3 MSTA
BX6 X6-X6
LX4 59-5
SA2 X3+DALL GET DEVICE STATUS
SA3 INWL
LX2 59-55
LX3 59-15
PL X2,CDA2 IF DEVICE IS ACCESSIBLE
NG X4,CDA2 IF SYSTEM FILE READ
NG X3,CDA2 IF DEADSTART SEQUENCING NOT COMPLETE
SX3 X2+B1
LX4 59-1-59+5
ERRNZ EPAD-2 CODE DEPENDS ON VALUE
NG X4,CDA2 IF CALLER MAY ACCESS DOWN DEVICE
LX3 59-2
LX4 59-2-59+1
NG X3,CDA1 IF DEVICE IS DOWN
NG X4,CDA2 IF CALLER MAY ACCESS OFF/SUSPECT DEVICE
TX3 A5-1,-FP
LX3 PPXES-PPCES
TA3 X3+ACPP,FPX
SX3 X3 CONTROL POINT ADDRESS
SA3 X3+JCIW
SA4 A3+SEPW-JCIW
LX3 -24
BX3 -X5*X3
SX3 X3-LSSI-1
PL X3,CDA2 IF SUBSYSTEM
SA3 A3+TFSW-JCIW
LX4 59-56
LX3 -48
NG X4,CDA2 IF *UTL=* ENTRY POINT IS PRESENT
BX3 -X5*X3
CX4 X3,EJT CONVERT EJT ORDINAL TO OFFSET
TA4 X4+SCHE,EJT
LX2 59-57-59+55
LX4 59-34
ERRNZ UCTM-2 CODE DEPENDS ON VALUE
NG X4,CDA2 IF UNCONDITIONAL JOB TERMINATION IS SET
SA3 OPRC
NG X2,CDA1 IF DEVICE IS OFF
SX2 X3-BMWR
ZR X2,SBB IF WRITE OPERATION ON SUSPECT DEVICE
SX2 X3-BMRW
ZR X2,SBB IF REWRITE OPERATION ON SUSPECT DEVICE
SX2 X3-BMFO
PL X2,CDA2 IF OPERATION ALLOWED ON SUSPECT DEVICE
CDA1 SX6 B1 SET *INACCESSIBLE* STATUS
LX6 56
EQ LBMXS EXIT
CDA2 JP B5 EXIT
DAB SPACE 4,15
** DAB - DROP ALL BUFFERS.
*
* ENTRY INPUT REQUEST DECODED BY LBM MAIN ROUTINE.
*
* EXIT CONTROL GIVEN TO LBMX.
*
* USES A - 2, 3, 6, 7.
* B - 6.
* X - 0, 1, 2, 3, 6, 7.
*
* CALLS CHA, DCC, DCH, LCC.
DAB BSS 0 ENTRY
SX7 B1 INDICATE PP HAS NO *CHRV* DATA
SA7 NCHV
SX7 -B1 SET LOCATE HASH TABLE ENTRY
SB6 DAB1 RETURN ADDRESS FOR *CHA*
EQ CHA CALCULATE HASH ADDRESS
DAB1 ZR X1,LBMX IF HASH TABLE BUSY
SA2 X1 GET HASH ENTRY
MX7 -12
DAB2 ZR X2,LBMX IF NO ENTRIES TO PROCESS
BX6 -X7*X2
BX0 -X7*X2
SA6 INLB SET *CBT* INTERLOCK
LX6 CBTLS
MX7 -48
TA2 X6+IOLK,CBT GET I/O INTERLOCK FROM *CBT*
SA3 A2+B1 GET HASH LINK WORD FROM *CBT*
ERRNZ HSLK-IOLK-1 CODE DEPENDS ON VALUE
BX6 X6-X6
NG X2,DAB6 IF I/O INTERLOCK SET
BX6 X3 SAVE HASH LINK WORD
SA3 A3+B1
ERRNZ LSLK-HSLK-1 CODE DEPENDS ON VALUE
SA6 DABA
BX6 -X7*X2 CLEAR I/O FLAGS
BX7 -X7*X3 CLEAR ACCESS COUNT
SA6 A2
SA7 A3
SB6 DAB3 RETURN ADDRESS FOR *DCH*
EQ DCH DELINK *CBT* FROM HASH LINK
DAB3 BX1 X0
SX2 B1
LX1 CBTLS
LX2 57
TA1 X1+IOLK,CBT
BX7 -X2*X1 CLEAR WRITE FLAG
SA7 A1
SB6 DAB4 RETURN ADDRESS FOR *DCC*
EQ DCC DELINK *CBT* FROM LIST LINK
DAB4 SB6 DAB5 RETURN ADDRESS FOR *LCC*
TX1 EMTB
EQ LCC LINK *CBT* TO EMPTY LIST
DAB5 SA3 DABA FIND NEXT *CBT* ON HASH LINK
BX6 X6-X6
DAB6 AX3 24
MX7 -12
SA6 INLB CLEAR *CBT* INTERLOCK
BX2 -X7*X3 NEXT *CBT* ORDINAL
EQ DAB2 LOOP FOR NEXT *CBT*
DABA BSS 1 CURRENT *HSLK* WORD
DBD SPACE 4,15
** DBD - DROP ALL BUFFERS ON SPECIFIED DEVICE.
*
* ENTRY INPUT REQUEST DECODED BY LBM MAIN ROUTINE.
*
* EXIT TO *LBMX* IF ALL BUFFERS DROPPED.
* TO *SBB* IF NOT ALL BUFFERS DROPPED.
*
* USES X - 0, 1, 2, 3, 4, 6, 7.
* A - 1, 2, 3, 4, 6.
* B - 4, 5, 6.
*
* CALLS DCC, DCH, LCC.
DBD BSS 0 ENTRY
* SET FIRST PUT ORDINAL.
SA1 FNTA GET EST ORDINAL
MX0 -12
CX2 X1,EST
TA1 X2+EQDE,EST
BX1 -X0*X1
LX1 3 MST ADDRESS
SA3 A1+EQAE-EQDE
MX2 -4
LX3 -18
BX3 -X2*X3 PARTITION NUMBER
SX2 HATLE
IX6 X2*X3 HASH TABLE PARTITION OFFSET
SA6 DBDC
SA1 X1+DILL
SB4 LBMX SET EXIT ADDRESS FOR ALL BUFFERS DROPPPED
LX1 -24
BX6 -X0*X1
SA6 DBDA SET FIRST PUT ORDINAL
* SET HASH TABLE ADDRESS AND SAVE NEXT PUT ORDINAL.
DBD1 SA1 DBDA GET PUT ORDINAL
ZR X1,RB4 IF ALL UNITS PROCESSED, EXIT
LX1 PUTLS
TA2 X1+HSCT,PUT
MX0 -12
BX6 -X0*X2
SA6 A1 SAVE NEXT PUT ORDINAL
MX0 -18
LX2 -24
BX6 -X0*X2
SA3 DBDC GET HASH TABLE PARTITION OFFSET
SB5 -B1 INITIALIZE HASH TABLE INDEX
IX6 X6+X3 ADD HASH TABLE PARTITION OFFSET
SA6 DBDB SAVE HASH TABLE ADDRESS
* GET NEXT HASH TABLE ENTRY.
DBD2 SA1 DBDB GET HASH TABLE ADDRESS
SB5 B5+1 ADVANCE HASH TABLE INDEX
SX2 B5-HATLE
ZR X2,DBD1 IF END OF HASH TABLE
SA1 X1+B5 GET HASH ENTRY
MX7 -12
BX7 -X7*X1 SET FIRST BUFFER ORDINAL
* DROP INACTIVE BUFFERS.
DBD3 SA7 INLB SET BUFFER INTERLOCK
BX0 X7 NEXT BUFFER ORDINAL
LX7 CBTLS SET CBT OFFSET
ZR X0,DBD2 IF END OF BUFFERS IN ENTRY
TA2 X7+IOLK,CBT GET I/O INTERLOCK AND WRITE FLAG
TA3 X7+HSLK,CBT GET HASH LINK
TA4 X7+LSLK,CBT GET ACTIVITY COUNT
SX1 5000B
MX6 12
LX1 48
MX7 -12
BX2 X1*X2 I/O INTERLOCK AND WRITE FLAG
LX3 -24
BX4 X6*X4 ACTIVITY COUNT
BX7 -X7*X3 SET NEXT BUFFER ORDINAL
BX6 X2+X4
ZR X6,DBD4 IF NO ACTIVITY REMAINS
SB4 SBB SET BUFFER BUSY EXIT
EQ DBD3 CHECK NEXT BUFFER
DBD4 SB6 DBD5 SET *DCH* RETURN ADDRESS
EQ DCH DELINK BUFFER FROM HASH TABLE
DBD5 SB6 DBD6 SET *DCC* RETURN ADDRESS
EQ DCC DELINK BUFFER FROM CURRENT LIST
DBD6 SB6 DBD3 SET *LCC* RETURN ADDRESS
TX1 EMTB
EQ LCC LINK BUFFER TO EMPTY LIST
DBDA BSS 1 NEXT PUT ORDINAL
DBDB BSS 1 HASH TABLE ADDRESS
DBDC BSS 1 HASH TABLE PARTITION OFFSET
FAW SPACE 4,15
** FAW - FLUSH ALL WRITE BUFFERS.
*
* ENTRY INPUT REQUEST DECODED BY LBM MAIN ROUTINE.
*
* EXIT CONTROL GIVEN TO LBMX.
*
* USES A - 1, 2, 3, 6.
* B - 5, 6.
* X - 0, 1, 2, 3, 5, 6.
*
* CALLS CDA, DCC, LCC.
FAW BSS 0 ENTRY
TX6 DWTB SET DATA WRITTEN AS CURRENT LIST
SA6 CLST
TA1 WRTB GET FIRST WRITE BUFFER
SX6 X1+ SAVE LINK BYTE
SA6 FBLB
FAW1 SA1 FBLB READ NEXT CONTROL BUFFER
ZR X1,FAW5 IF ALL BUFFERS FLUSHED
SB6 X1
SX6 X1 SET CONTROL BUFFER INTERLOCK
MX5 -12
LX1 CBTLS
SA6 INLB
TA1 X1+FSTC,CBT EST ORDINAL
LX1 12
SA2 A1+LSLK-FSTC GET LINK TO NEXT BUFFER
BX1 -X5*X1 EST ORDINAL
BX0 X2
CX3 X1,EST CONVERT EST ORDINAL TO OFFSET
TA3 X3+EQDE,EST
SB5 FAW1.1 SET *CDA* EXIT ADDRESS
BX6 -X5*X3
LX6 3
SA6 MSTA STORE MST ADDRESS FOR *CDA*
EQ CDA CHECK DEVICE ACCESSIBILITY
FAW1.1 SA3 FNTA
MX2 12
BX2 X2*X0
LX0 -24
BX1 X1-X3
BX6 -X5*X0 NEXT BUFFER ORDINAL
SX0 B6
SA6 FBLB
NZ X2,FAW1 IF BUFFER CURRENTLY BEING ACCESSED
ZR X3,FAW2 IF FLUSHING ALL BUFFERS
NZ X1,FAW1 IF NOT SELECTED EQUIPMENT
FAW2 SB6 FAW3 RETURN ADDRESS FOR ROUTINE *DCC*
EQ DCC DELINK CONTROL BUFFER FROM CONTROL BUFFER
FAW3 TX1 DWTB LINK BUFFER TO DATA WRITTEN LIST
SB6 FAW4
EQ LCC LINK CONTROL BUFFER
FAW4 BX6 X0 INITIATE I/O ON BUFFER
TA6 IORQ
XJ
EQ FAW1 PROCESS NEXT WRITE BUFFER
FAW5 SA1 OPAR
ZR X1,LBMX IF BUFFER COUNT = 0
TNO /BUFIO/LBMX,IHPFMD EXIT IF NOT 819
SX6 3 RESTART 819 I/O
LX6 36
TA6 IORQ
XJ
EQ LBMX RETURN
FLB SPACE 4,15
** FLB - FLUSH BUFFER TO DISK.
*
* ENTRY INPUT REQUEST DECODED BY LBM MAIN ROUTINE.
*
* EXIT CONTROL GIVEN TO LBMX.
* TO /PROGRAM/ HNG IF CONTROL BUFFER NOT FOUND.
*
* X - 0, 1, 2, 3, 4, 6, 7.
* A - 1, 2, 3, 6, 7.
* B - 6.
*
* CALLS DCC, LCC, SRR.
FLB BSS 0 ENTRY
SA2 BIDX
ZR X2,LBMX IF NO CONTROL BUFFER
BX6 X2 INTERLOCK BUFFER
LX2 CBTLS
SA6 INLB
TA3 X2+LSLK,CBT CHECK ACTIVITY COUNT
MX4 12
BX3 X4*X3
NZ X3,FLB7 IF BUFFER INTERLOCKED
* ENTRY FROM *RFB*.
* BUFFER IS WRITE INTERLOCKED IF ENTERED FROM *RFB*.
FLB1 TA3 X2+IOLK,CBT CHECK I/O ACTIVE
NG X3,FLB6 IF INTERLOCK SET
LX3 59-57
PL X3,FLB6 IF NOT WRITE DATA
BX0 X6
TX2 A5-1,-SP
SA3 A5+1
NZ X2,FLB1.1 IF NOT PSEUDO PP
SA3 CHRV
FLB1.1 TA6 IORQ
LX3 59-4
PL X3,FLB2 IF NOT DEVICE VERIFICATION
SB6 FLB2 SET *SRC* RETURN ADDRESS
EQ SRC SET RECALL CONTROL
FLB2 XJ INITIATE I/O
SB6 FLB4 RETURN ADDRESS FOR ROUTINE *DCC*
EQ DCC DELINK CONTROL BUFFER FROM CONTROL BUFFER
FLB4 SB6 FLB5 LINK TO DATA WRITTEN LIST
TX1 DWTB
EQ LCC LINK CONTROL BUFFER
FLB5 BX1 X0 GET ACCESS COUNT WORD
LX1 CBTLS
TA2 X1+LSLK,CBT
MX3 12 CLEAR WRITE INTERLOCK
BX6 -X3*X2
SA6 A2+
FLB6 SA1 OPAR
ZR X1,FLB7 IF NO WRITE REQUEST
SX1 X1-BMWR
SX7 B0 CLEAR PARAMETER
SA7 A1
ZR X1,WTB IF WRITE
EQ RWB REWRITE
* THE BUFFER INDEX IS RETURNED HERE FOR THOSE ROUTINES WHICH
* NEED TO CHECK IF THE BUFFER FLUSH HAS COMPLETED.
FLB7 TX2 A5-1,-SP
SA1 BIDX
SA3 A5+B1
BX6 X1
SA6 FCBI
ZR X2,LBMX IF PSEUDO PP
LX3 59-4
SX6 B1
PL X3,LBMX IF NOT DEVICE VERIFICATION OPERATION
LX6 6-0
LX3 4-59
BX6 X6+X3 SET BUFFER FLUSH FLAG
SA6 A3
EQ SRR SET RECALL RESPONSE
INB SPACE 4,30
** INB - INTERLOCK BUFFER.
*
* MONITOR MODE ONLY.
*
* NOTE - FOR PERFORMANCE REASONS, *INB* IS CALLED DIRECTLY BY
* *BFMM* AND *PIOM* TO AVOID UNNECCESSARY BUFFER MANAGER
* START UP AND SHUT DOWN OVERHEAD.
*
* ENTRY (X2) = SUBFUNCTION.
* (X6) = *FST*.
* (X7) = BUFFER INDEX TO VALIDATE.
* (B6) = EXIT ADDRESS.
*
* EXIT (X6) = 1/0, 1/B, 1/E, 1/I, 44/0, 12/BI
* B = 1 IF BUFFER BUSY.
* E = 1 IF I/O ERROR.
* I = 1 IF INACCESSIBLE SHARED DEVICE.
* BI = BUFFER ORDINAL.
* = 0 IF BUFFER NOT FOUND OR CANNOT BE
* INTERLOCKED.
* (B6) = RETURN ADDRESS.
* (FCBM) = ORDINAL OF BUFFER WITH ERROR.
*
* USES A - 1, 2, 3, 4, 6, 7.
* B - 3.
* X - ALL.
INB BSS 0 ENTRY
BX1 X7
BX7 X7-X7 CLEAR BUFFER ORDINAL
SA7 FCBM
BX7 X1
LX1 CBTLS
TA4 X1+HSLK,CBT
SA3 INBA
SB3 X2 SUBFUNCTION
SX0 B1
SA2 A4-B1
ERRNZ HSLK-IOLK-1 CODE DEPENDS ON VALUE
SA1 A2-B1
ERRNZ IOLK-FSTC-1 CODE DEPENDS ON VALUE
BX1 X6-X1
BX1 X3*X1
SA3 INLB
NZ X1,INB8 IF FST/CBT MISMATCH
BX3 X3-X7
BX6 X7 SAVE BUFFER ORDINAL FOR REPLY
ZR X3,INB7 IF INTERLOCK SET
SA3 A4-HSLK+LSLK
BX5 X2
LX2 59-57
PL X4,INB1 IF NO I/O ERROR
PL X2,INB9 IF NO WRITE DATA IN BUFFER
INB1 NZ B3,INB4 IF WRITE/REWRITE
ERRNZ BMRD CODE DEPENDS ON VALUE
SX1 B1+
NG X3,INB7 IF WRITE INTERLOCK IS SET
LX1 48
IX7 X3+X1 INCREMENT ACCESS COUNT
NG X5,INB3 IF I/O ACTIVE
NG X2,INB5 IF BUFFER CONTAINS WRITE DATA
INB2 SA7 A3
EQ INB6 COUNT STATUS AND RETURN
INB3 PL X2,INB7 IF READ BUFFER BEING FILLED
EQ INB2 ALLOW READ OF WRITE DATA
INB4 MX1 12
BX1 X1*X3 GET ACCESS COUNT
NG X5,INB7 IF I/O INTERLOCK SET
NZ X1,INB7 IF ACCESS COUNT NOT ZERO
PL X2,INB4.2 IF WRITE DATA ACCESS FLAG CLEAR
INB4.1 MX1 1
BX7 X3+X1 SET WRITE INTERLOCK
SA7 A3+
EQ INB6 COUNT STATUS AND RETURN
INB4.2 TX1 A5-1,-SP
ZR X1,INB5 IF PSEUDO PP CALL
SA1 A5+B1
LX1 59-6
NG X1,INB4.1 IF *1MV* RECALL AFTER FLUSH
INB5 SX6 B0+ SET REPLY STATUS
SX0 B0+ DON-T COUNT ACCESS ATTEMPT
INB6 MX1 -12
BX3 -X1*X4
LX3 PUTLS
TA1 X3+INST,PUT
IX7 X1+X0
SA7 A1 UPDATE BUFFER VALIDATE STATISTICS
INB6.1 SA5 A5 RESTORE PP OUTPUT REGISTER
JP B6 RETURN
INB7 LX0 58-0
BX6 X6+X0 SET BUFFER BUSY
EQ INB6.1 EXIT
INB8 LX0 36 COUNT REJECT
BX6 X6-X6
EQ INB6 EXIT WITH BUFFER NOT FOUND
INB9 NG X5,INB7 IF I/O INTERLOCK IS SET
LX0 57-0
BX6 X0 SET I/O ERROR STATUS
SA7 FCBM SAVE BUFFER ORDINAL FOR CALLER
EQ INB6.1 EXIT
INBA DATA 07770000777777400000B *FST* COMPARISON MASK
RDB SPACE 4,35
** RDB - INTERLOCK BUFFER IN READ MODE OR INITIATE READ.
*
* ENTRY (BCNT) = COUNT OF BUFFERS TO ALLOCATE IF REQUESTED
* BUFFER IS READ FROM DISK.
*
* EXIT TO *LBMX* IF BUFFER FOUND AND INTERLOCKED.
* TO *SBB* IF BUFFER FOUND BUT CANNOT BE INTERLOCKED,
* DATA READ IN PROGRESS AND RECALL CONTROL ALREADY SET
* ON BUFFER, OR BUFFER CANNOT BE ALLOCATED.
* TO *SRR* IF READ INITIATED OR IF DATA READ ALREADY IN
* PROGRESS AND RECALL CONTROL IS NOT ALREADY SET ON
* THE BUFFER.
* READ-AHEAD ON ADDITIONAL CONSECUTIVE BUFFERS INITIATED
* AS NEEDED IF TO RECALL ON READ OF REQUESTED BUFFER.
*
* USES A - 1, 2, 3, 6, 7.
* B - 6.
* X - ALL.
*
* CALLS ANB, CSD, CHA, DCC, LCC, SBB, SNS, SRC, SRR.
*
* IF THE BUFFER INDICATED BY *LTRK* AND *LSEC* IS FOUND AND CAN
* BE INTERLOCKED IN READ MODE, NORMAL STATUS WILL BE RETURNED.
* BUFFER BUSY STATUS WILL BE RETURNED IF THE BUFFER IS FOUND
* BUT INTERLOCKED IN WRITE MODE, IF A READ IS IN PROGRESS AND
* RECALL CONTROL IS ALREADY SET, OR IF THE BUFFER IS NOT FOUND
* AND CANNOT BE ALLOCATED. IN NONE OF THESE CASES WILL AN
* ATTEMPT BE MADE TO ALLOCATE ADDITIONAL BUFFERS. IF A READ
* BUFFER IS ALLOCATED OR IF A READ IS ALREADY IN PROGRESS AND
* RECALL CONTROL IS NOT ALREADY SET ON THE BUFFER, RECALL
* CONTROL WILL BE SET AND RECALL STATUS WILL RETURNED. ALSO,
* ADDITIONAL CONSECUTIVE BUFFERS WILL BE ALLOCATED, IF
* POSSIBLE, ACCORDING TO THE VALUE OF *BCNT*.
RDB BSS 0 ENTRY
SX7 B0 SET BUFFER NOT ALLOCATED
SA3 BCNT SET BUFFER COUNT TO ALLOCATE
BX6 -X3
SA6 RBCT
TX6 DRDB SET READ AS CURRENT LIST
SA6 CLST
* FIND NEXT BUFFER.
RDB2 SB6 RDB3 *CHA* RETURN ADDRESS
TEQ (/BUFIO/CSD,BIOMMF,/BUFIO/CHA) CHECK BUFFER STATUS
RDB3 ZR X2,RDB14 IF FIRST ACCESS TO HASH ENTRY
NG X2,RDB11 IF BUFFER CANNOT BE ALLOCATED
ZR X0,RDB14 IF BUFFER NOT FOUND
ZR X7,RDB4 IF NO BUFFERS ALLOCATED
SB6 RDB19
EQ CAT CHECK ALLOCATION TRIGGER
RDB4 SX6 X0+ SAVE BUFFER ORDINAL FOR RESPONSE
SA6 FCBI
SA6 INLB SET CONTROL BUFFER INTERLOCK
LX6 CBTLS
TA2 X6+IOLK,CBT READ ACCESS FLAGS WORD
TA3 X6+LSLK,CBT READ ACCESS WORD COUNT
NG X2,RDB6 IF I/O INTERLOCK SET
LX2 59-57
BX6 X0
NG X3,SBB IF BUFFER INTERLOCKED IN WRITE MODE
PL X2,RDB8 IF NO WRITE DATA PRESENT
TA6 IORQ FLUSH WRITE DATA
XJ
EQ RDB8 DELINK BUFFER
RDB6 LX2 59-57
PL X2,RDB10 IF READ IN PROGRESS
RDB8 SA2 A3-LSLK+HSLK
NG X2,LBMX IF I/O ERROR
SX5 B1
LX5 48
SB6 RDB9 DELINK BUFFER FROM CONTROL BUFFER CHAIN
IX6 X3+X5
SA6 A3
EQ DCC DELINK CONTROL BUFFER FROM CONTROL BUFFER
RDB9 TX1 DRDB LINK BUFFER TO READ CHAIN
SA2 BCNT CHECK BUFFER COUNT
SX4 B1 SET READ TRIGGER
BX3 X0
SX2 X2-1
LX4 58-0
ZR X2,RDB9.1 IF REQUEST WAS FOR ONE BUFFER
LX3 CBTLS
+ TA2 X3+IOLK,CBT **** PERFORM IN ONE WORD ****
BX6 X2+X4 **** PERFORM IN ONE WORD ****
SA6 A2 **** PERFORM IN ONE WORD ****
RDB9.1 SB6 LBMX SET EXIT ADDRESS
EQ LCC LINK CONTROL BUFFER
RDB10 BX5 X0 CHECK RECALL CONTROL
LX5 CBTLS
TA2 X5+LSLK,CBT
MX3 -24
BX4 -X3*X2
NZ X4,SBB IF RECALL CONTROL SET
SA1 RPRM GET RECALL PARAMETER
SX6 2 SET UP *IOC* CALL
LX6 24
BX6 X6+X1
LX6 12
BX6 X6+X0
TA6 IORQ
XJ SET RECALL CONTROL
NZ X6,SRR IF FUNCTION WAS ACCEPTED
BX2 X0
LX2 CBTLS
TA3 X2+LSLK,CBT READ ACCESS COUNT
EQ RDB8 PROCESS RESPONSE
RDB11 NZ X7,SRR IF BUFFERS ALLOCATED
EQ SBB SET BUFFER BUSY RESPONSE
* ALLOCATE ADDITIONAL BUFFERS.
RDB12 SB6 RDB13 RETURN ADDRESS FOR ROUTINE *SNS*
EQ SNS SET NEXT SECTOR
RDB13 NZ X0,SRR IF EOI
EQ RDB2 ALLOCATE NEXT BUFFER
RDB14 SA1 SFRF GET SYSTEM FILE READ FLAG
* SB0 0 (ONE SYSTEM DEVICE)
NZ X1,RDB20 IF SYSTEM FILE READ
* SB0 0 (ONE SYSTEM DEVICE)
SA1 ANBA GET DATA WRITTEN THRESHOLD
SX6 X1-1 UPDATE THRESHOLD FOR WRITE
SX1 X6-DWLT
NG X1,RDB15 IF AT LOWER LIMIT
SA6 A1+ SAVE NEW THRESHOLD
RDB15 SB6 RDB16 RETURN ADDRESS FOR ROUTINE *ANB*
EQ ANB ALLOCATE NEXT BUFFER
RDB16 ZR X0,RDB11 IF BUFFER NOT AVAILABLE
NZ X7,RDB17 IF NOT FIRST BUFFER ALLOCATED
SX7 X0+ SAVE ORDINAL OF FIRST BUFFER ALLOCATED
SA7 FCBI
SB6 RDB17 RETURN ADDRESS FOR ROUTINE *SRC*
EQ SRC SET RECALL CONTROL
RDB17 SB6 RDB18 CHECK ALLOCATION TRIGGER
SA2 DTSF CHECK FOR DATA STREAMING
SX6 B1+
ZR X2,CAT IF NOT STREAMING DATA
SA6 DBAT
EQ CAT CHECK ALLOCATION TRIGGER
RDB18 TA7 IORQ INITIATE I/O
XJ
RDB19 NZ X6,RDB12 IF MORE BUFFERS TO ALLOCATE
EQ SRR SET RECALL REPLY
* IF A JOB IS READING THE SYSTEM FILE, AND THE DATA IS
* NOT ALREADY RESIDENT IN ESM/LCM, THE OTHER SYSTEM DEVICES
* ARE SEARCHED TO SEE IF THE DATA HAPPENS TO ALREADY BE IN
* ESM/LCM, BUT READ FROM A DIFFERENT UNIT (THIS METHOD
* DEPENDS ON THE FACT THAT EVERY COPY OF THE SYSTEM FILE
* HAS IDENTICAL LOGICAL AND PHYSICAL ADDRESSES FOR EVERY
* RECORD). IF THE DATA IS FOUND TO NOT RESIDE IN ESM/LCM
* IN ANY FORM, THE SYSTEM DEVICE WITH THE LEAST ACTIVITY
* IS USED TO READ THE DATA.
RDB20 SA1 SYDI SYSTEM DEVICE INDEX
BX5 X7 SAVE (X7)
SX6 X1+B1 INCREMENT INDEX
SA3 RDBB-1+X6
ZR X3,RDB23 IF END OF TABLE
SA6 A1
SA1 X3 *DALL* WORD OF THIS DEVICE
SA2 BSDA *DALL* OF PREVIOUS BEST SYSTEM DEVICE
IX2 X1-X2
BX7 X1
PL X2,RDB21 IF NO ACTIVITY IMPROVEMENT
SA6 BSDI SET NEW BEST SYSTEM DEVICE INDEX
SA7 A2+ SET NEW BEST ACTIVITY
RDB21 SA1 FNTA FNT ADDRESS
R= X7,FSTL
MX4 -48
TX0 SP
SA2 RDBA-1+X6 EST ORDINAL
IX0 X1-X0
LX2 48
IX7 X1+X7
ERX1 X7 READ FST
BX6 -X4*X1 CLEAR OLD EST ORDINAL
BX6 X6+X2 ADD NEW EST ORDINAL
LX4 -12
EWX6 X7 UPDATE FST
PL X0,RDB22 IF FNT IN JOB NFL
SA1 X7-2 READ MB+0
LX2 -12
BX6 -X4*X1 CLEAR OLD EST ORDINAL
BX6 X6+X2 ADD NEW EST ORDINAL
SA6 A1
RDB22 SX6 X3-DALL SAVE MST ADDRESS
SA6 MSTA
BX7 X5 RESTORE (X7)
EQ RDB2 CHECK NEXT SYSTEM DEVICE
RDB23 SA1 BSDI BEST SYSTEM DEVICE INDEX
SA3 RDBB-1+X1 MST ADDRESS (*DALL* ADDRESS)
BX7 X7-X7
BX6 X1
SA7 SFRF CLEAR SYSTEM FILE READ FLAG
EQ RDB21 READ SYSTEM FILE FROM SELECTED DEVICE
RDBA BSS MXSY TABLE OF SYSTEM DEVICE EST ORDINALS
RDBB BSS MXSY+1 TABLE OF SYSTEM DEVICE MST ADDRESSES
REB SPACE 4,15
** REB - RELEASE EMPTY READ BUFFER AND INTERLOCK NEXT BUFFER.
*
* ENTRY INPUT REQUEST DECODED BY LBM MAIN ROUTINE.
*
* EXIT TO *RDB* TO INTERLOCK NEXT BUFFER IF *REB* FUNCTION.
* TO *LBMX* IF *REN* FUNCTION.
*
* USES A - 1, 2, 3, 6, 7.
* B - 6.
* X - ALL.
*
* CALLS ANB, CSD, CHA, DCC, DCH, LCC, SNS, SRC.
REB BSS 0 ENTRY
SX7 B0+ CLEAR *REN* FUNCTION FLAG
* ENTRY FROM *REN* FUNCTION.
* DECREMENT READ ACCESS COUNT.
REB1 SA1 BIDX GET CONTROL BUFFER INDEX
SA7 REBA
BX0 X1
BX6 X1 SET CONTROL BUFFER INTERLOCK
SA6 INLB
TX7 DRDB SET READ AS CURRENT LIST
SA7 CLST
LX6 CBTLS
MX3 12
TA2 X6+LSLK,CBT READ ACCESS COUNT WORD
BX5 X3*X2 GET ACCESS COUNT
AX5 49
ZR X5,REB2 IF COUNT = 0 OR 1
SX4 B1
LX4 48
IX6 X2-X4 DECREMENT COUNT
SA6 A2
EQ REB4 CHECK READ THRESHOLD
REB2 BX6 -X3*X2 CLEAR ACCESS COUNT
SA6 A2
SA2 A2+IOLK-LSLK
NO
LX2 59-55
NG X2,REB4 IF SYSTEM FILE BUFFER, LEAVE ON CHAIN
SB6 REB3 RETURN ADDRESS FOR ROUTINE *DCC*
EQ DCC DELINK CONTROL BUFFER FROM CONTROL BUFFER
REB3 SB6 REB4 LINK TO EMPTY LIST
TX1 EMTB
EQ LCC LINK CONTROL BUFFER
* CHECK FOR READ-AHEAD TRIGGER.
REB4 SA1 BIDX GET READ THRESHOLD BIT
LX1 CBTLS
TA1 X1+IOLK,CBT
BX0 X1
BX6 X6-X6 CLEAR CONTROL BUFFER INTERLOCK
SA6 INLB
SA1 LSEC SAVE LOGICAL TRACK AND SECTOR
SA2 LTRK
BX6 X1
BX7 X2
SA6 OLSC
SA7 BCNT
LX0 59-58 TEST READ THRESHOLD
PL X0,REB18 IF NOT READ-AHEAD TRIGGER BUFFER
BX7 X7-X7
SA3 RBTH SET BUFFER COUNT TO ALLOCATE
BX6 -X3
ERRNZ RBCT+1-RBTH CODE DEPENDS ON VALUE
SA6 A3-B1
SA1 REBA
ZR X1,REB7 IF *REB* FUNCTION
* FIND LAST CONSECUTIVE BUFFER ON HASH CHAIN.
REB5 ZR X6,REB18 IF ALL BUFFERS ALLOCATED
SB6 REB6
EQ SNS SET NEXT SECTOR
REB6 NZ X0,REB18 IF END OF LOGICAL TRACK CHAIN
REB7 SB6 REB8
TEQ (/BUFIO/CSD,BIOMMF,/BUFIO/CHA) CHECK BUFFER STATUS
REB8 ZR X2,REB9 IF END OF CONSECUTIVE CHAIN
NG X2,REB18 IF BUFFER CANNOT BE ALLOCATED
ZR X0,REB9 IF END OF CONSECUTIVE CHAIN
SB6 REB5
EQ CAT CHECK ALLOCATION TRIGGER
* ALLOCATE ADDITIONAL BUFFERS.
REB9 SA3 RBTH SET BUFFER COUNT TO ALLOCATE
BX6 -X3
ERRNZ RBCT+1-RBTH CODE DEPENDS ON VALUE
SA6 A3-B1
REB10 SB6 REB11
EQ ANB ALLOCATE NEXT BUFFER
REB11 ZR X0,REB18 IF NO BUFFERS AVAILABLE
SB6 REB12
EQ CAT CHECK ALLOCATION TRIGGER
REB12 TA7 IORQ INITIATE I/O
XJ
REB13 ZR X6,REB18 IF ALL BUFFERS ALLOCATED
SB6 REB14
EQ SNS SET NEXT SECTOR
REB14 NZ X0,REB18 IF EOI
SB6 REB15
TEQ (/BUFIO/CSD,BIOMMF,/BUFIO/CHA) CHECK BUFFER STATUS
REB15 ZR X2,REB10 IF FIRST ACCESS TO HASH ENTRY
NG X2,REB18 IF BUFFER CANNOT BE ALLOCATED
ZR X0,REB10 IF BUFFER NOT FOUND
SB6 REB13
EQ CAT CHECK ALLOCATION TRIGGER
* CHECK FOR NEXT BUFFER AVAILABLE FOR RESPONSE.
REB18 SA1 REBA GET FUNCTION FLAG
NZ X1,LBMX IF *REN* FUNCTION
SA1 BCNT GET ORIGINAL LTRK
SA2 OLSC GET ORIGINAL LSEC
BX6 X1
BX7 X2
SA6 LTRK
SA7 LSEC
SX6 B1 SET BUFFER COUNT TO ALLOCATE
SA6 A1
SA6 DTSF SET DATA STREAMING FLAG
EQ RDB USE READ FUNCTION CODE
REBA CON 0 *REN* FUNCTION FLAG
REN SPACE 4,10
** REN - RELEASE READ BUFFER.
*
* ENTRY INPUT REQUEST DECODED BY LBM MAIN ROUTINE.
*
* EXIT CONTROL GIVEN TO *REB*.
*
* USES A - 7.
* X - 7.
REN BSS 0 ENTRY
SX7 1 INDICATE *REN* FUNCTION
EQ REB1 USE *REB* CODE
RFB SPACE 4,10
** RFB - RELEASE AND FLUSH BUFFER.
*
* ENTRY INPUT REQUEST DECODED BY LBM MAIN ROUTINE.
*
* EXIT TO *FLB1*.
*
* USES A - 2.
* X - 0, 2.
RFB BSS 0 ENTRY
SA2 BIDX GET BUFFER INDEX
BX6 X2
LX2 CBTLS
SA6 INLB INTERLOCK BUFFER
NZ X2,FLB1 IF BUFFER INDEX
EQ /PROGRAM/HNG HANG CALLER
RWB SPACE 4,15
** RWB - REWRITE BUFFER.
*
* ENTRY INPUT REQUEST DECODED BY LBM MAIN ROUTINE.
*
* EXIT CONTROL GIVEN TO LBMX.
*
* USES A - 1, 6.
* X - 1, 6.
*
* CALLS WTB.
RWB BSS 0 ENTRY
SA1 LSEC FORCE PREREAD
SX6 X1+1
SA6 OLSC
MX6 -1 BYPASS CHECK OF I/O ACTIVE COUNT
SA6 BCNT
* EQ WTB USE *WTB* FUNCTION
WTB SPACE 4,15
** WTB - WRITE BUFFER.
*
* ENTRY INPUT REQUEST DECODED BY LBM MAIN ROUTINE.
*
* EXIT CONTROL GIVEN TO LBMX.
*
* USES A - 1, 2, 3, 4, 6, 7.
* B - 6.
* X - 0, 1, 2, 3, 4, 6, 7.
*
* CALLS ANB, CSD, CHA, CHT, DCC, SBB, SRC, SRP.
WTB BSS 0 ENTRY
SA1 ANBA GET DATA WRITTEN THRESHOLD
TX7 MDWB GET UPPER LIMIT
SX6 X1+B1 UPDATE THRESHOLD FOR WRITE
IX7 X6-X7
PL X7,WTB1 IF AT UPPER LIMIT
SA6 A1+ SAVE NEW THRESHOLD
WTB1 SX7 0 CLEAR PUSH STACK
TX6 WRTB SET WRITE AS CURRENT LIST
SA6 CLST
WTB2 SB6 WTB3 *CHA* RETURN ADDRESS
TEQ (/BUFIO/CSD1,BIOMMF,/BUFIO/CHA) CHECK BUFFER STATUS
WTB3 ZR X2,WTB12 IF FIRST ACCESS
NG X2,WTB17 IF BUFFER CANNOT BE ACCESSED OR ALLOCATED
ZR X0,WTB9 IF CONTROL BUFFER NOT FOUND
SX6 X0+ BUFFER ORDINAL
SA6 INLB SET CONTROL BUFFER INTERLOCK
LX6 CBTLS
TA2 X6+LSLK,CBT
MX3 12
BX3 X3*X2
NZ X3,SBB IF READ OR WRITE BUFFER
TA2 X6+IOLK,CBT
NG X2,WTB8 IF I/O INTERLOCK SET
SX7 X0+ SAVE BUFFER ORDINAL
SA7 FCBI
SB6 WTB4 RETURN ADDRESS FOR ROUTINE *DCC*
EQ DCC DELINK CONTROL BUFFER FROM CONTROL BUFFER
WTB4 SB6 WTB6 LINK TO WRITE LIST
TX1 WRTB
EQ LCC LINK CONTROL BUFFER
WTB6 BX1 X0 GET ADDRESS OF CONTROL BUFFER
LX1 CBTLS
TA2 X1+IOLK,CBT SET WRITE DATA ACCESS FLAG
MX3 12 CLEAR OLD ACCESS FLAGS
BX2 -X3*X2
MX3 1
LX3 57-59
BX6 X2+X3
SA6 A2
TA2 X1+LSLK,CBT SET WRITE INTERLOCK
MX3 12
BX2 -X3*X2
MX3 1
BX6 X2+X3
SA6 A2
EQ LBMX EXIT
WTB8 SA3 OPAR
TA2 X6+LSLK,CBT CHECK RECALL CONTROL
NZ X3,SBB IF RECALL NOT ALLOWED
MX3 -24
BX3 -X3*X2
NZ X3,SBB IF RECALL CONTROL SET
BX6 X0
SA6 FCBI
SA1 RPRM GET RECALL PARAMETER
SX6 B1+B1
LX6 24
BX6 X6+X1
LX6 12
BX6 X6+X0
TA6 IORQ
XJ SET RECALL CONTROL
NZ X6,SRR IF FUNCTION ACCEPTED
EQ SBB SET BUFFER BUSY RESPONSE
* CHECK FOR AMOUNT OF ACTIVITY ON DEVICE.
WTB9 SA2 MSTA CHECK DEVICE ACTIVITY
SA2 X2+DALL
SX3 77B
LX2 12
BX4 X3*X2
SX2 X4-DACL
NG X2,WTB12 IF DEVICE ACTIVITY OKAY
TX3 A5-1,-SP
ZR X3,WTB10 IF PSEUDO PP CALL
SA2 A5+B1
LX2 59-4
NG X2,WTB12 IF *1MV* CALL
WTB10 SA4 BCNT
PL X4,SBB IF NOT CALLED BY *RWB*
* ALLOCATE A BUFFER FOR WRITE.
WTB12 SB6 WTB13 RETURN ADDRESS FOR ROUTINE *ANB*
EQ ANB ALLOCATE NEXT BUFFER
WTB13 ZR X0,SBB IF BUFFER NOT AVAILABLE
SX6 X0+ SAVE BUFFER ORDINAL FOR RESPONSE
SA6 FCBI
SA2 LSEC CHECK FOR I/O ON 4K BOUNDARY
SA3 OLSC
IX3 X3-X2
ZR X3,WTB6 IF ON FIRST PRU OF BUFFER
SB6 WTB14 RETURN ADDRESS FOR ROUTINE *DCC*
EQ DCC DELINK CONTROL BUFFER FROM CONTROL BUFFER
WTB14 SB6 WTB15 LINK TO READ LIST
TX1 DRDB
EQ LCC LINK CONTROL BUFFER
WTB15 SB6 WTB16 RETURN ADDRESS FOR ROUTINE *SRC*
EQ SRC SET RECALL CONTROL
WTB16 SX6 X0+ INITIATE I/O ON BUFFER
TA6 IORQ
XJ
EQ SRR SET RECALL REPLY
WTB17 SX6 X2+2
ZR X6,SBB IF SHARED DEVICE BUFFER CANNOT BE ACCESSED
SX6 B1 SET TO COUNT HASH TABLE FULL
SB6 SBB EXIT TO SET BUFFER BUSY
LX6 24
EQ CHT UPDATE COUNTERS
ANB TITLE SUBROUTINES.
ANB SPACE 4,20
** ANB - ALLOCATE NEXT BUFFER.
*
* ENTRY (X7) = BUFFERS ALLOCATED STACK.
* (B6) = RETURN ADDRESS.
* (B3) = SCRATCH AREA *SCRC* ADDRESS.
* (CHEA) = CURRENT HASH ENTRY ADDRESS.
* (CLST) = ADDRESS OF CURRENT LIST CONTROL WORD.
* (SFRF) = SYSTEM FILE READ FLAG.
*
* EXIT (X0) = CONTROL BUFFER INDEX ALLOCATED.
* = 0 IF NO BUFFER AVAILABLE.
* ALLOCATED CONTROL BUFFER WILL CONTAIN
* CORRECT PARAMETERS FOR THE REQUEST.
*
* USES A - 1, 2, 3, 4, 6.
* B - 3, 6.
* X - 0, 1, 2, 3, 4, 5, 6.
*
* CALLS CLP, DCC, DCH, LCC, LCH.
ANB BSS 0 ENTRY
SA2 PUTO PUT ORDINAL
BX0 X0-X0 PRESET NO BUFFER FOUND
LX2 PUTLS
TA2 X2+UNCT,PUT READ *PUT*
MX5 6
SA1 A2+B1
ERRNZ UNCT+1-HSCT CODE DEPENDS ON VALUE
MX4 -4
LX2 -24-8
BX6 X5*X1 PHYSICAL SECTORS PER I/O BUFFER
BX3 -X4*X2
LX6 6
LX2 59-58+32
SA6 ANBD
NZ X3,/MONITOR/RB6 IF TOO MANY REQUESTS ON UNIT
PL X2,ANB1 IF *RW* FLAG NOT SET
LX1 59-12-8
ERRNZ RCTH-400B VALUE MUST BE 400B
NG X1,/MONITOR/RB6 IF TOO MANY REQUESTS PROCESSED
ANB1 SX6 B6 SAVE (B6)
SA6 B3
SA6 ANBA+1 SET DATA WRITTEN NOT SKIPPED
SB3 B3+1
TB6 EMTB INITIALIZE LIST INDEX
ANB2 SA1 B6 GET LIST BASE WORD
SX0 X1 GET FIRST CONTROL BUFFER ON LIST
ZR X0,ANB20 IF LIST IS EMPTY
ANB3 BX6 X0 SET CONTROL BUFFER INTERLOCK
SA6 INLB
LX6 CBTLS
TA2 X6+LSLK,CBT GET LIST LINK WORD
MX5 12 GET ACCESS COUNT
BX4 X5*X2
NZ X4,ANB19 IF ACCESS COUNT NOT ZERO
SA4 A2-LSLK+IOLK GET ACCESS FLAGS WORD
NG X4,ANB19 IF I/O INTERLOCK FLAG IS SET
LX4 59-57
PL X4,ANB7 IF NOT WRITE DATA
* AVOID FLUSH TO DOWN DEVICE.
SA4 A2+FSTC-LSLK GET EST ORDINAL FROM CONTROL BUFFER
BX6 X5*X4
LX6 -48
CX4 X6,EST CONVERT EST ORDINAL TO OFFSET
SX6 B1
TA4 X4+EQDE,EST
LX4 59-49
LX3 X4,B1
PL X4,ANB4 IF DEVICE NOT DOWN
NG X3,ANB19 IF DEVICE IS DOWN
* WRITE BUFFER FOUND, FLUSH TO DISK.
ANB4 TA2 WRTBC,IBST COUNT WRITE BUFFER REALLOCATED (FLUSHED)
IX6 X2+X6
SA6 A2
SX6 X0+
TA6 IORQ
XJ
SB6 ANB5 RETURN ADDRESS FOR ROUTINE *DCC*
EQ DCC DELINK CONTROL BUFFER FROM CONTROL BUFFER
ANB5 SB6 ANB6 LINK TO DATA WRITTEN LIST
TX1 DWTB
EQ LCC LINK CONTROL BUFFER
ANB6 SX0 B0+ CLEAR BUFFER FOUND
SA1 ANBA+1
NZ X1,ANBX IF DATA WRITTEN LIST PROCESSED
TB6 DWTB DATA WRITTEN LIST WAS SKIPPED INITIALLY
EQ ANB2 PROCESS DATA WRITTEN LIST
* UPDATE CONTROL BUFFER FOR NEW REQUEST.
ANB7 TX2 B6-1,-BLMB INCREMENT SELECTED LIST
TA2 X2,IBST
SX6 1
IX6 X2+X6
SA6 A2
SB6 ANB8 RETURN ADDRESS FOR ROUTINE *DCC*
EQ DCC DELINK CONTROL BUFFER FROM BUFFER LIST
ANB8 SB6 ANB9 RETURN ADDRESS FOR ROUTINE *DCH*
EQ DCH DELINK CONTROL BUFFER FROM HASH LINK
ANB9 SA3 CHEA
SA2 LSEC GET CURRENT LOGICAL SECTOR
SA1 X3
BX5 X1
NZ X5,ANB11 IF NOT FIRST ENTRY
SA3 LTRK FORM HASH ENTRY
LX2 24
BX5 X2
LX2 12
BX5 X5+X2
LX3 48
BX6 X5+X3
SA6 A1+
EQ ANB14 CREATE NEW HASH ENTRY
ANB11 MX6 12 CHECK FIRST AND LAST LIMITS
LX6 36
BX4 X6*X5
LX6 12
BX3 X6*X5
AX4 24
AX3 36
IX6 X4-X2
PL X6,ANB12 IF LAST LIMIT VALID
BX4 X2
EQ ANB13 MODIFY HASH ENTRY
ANB12 IX6 X2-X3 CHECK FIRST LIMIT
BX3 X2
PL X6,ANB14 IF FIRST LIMIT VALID
ANB13 LX3 36
LX4 24
MX6 24
LX6 48
BX5 -X6*X5 CLEAR OLD LIMITS
BX5 X5+X4 ADD NEW LIMITS
BX6 X5+X3
SA6 A1
ANB14 SB6 ANB15 *CLP* RETURN ADDRESS
EQ CLP CONVERT LOGICAL TO PHYSICAL DISK ADDRESS
* (X0) = CONTROL BUFFER ORDINAL.
* (X1) = PHYSICAL CYLINDER NUMBER.
* (X3) = PHYSICAL UNIT NUMBER.
* (X4) = 48/, 6/PHYSICAL TRACK, 6/PHYSICAL SECTOR.
ANB15 BX2 X0 CONTROL BUFFER ORDINAL
LX2 CBTLS
LX3 48
LX1 36
LX4 24
BX6 X3+X4
SA4 LSEC BUILD LOGICAL NEXT SECTOR IN BUFFER
SX3 LSLB/4
IX5 X3+X4
BX6 X6+X1
BX6 X5+X6
TA6 X2+PAD1,CBT
SA2 ANBD PHYSICAL SECTORS PER I/O BUFFER
MX5 -1
AX2 1
BX5 -X5*X2 SECTOR INCREMENT - SECTOR SIZE .EQ. 8K
AX2 1 SECTOR INCREMENT - SECTORS SIZES .LT. 8K
LX5 24
LX2 24
BX2 X2+X3 MERGE LOGICAL SECTOR INCREMENT
ERRNZ PSLB-4 CODE PRESETS SECTOR CONTROL WORD WORDS
IX6 X6+X2 *PAD2*
SA6 A6+B1
ERRNZ PAD2-PAD1-1 CODE DEPENDS ON VALUE
IX6 X6+X2 *PAD3*
IX6 X6+X5 INCREMENT FOR 8K SECTORS
SA6 A6+B1
ERRNZ PAD3-PAD2-1 CODE DEPENDS ON VALUE
IX6 X6+X2 *PAD4*
AX6 12 SET NO LINK IN LAST CONTROL WORD
LX6 12
SA6 A6+B1
ERRNZ PAD4-PAD3-1 CODE DEPENDS ON VALUE
SA1 FNTA BUILD PSEUDO-*FST*
SX5 B1
IX1 X1+X5
ERX1 X1
SA2 LTRK
MX3 24
BX6 X1*X3 EQUIPMENT
LX2 24
LX4 12
BX6 X6+X2 LOGICAL TRACK
BX6 X6+X4 LOGICAL SECTOR
SA6 A6+B1 SET *FST* IN CONTROL BUFFER
ERRNZ FSTC-PAD4-1 INDEXES MUST BE CONSECUTIVE
SA2 SFRF SET/CLEAR SYSTEM FILE READ FLAG
BX1 X0
BX6 X2
LX1 CBTLS
MX3 -48
SA2 A6+B1
ERRNZ IOLK-FSTC-1 CODE DEPENDS ON VALUE
SA4 A2+B1
ERRNZ HSLK-IOLK-1 CODE DEPENDS ON VALUE
BX2 -X3*X2
BX6 X6+X2
SA1 CLST LINK TO CURRENT LIST
SB6 ANB18
SA6 A2
BX5 -X3*X4 CLEAR ERROR DATA
SA3 CHAN
SA2 CHRV
TX4 A5-1,-SP
ZR X4,ANB16 IF PSEUDO PP
SA2 A5+1
ANB16 LX2 59-4
PL X2,ANB17 IF CHANNEL NOT SELECTED BY CALLER
LX3 54
SA2 A4-HSLK+PAD4
BX6 X2+X3 MERGE CHANNEL INTO *PAD4*
SA6 A2
SX4 B1+
LX4 58
BX5 X4+X5 MERGE CHANNEL SELECTION FLAG INTO *HSLK*
ANB17 BX6 X5
SA6 A4
EQ LCC LINK CONTROL BUFFER
ANB18 SA2 B3-B1 RESTORE (B6)
SB3 B3-B1
SA1 CHEA
SB6 X2
EQ LCH LINK CONTROL BUFFER TO HASH CHAIN
* GET NEXT CONTROL BUFFER ON THREAD.
ANB19 BX1 X0 GET CONTROL BUFFER ADDRESS
LX1 CBTLS
TA2 X1+LSLK,CBT READ LIST LINK WORD
MX3 -12 GET FORWARD LINK
AX2 24
BX0 -X3*X2
NZ X0,ANB3 IF ANOTHER BUFFER TO CHECK
TX1 B6,-DWTB
NZ X1,ANB20 IF NOT PROCESSING DATA WRITTEN LIST
SA1 ANBA+1
ZR X1,ANBX IF DATA WRITTEN SKIPPED INITIALLY
* CHECK NEXT LIST.
ANB20 SB6 B6+1 UPDATE LIST INDEX
TX6 B6,-DWTB
NZ X6,ANB22 IF NOT DATA WRITTEN LIST
* IF A BUFFER IS ACCESSED, BUT NOT RELEASED/FLUSHED IT CAN
* STAY ON THE READ OR WRITE LIST INDEFINITELY UNLESS THERE IS
* REGULAR ALLOCATION FROM BOTH LISTS. THE FOLLOWING LOGIC
* WILL CAUSE THE OLDEST BUFFER TO BE ALLOCATED IF IT STAYS THE
* OLDEST FOR AN EXTENDED PERIOD OF TIME.
SA1 RTCL CURRENT TIME - TIME LAST CHECKED
SA2 ANBB
MX5 -36
BX1 -X5*X1
IX2 X1-X2
SX6 3000D CHECK EVERY THREE SECONDS
IX5 X2-X6
BX6 X1
NG X5,ANB21 IF TIME NOT ELAPSED
SA6 A2 SET NEW TIME
SA1 B6+B1 CHECK READ LIST
ERRNZ DRDP-DWTP-1 CODE DEPENDS ON VALUE
SA2 ANBC
BX4 X1-X2
SX5 X1
SX4 X4
SB6 A1+ SET READ LIST
ZR X4,ANB2 IF SAME BUFFER, ALLOCATE FROM READ LIST
SA1 A1+B1 CHECK WRITE LIST
ERRNZ DRDP-DWTP-1 CODE DEPENDS ON VALUE
AX2 18
BX4 X1-X2
SX1 X1
SB6 A1+
LX1 18 SAVE FIRST BUFFERS ON READ AND WRITE LIST
SX4 X4+
BX6 X1+X5
SA6 A2
NZ X4,ANB21 IF NOT SAME BUFFER ON WRITE LIST
AX1 18-CBTLS
TA2 X1+LSLK,CBT
MX5 12
BX6 X5*X2
NZ X6,ANB21 IF BUFFER IN USE
SA2 A2+IOLK-LSLK
NG X2,ANB21 IF I/O INTERLOCK
SA6 ANBA+1 SET DATA WRITTEN SKIPPED FLAG
EQ ANB2 FLUSH BUFFER
ANB21 TA1 DWTB
BX6 X6-X6
SB6 A1
SA2 ANBA GET DATA WRITTEN THRESHOLD
AX1 36
IX1 X2-X1
NG X1,ANB2 IF COUNT .GT. THRESHOLD
SB6 B6+B1 SKIP DATA WRITTEN LIST
SA6 A2+B1 SET SKIPPED FLAG
ANB22 TX1 B6,-WRTB
PL X1,ANBX IF ALL LISTS HAVE BEEN CHECKED
TA1 DRDB GET READ COUNT
TA2 WRTB GET WRITE COUNT
AX1 36
AX2 36
IX1 X1-X2
NG X1,ANB23 IF WRITE LIST LARGER
TB6 DRDB
EQ ANB2 CHECK READ LIST
ANB23 TB6 WRTB
EQ ANB2 CHECK WRITE LIST
* EXIT ALLOCATE BUFFER ROUTINE.
ANBX SA2 B3-1 RESTORE (B6)
SB3 B3-B1
SB6 X2
JP B6 RETURN
ANBA CON DWLT DATA WRITTEN LIST TRESHOLD
CON 0 0 = DATA WRITTEN LIST SKIPPED
ANBB CON 0 TIME OF LAST FIRST BUFFER CHECK
ANBC CON 0 24/,18/ WRITE BUFFER,18/ READ BUFFER
ANBD CON 0 PHYSICAL SECTORS PER I/O BUFFER
CAT SPACE 4,15
** CAT - CHECK READ BUFFER ALLOCATION TRIGGER.
*
* ENTRY (X0) = CONTROL BUFFER ORDINAL.
* (B6) = RETURN ADDRESS.
*
* EXIT READ-AHEAD TRIGGER FLAG SET IN CBT IF THRESHOLD
* REACHED.
* (X6) = READ BUFFER COUNT DECREMENTED.
* (X7) = BUFFER ORDINAL.
*
* USES A - 2, 3, 6, 7.
* X - 0, 2, 3, 4, 6, 7.
CAT BSS 0 ENTRY
SA3 RBCT READ BUFFER COUNT
SA2 DBAT
BX7 X0 SET BUFFER ORDINAL
IX2 X2+X3
NZ X2,CAT1 IF NOT TRIGGER BUFFER
SX4 1
LX0 CBTLS *CBT* INDEX
LX4 58-0
+ TA2 X0+IOLK,CBT **** PERFORM IN ONE WORD ****
BX6 X2+X4 **** PERFORM IN ONE WORD ****
SA6 A2 **** PERFORM IN ONE WORD ****
CAT1 SX6 X3+B1 DECREMENT BUFFER COUNT
SA6 A3
JP B6 RETURN
CHT SPACE 4,10
** CHT - COUNT HASH TABLE EVICTS AND FULLS.
*
* ENTRY (X6) = INCREMENT OF ONE POSITIONED FOR UPDATE.
* (B6) = EXIT ADDRESS.
*
* EXIT PUT UPDATED IF COUNT .LT. 2048.
*
* USES A - 1, 6.
* X - 1, 3, 6.
CHT BSS 0 ENTRY
SA1 PUTO
LX6 11 POSITION INCREMENT TO CHECK OVERFLOW
LX1 PUTLS
TA1 X1+ACRJ,PUT CHECK FOR OVERFLOW
BX3 X6*X1
LX6 -11
NZ X3,CHT1 IF COUNTER FULL
IX6 X1+X6
SA6 A1
CHT1 JP B6 RETURN
CHA SPACE 4,40
** CHA - CALCULATE HASH ADDRESS.
*
* ENTRY (B6) = RETURN ADDRESS.
* (X7) = 0 IF BUFFER TO BE INTERLOCKED OR ALLOCATED AND
* NO BUFFERS ARE ALREADY ALLOCATED.
* (X7) .GT. 0 IF BUFFER TO BE INTERLOCKED OR ALLOCATED
* AND BUFFERS ARE ALREADY ALLOCATED.
* (X7) .LT. 0 IF TO LOCATE HASH TABLE ENTRY ONLY.
* (MSTA) = *MST* ADDRESS.
* (LTRK) = LOGICAL TRACK.
* (LSEC) = LOGICAL SECTOR NUMBER.
*
* EXIT (X2) = 0 FIRST ACCESS.
* .GT. 0 IF ENTRY FOUND.
* = -1 IF HASH TABLE FULL.
* (X1) = HASH ENTRY ADDRESS.
* = 0 IF HASH TABLE BUSY.
* (X0) = CONTROL BUFFER INDEX.
* = 0 IF BUFFER NOT FOUND.
* NOTE - (X0) VALID ONLY IF (X2) .GT. 0.
* (CHEA) = HASH ENTRY ADDRESS.
* (HTA) = HASH TABLE ADDRESS.
* (PUTO) = 24/SUSL, 18/RLSN, 18/PUTO
* SUSL = SINGLE UNIT SECTOR LIMIT.
* RLSN = RELATIVE SECTOR NUMBER IN UNIT.
* (R(LS/SL))
* PUTO = *PUT* ORDINAL.
*
* TO *LBMXS* IF ADDRESS ERROR OR INACCESSIBLE DEVICE.
*
* USES A - 1, 2, 3, 4, 6.
* B - 5, 6.
* X - 0, 1, 2, 3, 4, 5, 6.
*
* CALLS CDA, DCC, DCH, LCC.
*
* NOTE HASH ENTRY FORMAT.
* 12/TRK, 12/FLS, 12/LLS, 12/0, 12/BI.
* TRK = LOGICAL TRACK.
* FLS = FIRST LOGICAL SECTOR PRESENT.
* LLS = LAST LOGICAL SECTOR PRESENT.
* BI = FIRST CONTROL BUFFER ON HASH CHAIN.
*
* HASH ALGORITHM.
*
* LCMA = HTA + ( HTM .AND. ( LT * LCC ))
*
* LCMA = ADDRESS IN I/O BUFFER OF FIRST ENTRY.
* HTA = HASH TABLE BASE ADDRESS.
* HTM = HASH TABLE MASK FROM THE MST.
* LT = LOGICAL TRACK ADDRESS.
* LLC = SUBLIST LENGTH FOR HASH TABLE SEARCH.
*
* HASH CHAINS ARE BUILT BACKWARDS (HIGHEST LOGICAL SECTOR
* NUMBERS AT THE BEGINNING OF THE CHAIN) SO THAT SEQUENTIAL
* ACCESSES DO NOT HAVE TO CHAIN TO THE END TO ADD NEW
* BUFFERS.
CHA26 MX6 1 SET *ADDRESS ERROR* STATUS
LX6 55-59
EQ LBMXS EXIT WITH ERROR
CHA BSS 0 ENTRY
MX5 -12
NG X7,CHA1 IF LOCATE ENTRY ONLY
SB5 CHA1 SET *CDA* EXIT ADDRESS
EQ CDA CHECK DEVICE ACCESSIBILITY
CHA1 SA1 MSTA MST ADDRESS
SA4 X1+DILL FETCH *PUT* ORDINAL OF FIRST UNIT
SA2 A4-DILL+MDGL FETCH SINGLE UNIT SECTOR LIMIT
AX4 24
BX6 -X5*X4 *PUT* ORDINAL
AX2 36
BX2 -X5*X2 SINGLE UNIT SECTOR LIMIT
SA3 LSEC LOGICAL SECTOR NUMBER
CHA1.1 IX3 X3-X2
NG X3,CHA1.2 IF CORRECT *PUT* ENTRY FOUND
LX6 PUTLS
TA1 X6+HSCT,PUT CHECK NEXT *PUT* IN CHAIN
BX6 -X5*X1 NEXT *PUT* ORDINAL
ZR X6,CHA26 IF LOGICAL SECTOR TOO LARGE
EQ CHA1.1 CHECK NEXT *PUT* ENTRY
CHA1.2 IX3 X3+X2 R(LS/SL) = RLSN
LX3 18
LX2 36
BX6 X6+X3
BX6 X6+X2
SA6 PUTO SET PUTO = 24/SUSL, 18/RLSN, 18/PUTO
LX6 PUTLS FETCH HASH TABLE PARAMETERS
TA1 X6+HSCT,PUT
SA3 LTRK LOGICAL TRACK
MX6 -18
AX1 24
BX6 -X6*X1 BASE HASH TABLE ADDRESS
AX4 12
BX4 -X5*X4 EST ORDINAL
CX2 X4,EST CONVERT EST ORDINAL TO OFFSET
TA4 X2+EQAE,EST GET PARTITION NUMBER FROM EST
MX2 -4
LX4 -18
BX0 -X2*X4
SX4 HATLE COMPUTE HASH TABLE PARTITION OFFSET
IX2 X0*X4
IX6 X6+X2
SA6 HTA SET HASH TABLE ADDRESS
AX1 18
MX4 -9
BX4 -X4*X1 HASH TABLE MASK
ERRNZ LLCV-4 CODE DEPENDS ON VALUE
LX3 2
BX3 X3*X4
IX5 X3+X6
BX6 X5
SB5 LLCV
SX0 B0 CLEAR EMPTY HASH ENTRY FLAG
* SEARCH HASH ENTRIES FOR DATA MATCH.
CHA1.3 SA1 X5 READ NEXT HASH ENTRY
ZR X1,CHA5 IF HASH ENTRY IS EMPTY
MX3 12
SA2 LTRK CHECK FOR TRACK MATCH
BX4 X3*X1
LX4 12
IX4 X4-X2
NZ X4,CHA6 IF WRONG TRACK
LX3 -24
SA2 LSEC GET REQUESTED LOGICAL SECTOR
BX4 X3*X1
AX4 24
IX4 X4-X2
NG X4,CHA4.1 IF OUR DATA NOT IN THIS HASH ENTRY
LX3 12
BX4 X3*X1
AX4 36
IX4 X2-X4
MX3 -12
NG X4,CHA4.1 IF OUR DATA NOT IN THIS HASH ENTRY
* SEARCH CONTROL BUFFERS LINKED TO THIS ENTRY
* FOR A MATCH WITH THE REQUESTED DATA.
BX0 -X3*X1 GET CONTROL BUFFER INDEX
CHA2 BX6 X0
LX6 CBTLS
TA4 X6+FSTC,CBT
AX4 12
BX4 -X3*X4 ACTUAL SECTOR
TA1 X6+HSLK,CBT
IX6 X2-X4
NG X6,CHA4 IF OUR DATA BEFORE THIS BUFFER
SA2 A5+B1
NZ X6,CHA4.1 IF OUR DATA BEYOND THIS BUFFER
TX4 A5-1,-SP
BX6 X6-X6
LX2 59-4
ZR X4,CHA3 IF PSEUDO PP
SA4 NCHV
NZ X4,CHA3 IF NO *CHRV* DATA PRESENT
PL X2,CHA3 IF NOT DEVICE VERIFICATION CALL
MX6 -48
PX4 B0 DEVICE VERIFICATION FLAG
SA2 CHAN CHANNEL SELECTED BY *1MV*
BX6 -X6*X1 CLEAR *HSLK* BYTE 0
BX6 X4+X6 SET DEVICE VERIFICATION FLAG
SA6 A1+ UPDATE *HSLK*
SA4 A1-HSLK+PAD4
MX6 -54
LX2 54 POSITION CHANNEL
BX4 -X6*X4 CLEAR CHANNEL FIELD IN *PAD4*
BX6 X4+X2 MERGE CHANNEL INTO *PAD4*
SA6 A4+ UPDATE *PAD4*
SA2 A5+
LX2 59-42
BX6 X6-X6
NG X2,CHA11 IF READ OPERATION
CHA3 NG X7,CHA4.2 IF LOCATE ENTRY ONLY
NG X1,CHA11 IF I/O ERROR, EVICT HASH ENTRY
EQ CHA4.2 SET UP EXIT CONDITIONS
CHA4 AX1 24
BX0 -X3*X1 GET FORWARD LINK
NZ X0,CHA2 IF NOT END OF HASH CHAIN
CHA4.1 SX0 B0+
CHA4.2 BX1 X5
SX2 B1
EQ CHA24 SAVE HASH ADDRESS AND EXIT
CHA5 NZ X0,CHA6 IF PREVIOUS EMPTY ENTRY FOUND
BX0 X5
CHA6 SX4 B1+ UPDATE HASH ENTRY ADDRESS
IX5 X5+X4
SB5 B5-B1
NZ B5,CHA1.3 IF NOT END OF LIST CONTROL
SB5 B6+
NG X7,CHA22 IF LOCATE ENTRY ONLY
NZ X0,CHA23 IF EMPTY ENTRY FOUND
NZ X7,CHA22 IF BUFFERS ALLOCATED
* FIND A HASH ENTRY THAT HAS NO I/O ACTIVITY OR WRITE DATA.
* IF ONE IS FOUND, EVICT IT AND RETURN FIRST ENTRY STATUS.
* OTHERWISE SAVE STATUS OF I/O ACTIVITY AND COUNT OF CONTROL
* BUFFERS ON EACH HASH ENTRY IN TABLE *CETS*.
BX5 X6 RESET HASH ADDRESS
SB5 LLCV+1 RESET LIST LENGTH
BX6 X6-X6 ZERO BUFFER COUNT TABLE
CHA7 SA6 B5+CETS-1
SB5 B5-1
NZ B5,CHA7 IF PRESET NOT COMPLETE
SB5 LLCV RESET LIST LENGTH
CHA8 SA1 X5 READ NEXT HASH ENTRY
MX3 -12
BX6 X6-X6
BX0 -X3*X1
CHA9 BX2 X6 UPDATE BUFFER COUNT
SA1 B5+CETS-1
SX6 X1+B1
SA6 A1
BX6 X2
BX1 X0 GET ACCESS FLAGS
LX1 CBTLS
TA2 X1+IOLK,CBT
NG X2,CHA18 IF I/O INTERLOCK
LX2 59-57
PL X2,CHA10 IF READ BUFFER
SX6 B1 SET WRITE BUFFER FLAG
CHA10 SA2 A2+B1
ERRNZ HSLK-IOLK-1 CODE DEPENDS ON VALUE
MX3 12 GET FORWARD LINK
LX2 24
BX0 X3*X2
LX0 12
SA2 A2+LSLK-HSLK
BX2 X3*X2
NZ X2,CHA18 IF NOT ZERO ACCESS COUNT
NZ X0,CHA9 IF ANOTHER BUFFER ON THREAD
NZ X6,CHA19 IF NOT ALL BUFFERS WERE READ
SX6 B1 SET EVICTED READ HASH STATUS
LX6 48
* EVICT THE HASH TABLE ENTRY POINTED TO BY (X5).
CHA11 SB5 B6 SAVE B6
SA2 X5 READ HASH ENTRY
SA6 CSBS
CHA12 MX3 -12
BX0 -X3*X2 GET INDEX
SX6 X0+ SET CBT INTERLOCK
SA6 INLB
LX6 CBTLS
TA2 X6+HSLK,CBT GET FORWARD HASH LINK
LX2 -24
BX6 -X3*X2
SA6 CAFL
ERRNZ LSLK-HSLK-1 CODE DEPENDS ON VALUE
SA1 A2+B1
LX2 24 REPOSITION *HSLK*
MX6 12
BX6 X6*X1
NZ X6,CHA22 IF ACCESS COUNT NON-ZERO
SA1 A2-B1
ERRNZ IOLK+1-HSLK CODE DEPENDS ON VALUE
BX6 X5
SA6 CHAD
BX6 X0
NG X1,CHA17 IF I/O INTERLOCK SET
LX1 59-57
PL X1,CHA14 IF READ BUFFER
TA6 IORQ INITIATE I/O
XJ
SB6 CHA13 *DCC* RETURN ADDRESS
EQ DCC DELINK CONTROL BUFFER FROM CONTROL BUFFER
CHA13 SB6 CHA17 *LCC* RETURN ADDRESS
TX1 DWTB
EQ LCC LINK CONTROL BUFFER
CHA14 SB6 CHA15 *DCC* RETURN ADDRESS
EQ DCC DELINK CONTROL BUFFER FROM CONTROL BUFFER
CHA15 SB6 CHA16 *DCH* RETURN ADDRESS
EQ DCH DELINK CONTROL BUFFER FROM HASH LINK
CHA16 SB6 CHA17 *LCC* RETURN ADDRESS
TX1 EMTB
EQ LCC LINK CONTROL BUFFER
CHA17 SA3 CHAD GET HASH ADDRESS
SA2 CAFL GET FORWARD LINK
BX5 X3
NZ X2,CHA12 IF ANOTHER BUFFER TO EVICT
SA2 X5
SB6 B5+ RESTORE B6
NZ X2,CHA22 IF ALL BUFFERS NOT EVICTED
SA4 CSBS
BX6 X4
SX0 X5
SB6 CHA23 SET *CHT* EXIT ADDRESS
EQ CHT UPDATE STATISTICS
CHA18 MX6 59 SET I/O ACTIVE FLAG
SA6 CETS+LLCV
CHA19 SX1 1 UPDATE HASH ADDRESS
IX5 X5+X1
SB5 B5-B1
NZ B5,CHA8 IF NOT END OF LIST CONTROL
SA1 CETS+LLCV
NG X1,CHA22 IF I/O ACTIVE
* EVICT THE HASH ENTRY WITH THE SMALLEST BUFFER COUNT.
SB5 LLCV RESET LIST LENGTH
SX3 B0+ PRESET INDEX AND MINIMUM VALUE
SX2 LSLB*100B
CHA20 SA1 X3+CETS
IX4 X1-X2
PL X4,CHA21 IF THIS ENTRY NOT SMALLER
BX6 X3 SAVE NEW INDEX
BX2 X1 SAVE NEW VALUE
CHA21 SB5 B5-B1
SX3 X3+B1
NZ B5,CHA20 IF TABLE NOT SEARCHED
SX6 X6-LLCV ADJUST HASH ENTRY ADDRESS IN X5
IX5 X5+X6
SX6 B1 SET EVICTED WRITE HASH STATUS
LX6 36
EQ CHA11 EVICT WRITE ENTRY
CHA22 SX2 -B1 SET BUFFER BUSY STATUS
SX1 B0
EQ CHA24 PROCESS RESPONSE
CHA23 SB6 B5 RESTORE (B6)
BX1 X0 SET FIRST ACCESS STATUS
SX2 B0+
CHA24 SX6 X1+ SAVE HASH ENTRY ADDRESS
SA6 CHEA
JP B6 EXIT
CLP SPACE 4,20
** CLP - CONVERT LOGICAL TO PHYSICAL.
*
* ENTRY (B6) = RETURN ADDRESS.
* (AILE) = ALGORITHM INDEX.
* (LTRK) = LOGICAL TRACK.
* (PUTO) = 24/SUSL, 18/RLSN, 18/PUTO
* SUSL = SINGLE UNIT SECTOR LIMIT.
* RLSN = R(LS/SL).
* PUTO = *PUT* ORDINAL.
*
* EXIT (X0) = CONTROL BUFFER ORDINAL.
* (X1) = PHYSICAL CYLINDER NUMBER.
* (X3) = PHYSICAL UNIT NUMBER.
* (X4) = 48/, 6/PHYSICAL TRACK, 6/PHYSICAL SECTOR.
*
* USES A - 1, 2, 3, 4.
* B - 4, 5.
* X - 1, 2, 3, 4, 5, 6.
CLP BSS 0 ENTRY
SA2 PUTO
SB5 X2 SAVE *PUT* ORDINAL
AX2 18
SX3 X2 R(LS/SL)
AX2 18 SINGLE UNIT SECTOR LIMIT
SA1 AILE ALGORITHM INDEX
SA4 LTRK LOGICAL TRACK
SB4 X1-AIDB
MX6 -11
BX4 -X6*X4
JP B4+TCLP TRANSFER TO PROCESSOR
* ENTER PROCESSOR WITH -
*
* (B5) = *PUT* ORDINAL.
* (X2) = SUSL.
* (X3) = R(LS/SL).
* (X4) = LT - 4000B.
** 885-42 CONVERSION (*DB*).
*
* ALGORITHM -
* SL = 1200B
* LU = LS/SL
* X = BIT 0 OF LT
* PC = BITS 1 - 10 OF LT
* PT = (X*SL+R(LS/SL))/200B
* PS = (R(X*SL+R(LS/SL))/200B)/4
CLP3 LX4 -1 SIGN = BIT 0 OF LT = X
SX1 X4 SET CYLINDER NUMBER
AX4 59 SIGN EXTEND BIT 0
BX4 X4*X2 BIT 0 OF LT * SL
MX6 -7
IX4 X4+X3 X*SL+R(LS/SL)
BX6 -X6*X4
AX4 7 PT
ERRNZ LSPTDB-200B CODE DEPENDS ON VALUE
SX2 B5
AX6 CFSDB PS
EQ CLP8 COMPLETE PROCESSING
** 895 FULL TRACK CONVERSION (*DC*).
*
* ALGORITHM -
* SL = 1300B SECTOR LIMIT
* LU = LS/SL LOGICAL UNIT
* X = BIT 0 OF LT
* PC = BITS 1 - 10 OF LT PHYSICAL CYLINDER
* PT = (X*SL + R(LS/SL))/140B PHYSICAL TRACK
* PS = R((X*SL + R(LS/SL))/140B)/40B PHYSICAL SECTOR
CLP4 SX5 LSPTDC LOGICAL SECTORS PER PHYSICAL TRACK
SB4 CFSDC
EQ CLP6 PERFORM CONVERSION
** 819 CONVERSION (*DV* AND *DW*).
*
* SL = 1440B
* LU = LS/SL
* X = BIT 0 OF LT
* PC = BITS 1 - 10 OF LT
* PT = (X*SL+R(LS/SL))/240B
* PS = (R(X*SL)+R(LS/SL))/240B)/10B
CLP5 SX5 LSPTDV LOGICAL SECTORS PER PHYSICAL TRACK
SB4 CFSDV
* PERFORM CONVERSION WITH -
*
* (X3) = R(LS/SL).
* (X4) = LT - 4000B.
* (X5) = NUMBER OF LOGICAL SECTORS PER PHYSICAL TRACK.
* (B4) = SHIFT FOR LOGICAL TO PHYSICAL SECTOR CONVERSION.
CLP6 LX4 -1 SIGN = BIT 0 OF LT = X
SX1 X4 SET CYLINDER NUMBER
AX4 59 SIGN EXTEND BIT 0
BX4 X4*X2 BIT 0 OF LT * SL
* CONTINUE CONVERSION WITH -
*
* (X1) = PHYSICAL CYLINDER NUMBER.
* (X3)+(X4) = LOGICAL SECTOR NUMBER WITHIN CYLINDER.
* (X5) = NUMBER OF LOGICAL SECTORS PER PHYSICAL TRACK.
* (B4) = SHIFT FOR LOGICAL TO PHYSICAL SECTOR CONVERSION.
CLP7 IX3 X4+X3 X*SL+R(LS/SL)
PX6 X5
PX4 X3
NX6 X6
SX2 B5+0 MOVE *PUT* ORDINAL
FX4 X4/X6
UX4,B5 X4
LX4 X4,B5 PT
IX6 X4*X5
IX6 X3-X6
AX6 B4 PS
* COMPLETE PROCESSING WITH -
*
* (X1) = PHYSICAL CYLINDER (PC).
* (X4) = PHYSICAL TRACK (PT).
* (X6) = PHYSICAL SECTOR (PS).
* (X2) = *PUT* ORDINAL.
CLP8 LX2 PUTLS
LX4 6
TA3 X2+UNCT,PUT FETCH UNIT NUMBER FROM *PUT*
MX5 -6
BX4 X6+X4 MERGE PHYSICAL TRACK AND SECTOR
AX3 48
BX3 -X5*X3
JP B6 RETURN
** 887 SMALL (4K BYTE) SECTOR CONVERSION (*DF*).
*
* ALGORITHM -
* SL = 1140B
* LU = LS/SL
* X = BIT 0 OF LT
* PC = BITS 1 - 10 OF LT
* PT = (X*SL+R(LS/SL))/460B
* PS = (R(X*SL+R(LS/SL))/460B)/10B
CLP9 SX5 LSPTDF LOGICAL SECTORS PER PHYSICAL TRACK
SB4 CFSDF
EQ CLP6 PERFORM CONVERSION
** 887 LARGE (16K BYTE) SECTOR CONVERSION (*DH*).
*
* ALGORITHM -
* SL = 1300B
* LU = LS/SL
* X = BIT 0 OF LT
* PC = BITS 1 - 10 OF LT
* PT = (X*SL+R(LS/SL))/540B
* PS = (R(X*SL+R(LS/SL))/540B)/40B
CLP10 SX5 LSPTDH LOGICAL SECTORS PER PHYSICAL TRACK
SB4 CFSDH
EQ CLP6 PERFORM CONVERSION
** 9853 (XMD) CONVERSION (*DN*).
*
* ALGORITHM -
* SL = 2140B
* NN = ((LT*SL+LS)/40B)*10B
* PC = NN/617B
* PT = (R(NN/617B))/25B
* PS = R((R(NN/617B))/25B)
CLP11 SB4 CFSDN
SX6 PSPTDN*PTCYDN PHYSICAL SECTORS PER CYLINDER
SX5 PSPTDN
* EQ CLP12 ENTER COMMON 9853/583X ALGORITHM
* ENTER COMMON ALGORITHM FOR 9853/583X WITH -
*
* (B4) = SHIFT FOR LOGICAL TO PHYSICAL SECTOR CONVERSION.
* (X2) = SECTOR LIMIT.
* (X3) = R(LS/SL).
* (X4) = LT - 4000B.
* (X5) = NUMBER OF PHYSICAL SECTORS PER PHYSICAL TRACK.
* (X6) = NUMBER OF PHYSICAL SECTORS PER CYLINDER.
CLP12 IX1 X4*X2 LT*SL
IX4 X1+X3 LT*SL+LS
PX3 X6
AX4 B4 NN (CONVERT LOGICAL SECTORS TO PHYSICAL)
NX3 X3
PX1 X4
SA2 MSTA
FX1 X1/X3 NN / PHYSICAL SECTORS PER CYLINDER
SA3 X2+SCYL GET STARTING CYLINDER
UX1,B4 X1
MX2 -12
LX3 -24
LX1 B4 RELATIVE PHYSICAL CYLINDER
BX2 -X2*X3 CYLINDER OFFSET
IX3 X1*X6
IX1 X1+X2 ABSOLUTE PHYSICAL CYLINDER
SB4 B0
BX3 -X3
EQ CLP7 CONVERT PT AND PS
** 5832 (1X SSD) CONVERSION (*EA*).
*
* ALGORITHM -
* SL = 240B
* LU = LS/SL
* NN = (LT*SL+R(LS/SL))/40B
* PC = NN/14B
* PT = R(NN/14B)/3
* PS = R(R(NN/14B)/3)
CLP13 SB4 CFSEA
SX6 PSPTEA*PTCYEA PHYSICAL SECTORS PER CYLINDER
SX5 PSPTEA
EQ CLP12 ENTER COMMON 9853/583X ALGORITHM
** 5832 (2X SSD) CONVERSION (*EB*).
*
* ALGORITHM -
* SL = 500B
* LU = LS/SL
* NN = (LT*SL+R(LS/SL))/40B
* PC = NN/30B
* PT = R(NN/30B)/6
* PS = R(R(NN/30B)/6)
CLP14 SB4 CFSEB
SX6 PSPTEB*PTCYEB PHYSICAL SECTORS PER CYLINDER
SX5 PSPTEB
EQ CLP12 ENTER COMMON 9853/583X ALGORITHM
** 5833 (1X/1XP SABRE) CONVERSION (*EC/ED*).
*
* ALGORITHM -
* SL = 1740B
* LU = LS/SL
* NN = (LT*SL+R(LS/SL))/40B
* PC = NN/50B
* PT = R(NN/50B)/6
* PS = R(R(NN/50B)/6)
CLP15 SB4 CFSEC
SX6 PSPTEC*PTCYEC-SPSCEC PHYSICAL SECTORS PER CYLINDER
SX5 PSPTEC
EQ CLP12 ENTER COMMON 9853/583X ALGORITHM
** 5833 (2X/2XP SABRE) CONVERSION (*EE/EF*).
*
* ALGORITHM -
* SL = 3600B
* NN = (LT*SL+LS)/40B
* PC = NN/113B
* PT = R(NN/113B)/13B
* PS = R(R(NN/113B)/13B)
CLP16 SB4 CFSEE
SX6 PSPTEE*PTCYEE-SPSCEE PHYSICAL SECTORS PER CYLINDER
SX5 PSPTEE
EQ CLP12 ENTER COMMON 9853/583X ALGORITHM
** 5833 (3XP SABRE) CONVERSION (*EM*).
*
* ALGORITHM -
* SL = 2740B
* NN = (LT*SL+LS)/40B
* PC = NN/167B
* PT = R(NN/167B)/21B
* PS = R(R(NN/167B)/21B)
CLP17 SB4 CFSEM
SX6 PSPTEM*PTCYEM-SPSCEM PHYSICAL SECTORS PER CYLINDER
SX5 PSPTEM
EQ CLP12 ENTER COMMON 9853/583X ALGORITHM
** 5833 (4X SABRE) CONVERSION (*EN*).
*
* ALGORITHM -
* SL = 3640B
* LU = LS/SL
* NN = (LT*SL+R(LS/SL))/40B
* PC = NN/232B
* PT = R(NN/232B)/26B
* PS = R(R(NN/232B)/26B)
CLP18 SB4 CFSEN
SX6 PSPTEN*PTCYEN-SPSCEN PHYSICAL SECTORS PER CYLINDER
SX5 PSPTEN
EQ CLP12 ENTER COMMON 9853/583X ALGORITHM
** 5838 (1X/1XP ELITE) CONVERSION (*EG/EH*).
*
* ALGORITHM -
* SL = 3240B
* NN = (LT*SL+LS)/40B
* PC = NN/51B
* PT = R(NN/51B)/5B
* PS = R(R(NN/51B)/5B)
CLP19 SB4 CFSEG
SX6 PSPTEG*PTCYEG-SPSCEG PHYSICAL SECTORS PER CYLINDER
SX5 PSPTEG
EQ CLP12 ENTER COMMON 9853/583X ALGORITHM
** 5838 (2X/2XP ELITE) CONVERSION (*EI/EJ*).
*
* ALGORITHM -
* SL = 3100B
* NN = (LT*SL+LS)/40B
* PC = NN/115B
* PT = R(NN/115B)/11B
* PS = R(R(NN/115B)/11B)
CLP20 SB4 CFSEI
SX6 PSPTEI*PTCYEI-SPSCEI PHYSICAL SECTORS PER CYLINDER
SX5 PSPTEI
EQ CLP12 ENTER COMMON 9853/583X ALGORITHM
** 5838 (3XP ELITE) CONVERSION (*EK*).
*
* ALGORITHM -
* SL = 3240B
* NN = (LT*SL+LS)/40B
* PC = NN/172B
* PT = R(NN/172B)/16B
* PS = R(R(NN/172B)/16B)
CLP21 SB4 CFSEK
SX6 PSPTEK*PTCYEK-SPSCEK PHYSICAL SECTORS PER CYLINDER
SX5 PSPTEK
EQ CLP12 ENTER COMMON 9853/583X ALGORITHM
** 5838 (4X ELITE) CONVERSION (*EL*).
*
* ALGORITHM -
* SL = 3140B
* NN = (LT*SL+LS)/40B
* PC = NN/236B
* PT = R(NN/236B)/22B
* PS = R(R(NN/236B)/22B)
CLP22 SB4 CFSEL
SX6 PSPTEL*PTCYEL-SPSCEL PHYSICAL SECTORS PER CYLINDER
SX5 PSPTEL
EQ CLP12 ENTER COMMON 9853/583X ALGORITHM
** 47444 (1X/1XP 3.5IN) CONVERSION (*EO/EP*).
*
* ALGORITHM -
* SL = 3240B
* NN = (LT*SL+LS)/10B
* PC = NN/274B
* PT = R(NN/274B)/15B
* PS = R(R(NN/274B)/15B)
CLP23 SB4 CFSEO
SX6 PSPTEO*PTCYEO-SPSCEO PHYSICAL SECTORS PER CYLINDER
SX5 PSPTEO
EQ CLP12 ENTER COMMON 9853/583X/47444 ALGORITHM
** 47444 (2X/2XP 3.5IN) CONVERSION (*ES/EU*).
*
* ALGORITHM -
* SL = 3240B
* NN = (LT*SL+LS)/20B
* PC = NN/274B
* PT = R(NN/274B)/15B
* PS = R(R(NN/274B)/15B)
CLP24 SB4 CFSES
SX6 PSPTES*PTCYES-SPSCES PHYSICAL SECTORS PER CYLINDER
SX5 PSPTES
EQ CLP12 ENTER COMMON 9853/583X/47444 ALGORITHM
** 47444 (3XP 3.5IN) CONVERSION (*EV*).
*
* ALGORITHM -
* SL = 3200B
* NN = (LT*SL+LS)/20B
* PC = NN/426B
* PT = R(NN/426B)/23B
* PS = R(R(NN/426B)/23B)
CLP25 SB4 CFSEV
SX6 PSPTEV*PTCYEV-SPSCEV PHYSICAL SECTORS PER CYLINDER
SX5 PSPTEV
EQ CLP12 ENTER COMMON 9853/583X/47444 ALGORITHM
** 47444 (4X 3.5IN) CONVERSION (*EW*).
*
* ALGORITHM -
* SL = 3200B
* NN = (LT*SL+LS)/20B
* PC = NN/560B
* PT = R(NN/560B)/31B
* PS = R(R(NN/560B)/31B)
CLP26 SB4 CFSEW
SX6 PSPTEW*PTCYEW-SPSCEW PHYSICAL SECTORS PER CYLINDER
SX5 PSPTEW
EQ CLP12 ENTER COMMON 9853/583X/47444 ALGORITHM
* TCLP - TABLE FOR CONVERTING LOGICAL TO PHYSICAL ADDRESSES.
TCLP BSS 0
LOC AIDB
+ EQ CLP3 *DB* DEVICES
ERRNZ *-AIDB INDEX MUST MATCH POSITION IN TABLE
+ EQ CLP4 *DC* DEVICES
ERRNZ *-AIDC INDEX MUST MATCH POSITION IN TABLE
+ EQ CLP5 *DV* AND *DW* DEVICES
ERRNZ *-AIDV INDEX MUST MATCH POSITION IN TABLE
+ EQ CLP5 *DV* AND *DW* DEVICES
ERRNZ *-AIDW INDEX MUST MATCH POSITION IN TABLE
+ EQ CLP9 *DF* DEVICES
ERRNZ *-AIDF INDEX MUST MATCH POSITION IN TABLE
+ EQ CLP10 *DH* DEVICES
ERRNZ *-AIDH INDEX MUST MATCH POSITION IN TABLE
+ EQ CLP11 *DN* DEVICES
ERRNZ *-AIDN INDEX MUST MATCH POSITION IN TABLE
+ EQ CLP13 *EA* DEVICES
ERRNZ *-AIEA INDEX MUST MATCH POSITION IN TABLE
+ EQ CLP14 *EB* DEVICES
ERRNZ *-AIEB INDEX MUST MATCH POSITION IN TABLE
+ EQ CLP15 *EC/ED* DEVICES
ERRNZ *-AIEC INDEX MUST MATCH POSITION IN TABLE
+ EQ CLP16 *EE/EF* DEVICES
ERRNZ *-AIEE INDEX MUST MATCH POSITION IN TABLE
+ EQ CLP17 *EM* DEVICES
ERRNZ *-AIEM INDEX MUST MATCH POSITION IN TABLE
+ EQ CLP18 *EN* DEVICES
ERRNZ *-AIEN INDEX MUST MATCH POSITION IN TABLE
+ EQ CLP19 *EG/EH* DEVICES
ERRNZ *-AIEG INDEX MUST MATCH POSITION IN TABLE
+ EQ CLP20 *EI/EJ* DEVICES
ERRNZ *-AIEI INDEX MUST MATCH POSITION IN TABLE
+ EQ CLP21 *EK* DEVICES
ERRNZ *-AIEK INDEX MUST MATCH POSITION IN TABLE
+ EQ CLP22 *EL* DEVICES
ERRNZ *-AIEL INDEX MUST MATCH POSITION IN TABLE
+ EQ CLP23 *EO/EP* DEVICES
ERRNZ *-AIEO INDEX MUST MATCH POSITION IN TABLE
+ EQ CLP24 *ES/EU* DEVICES
ERRNZ *-AIES INDEX MUST MATCH POSITION IN TABLE
+ EQ CLP25 *EV* DEVICES
ERRNZ *-AIEV INDEX MUST MATCH POSITION IN TABLE
+ EQ CLP26 *EW* DEVICES
ERRNZ *-AIEW INDEX MUST MATCH POSITION IN TABLE
LOC *O
DCB SPACE 4,15
** DCB - DELINK CONTROL BUFFER FROM LINK.
*
* ENTRY (X0) = CONTROL BUFFER INDEX.
* (X1) = WORD POSITION OF LINK.
* (B6) = RETURN ADDRESS.
*
* EXIT (X6) = BASE ADDRESS OF CONTROL BUFFERS + OFFSET.
* (X5) = LINK WORD.
* (X4) = FORWARD LINK INDEX.
* (X3) = BACKWARD LINK INDEX.
* (A7) = ADDRESS OF LINK WORD
*
* USES A - 2.
* X - 1, 2, 3, 4, 5, 6, 7.
DCB BSS 0 ENTRY
TX6 X1,CBT FORM BASE ADDRESS + WORD POSITION
BX1 X0 FORM ADDRESS OF CONTROL BUFFER
LX1 CBTLS
IX1 X1+X6
SA2 X1
MX1 12 GET FORWARD LINK INDEX
BX5 X2
LX1 36
BX4 X1*X5
LX1 12 GET BACKWARD LINK INDEX
BX3 X1*X5
AX3 36
ZR X3,DCB1 IF BACKWARD LINK IS ZERO
BX7 X3 FORM ADDRESS OF BACKWARD BUFFER
LX7 CBTLS
IX7 X7+X6
LX1 48
+ SA2 X7 **** PERFORM IN ONE WORD ****
BX2 -X1*X2 **** PERFORM IN ONE WORD ****
BX7 X2+X4 **** PERFORM IN ONE WORD ****
SA7 A2 **** PERFORM IN ONE WORD ****
DCB1 ZR X4,DCB2 IF FORWARD LINK IS ZERO
MX1 12
AX4 24-CBTLS
IX7 X4+X6
LX1 48 MODIFY BACKWARD LINK IN FORWARD BUFFER
LX3 36
+ SA2 X7 **** PERFORM IN ONE WORD ****
BX2 -X1*X2 **** PERFORM IN ONE WORD ****
BX7 X2+X3 **** PERFORM IN ONE WORD ****
SA7 A2 **** PERFORM IN ONE WORD ****
AX4 CBTLS
LX3 24
DCB2 BX1 X0 CLEAR LINK BYTES
LX1 CBTLS
IX1 X1+X6
MX5 36
+ SA2 X1 **** PERFORM IN ONE WORD ****
LX5 24 **** PERFORM IN ONE WORD ****
BX7 X5*X2 **** PERFORM IN ONE WORD ****
SA7 A2 **** PERFORM IN ONE WORD ****
BX5 X7 LINK WORD
JP B6 RETURN
DCC SPACE 4,15
** DCC - DELINK CONTROL BUFFER FROM CONTROL BUFFER LINK.
*
* ENTRY (X0) = CONTROL BUFFER ORDINAL.
* (B3) = REGISTER SAVE BUFFER ADDRESS.
* (B6) = RETURN ADDRESS.
*
* EXIT (X7) PRESERVED.
*
* USES A - 1, 2, 7.
* B - 6.
* X - 1, 2, 5, 7.
*
* CALLS DCB.
DCC BSS 0 ENTRY
SA7 B3+B1 SAVE (X7)
SB3 A7+B1
SX7 B6+ SAVE (B6)
SA7 A7-B1
SX1 LSLK SET CONTROL BUFFER LINK WORD
BX7 X0 SET CONTROL BUFFER INTERLOCK
SA7 INLB
SB6 DCC2 SET RETURN ADDRESS
EQ DCB DELINK BUFFER
DCC2 BX1 X0 GET LIST INDEX WORD
LX1 CBTLS
IX1 X1+X6
MX2 -3
SA1 X1-LSLK+HSLK
BX5 X1
AX5 21 GET LIST INDEX
BX1 -X2*X5
TA2 X1,BLMB
MX7 1 DECREMENT COUNT
LX7 37
IX7 X2-X7
NZ X3,DCC3 IF BACKWARD LINK NOT ZERO
MX5 -18 MODIFY FORWARD POINTER
BX7 X5*X7
BX7 X7+X4
DCC3 NZ X4,DCC4 IF FORWARD LINK NOT ZERO
MX5 -18 MODIFY BACKWARD POINTER
LX5 18
BX7 X5*X7
LX3 18
BX7 X7+X3
DCC4 SA7 A2
SA1 B3-B1 RESTORE (X7)
SA2 A1-B1 RESTORE (B6)
SB3 A1-B1
BX7 X1
SB6 X2
JP B6 RETURN
DCH SPACE 4,15
** DCH - DELINK CONTROL BUFFER FROM HASH LINK.
*
* ENTRY (X0) = CONTROL BUFFER ORDINAL.
* (B3) = REGISTER SAVE BUFFER ADDRESS.
* (B6) = RETURN ADDRESS.
*
* EXIT (X7) PRESERVED.
* TO */PROGRAM/HNG* IF NO HASH INDEX OR *PUT* ORDINAL
* PRESENT.
*
* USES A - 1, 2, 3, 7.
* B - 6.
* X - 1, 2, 3, 5, 7.
*
* CALLS DCB.
DCH BSS 0 ENTRY
SA7 B3+B1 SAVE (X7)
SB3 A7+B1
SX7 B6 SAVE (B6)
SA7 A7-B1
SX1 HSLK SET HASH CHAIN WORD
SB6 DCH2 SET RETURN ADDRESS
EQ DCB DELINK BUFFER
DCH2 MX7 39
SA1 A7+FSTC-HSLK GET FST INFORMATION
BX7 X7*X5
SA7 A7 CLEAR HASH INDEX AND *PUT* ORDINAL
SX7 B0
SA7 A1 CLEAR FST INFORMATION
LX1 -48
MX7 -12
NZ X3,RXR IF HASH ENTRY UPDATE NOT NEEDED
BX1 -X7*X1 EST ORDINAL
MX7 -9
LX7 12
BX3 -X7*X5 GET HASH ENTRY INDEX
LX3 -12
CX7 X1,EST CONVERT ORDINAL TO OFFSET
TA1 X7+EQAE,EST GET PARTITION NUMBER
MX7 -4
LX1 -18
MX2 -12
BX7 -X7*X1
SX1 HATLE
IX7 X1*X7 HASH TABLE PARTITION OFFSET
BX1 -X2*X5 GET *PUT* ORDINAL
LX1 PUTLS
TA1 X1+HSCT,PUT
IX3 X3+X7 ADJUST HASH TABLE INDEX FOR PARTITION
AX1 24
MX2 -18
BX7 X4
BX1 -X2*X1
IX1 X1+X3 FORM HASH ENTRY ADDRESS
ZR X4,DCH3 IF HASH ENTRY TO BE ZEROED
SA3 X1 READ HASH ENTRY
MX2 -12 MODIFY CONTROL BUFFER INDEX
BX3 X2*X3
BX7 X3+X4
DCH3 SA7 X1 REWRITE HASH ENTRY
SA1 B3-B1 RESTORE (X7)
SA2 A1-B1 RESTORE (B6)
SB3 A1-B1
BX7 X1
SB6 X2
JP B6 RETURN
LCB SPACE 4,15
** LCB - LINK CONTROL BUFFER.
*
* ENTRY (X0) = NEW BUFFER INDEX.
* (X1) = 24/0 ,18/BI ,18/OI .
* BI - OLD BUFFER INDEX.
* OI - OFFSET INDEX OF LINK (6,7).
* (B6) = RETURN ADDRESS.
*
* USES A - 2, 3, 7.
* X - 1, 2, 3, 4, 5, 6, 7.
LCB BSS 0 ENTRY
TX6 X1,CBT READ OFFSET
AX1 18 GET OLD BUFFER INDEX
BX2 X1 FORM ADDRESS OF OLD BUFFER
LX2 CBTLS
IX2 X2+X6
SA3 X2 READ LINK WORD
MX4 12 SAVE OLD FORWARD LINK
LX4 36
BX3 X4*X3
AX3 24
LX0 24 SET FORWARD LINK TO NEW BUFFER INDEX
+ SA2 A3 **** PERFORM IN ONE WORD ****
BX7 -X4*X2 **** PERFORM IN ONE WORD ****
BX7 X7+X0 **** PERFORM IN ONE WORD ****
SA7 A2 **** PERFORM IN ONE WORD ****
LX0 36
BX2 X0 GET LINK WORD IN NEW BUFFER
LX2 CBTLS
IX2 X2+X6
SA2 X2
BX5 X1 SET BACKWARD LINK TO OLD BUFFER
LX5 12
BX5 X5+X3 SET FORWARD LINK TO OLD FORWARD
LX5 24
MX4 24
LX4 48
BX7 -X4*X2
BX7 X7+X5
SA7 A2
ZR X3,/MONITOR/RB6 IF ADDING TO END OF CHAIN
BX2 X3 FORM ADDRESS OF FORWARD
LX2 CBTLS
IX2 X2+X6
MX4 12 MODIFY BACKWARD LINK
LX0 36
LX4 48
+ SA3 X2 **** PERFORM IN ONE WORD ****
BX3 -X4*X3 **** PERFORM IN ONE WORD ****
BX7 X3+X0 **** PERFORM IN ONE WORD ****
SA7 A3 **** PERFORM IN ONE WORD ****
LX0 24
JP B6 RETURN
LCC SPACE 4,15
** LCC - LINK CONTROL BUFFER TO END OF SPECIFIED CHAIN.
*
* EXTRY (X0) = CONTROL BUFFER ORDINAL.
* (X1) = LIST ADDRESS.
* (B3) = REGISTER SAVE BUFFER ADDRESS.
* (B6) = RETURN ADDRESS.
*
* EXIT (X7) PRESERVED.
*
* USES A - 2, 3, 6, 7.
* B - 6.
* X - 1, 2, 3, 4, 5, 6, 7.
*
* CALLS LCB, RXR.
LCC BSS 0 ENTRY
SA7 B3+B1 SAVE (X7)
SB3 A7+B1
SX7 B6 SAVE (B6)
SA7 A7-B1
BX7 X0 SET CONTROL BUFFER INTERLOCK
SA7 INLB
BX3 X0 SET NEW LIST INDEX
LX3 CBTLS
TA3 X3+HSLK,CBT
MX4 3
LX4 24
BX3 -X4*X3
TX4 X1,-BLMB
LX4 21
BX7 X3+X4
SA2 X1 READ LIST WORD
SA7 A3
NZ X2,LCC2 IF LIST NOT EMPTY
SX2 B1 SET COUNT = 1
LX2 18
BX2 X2+X0 SET LAST
LX2 18
BX7 X2+X0 SET FIRST = LAST
SA7 A2
BX1 X0 GET ADDRESS OF CONTROL BUFFER WORD 7
LX1 CBTLS
SA2 A3+LSLK-HSLK READ CONTROL BUFFER LINK WORD
MX3 24
LX3 48 ZERO CONTROL BUFFER LINKS
BX7 -X3*X2
SA7 A2
SA1 B3-B1 RESTORE (X7)
SB3 A1-B1
SA2 A1-B1 RESTORE (B6)
BX7 X1
SB6 X2
JP B6 RETURN
LCC2 SX3 B1 INCREMENT COUNT
LX3 36
IX2 X3+X2
MX3 -18 UPDATE LAST POINTER
LX3 18
BX1 -X3*X2 SAVE OLD LAST
SX5 LSLK ADD CONTROL BUFFER LINK WORD
IX1 X1+X5
BX2 X3*X2
LX0 18
BX6 X2+X0
SA6 A2
LX0 42
SB6 RXR SET RETURN ADDRESS TO RESTORE ROUTINE
EQ LCB LINK CONTROL BUFFER (X0) FOLLOWING (X1)
LCH SPACE 4,15
** LCH - LINK CONTROL BUFFER TO HASH CHAIN.
*
* ENTRY (X0) = CONTROL BUFFER INDEX.
* (X1) = HASH ENTRY ADDRESS.
* (B3) = REGISTER SAVE BUFFER ADDRESS.
* (B6) = RETURN ADDRESS.
*
* EXIT (X7) PRESERVED.
*
* USES A - 1, 2, 3, 4, 7.
* B - 6.
* X - 1, 2, 3, 4, 5, 6, 7.
*
* CALLS LCB, RXR.
LCH BSS 0 ENTRY
SA7 B3+B1 SAVE (X7)
SB3 A7+B1
SX7 B6 SAVE (B6)
SA7 A7-B1
BX2 X1
BX1 X0 SET NEW *PUT* ORDINAL AND HASH INDEX
SA4 PUTO
LX1 CBTLS
TA3 X1+HSLK,CBT
MX5 -21
BX3 X5*X3
SX4 X4+
BX3 X3+X4
SA4 HTA FORM HASH INDEX
IX4 X2-X4
LX4 12
BX7 X3+X4
MX5 -12
SA1 X2 GET CONTROL BUFFER INDEX
MX6 24
SA7 A3
LX6 -12 POSITION ADDRESS MASK
BX1 -X5*X1
SX3 X0
ZR X1,LCH5 IF NO BUFFERS ON HASH THREAD
LX3 CBTLS
BX4 X1
TA3 X3+PAD1,CBT GET DISK ADDRESS FROM NEW BUFFER
NO
BX7 X6*X3 EXTRACT CYLINDER, TRACK AND SECTOR
* FIND POSITION TO INSERT NEW BUFFER.
LCH2 BX3 X4 SET BUFFER ORDINAL
SX1 X4+0
LX3 CBTLS
TA4 X3+PAD1,CBT
BX4 X6*X4 ISOLATE CYLINDER, TRACK AND SECTOR
IX4 X4-X7
NG X4,LCH4 IF POSITION FOUND
SA4 A4+HSLK GET FORWARD LINK
AX4 24
BX4 -X5*X4
NZ X4,LCH2 IF NOT END OF CHAIN
LCH3 SX2 HSLK FORM PARAMETER FOR *LCB*
SB6 RXR RETURN TO RESTORE REGISTERS
LX1 18
BX1 X1+X2
EQ LCB LINK CONTROL BUFFER
LCH4 TA4 X3+HSLK,CBT GET BACKWARD LINK
AX4 36
BX1 -X5*X4
NZ X1,LCH3 IF NOT FIRST BUFFER ON HASH LIST
* UPDATE HASH ENTRY AND ADD BUFFER AT START.
LCH5 SA1 X2 READ HASH ENTRY
BX4 -X5*X1
BX1 X5*X1 SET INDEX = NEW BUFFER
BX7 X1+X0
SA7 A1
LX0 CBTLS READ HASH CHAIN WORD OF NEW BUFFER
TA2 X0+HSLK,CBT
BX2 -X6*X2
LX4 24 SET FORWARD LINK = OLD HASH INDEX
BX7 X2+X4
LX4 36+CBTLS POSITION HASH INDEX
SA7 A2
LX0 -CBTLS
ZR X4,RXR IF NO BUFFERS ON CHAIN
TA2 X4+HSLK,CBT
LX5 36
BX2 X5*X2 SET BACKWARD LINK = NEW BUFFER
LX0 36
BX7 X2+X0
LX0 24
SA7 A2
* EQ RXR RESTORE (X2) AND (X7) AND RETURN
ERRNZ *-RXR *RXR* MUST FOLLOW *LCH*
RXR SPACE 4,15
** RXR - RESTORE X2 AND X7 AND EXIT TO (X2).
*
* ENTRY (B3) = NEXT AVAILABLE SCRATCH.
*
* EXIT REGISTERS X2 AND X7 ARE RESTORED.
* (B6) RESTORED TO RETURN ADDRESS.
* RETURN IS TO (X2), NOT TO CALLER.
* (B3) UPDATED.
*
* USES A - 1, 2.
* B - 3, 6.
* X - 1, 2, 7.
RXR BSS 0 ENTRY
SA1 B3-B1 RESTORE (X7)
SB3 A1-B1
SA2 A1-B1 RESTORE (X2)
BX7 X1
SB6 X2 GET RETURN ADDRESS
JP B6 RETURN
SBB SPACE 4,10
** SBB - SET BUFFER BUSY RESPONSE.
*
* EXIT (X6) = 1/0, 1/1, 58/0 (BUSY STATUS).
* PUT STATISTICS UPDATED.
* CONTROL PASSED TO LBMXS.
*
* USES A - 1, 3, 6.
* X - 1, 3, 4, 6.
SBB BSS 0 ENTRY
SA3 PUTO
SX6 B1
LX3 PUTLS
TA1 X3+ACRJ,PUT COUNT BUFFER BUSY
BX3 X1
LX1 59-23
NG X1,SBB1 IF OVERFLOW
IX7 X3+X6
SA7 A1
SBB1 SA1 A1+B1
ERRNZ ACST-ACRJ-1 CODE DEPENDS ON VALUE
BX3 X1
LX1 59-35
IX7 X3+X6
NG X1,SBB2 IF OVERFLOW
SA7 A1+
SBB2 LX6 58-0 SET BUSY STATUS
EQ LBMXS EXIT TO LBM
SIS SPACE 4,10
** SIS - SET INACCESSIBLE DEVICE RESPONSE.
*
* EXIT TO *LBMXS* WITH DEVICE INACCESSIBLE STATUS.
*
* USES X - 6.
SIS BSS 0 ENTRY
SX6 B1
LX6 56-0
EQ LBMXS EXIT BUFFER MANAGER
SNS SPACE 4,20
** SNS - SET NEXT SECTOR.
*
* ENTRY (LSEC) = CURRENT LOGICAL SECTOR.
* (LTRK) = CURRENT LOGICAL TRACK.
* (MSTA) = MST ADDRESS.
* (B3) = REGISTER SAVE BUFFER ADDRESS.
* (B6) = RETURN ADDRESS.
*
* EXIT (X0) = NON-ZERO IF END OF LOGICAL TRACK CHAIN.
* (X7) PRESERVED.
* (LSEC) UPDATED.
* (LTRK) UPDATED.
*
* USES A - 1, 2, 6, 7.
* B - 6.
* X - 0, 1, 2, 6.
*
* CALLS RXR.
SNS BSS 0 ENTRY
SA7 B3+B1 SAVE (X7)
SB3 A7+B1
SX7 B6 SAVE (B6)
SA7 A7-B1
SA1 LSEC
SX2 LSLB
IX6 X1+X2
SA6 A1
SA1 LTRK
BX0 X1 (X0) = CURRENT LOGICAL TRACK
SA1 MSTA
MX2 -2
BX2 -X2*X0 TRT BYTE INDEX
LX2 2
SB6 X2
LX2 1
SB6 X2+B6 BYTE INDEX*12D
MX2 -9
LX0 -2
BX7 -X2*X0 TRT WORD INDEX
SA2 X1+TRLL
IX7 X2+X7
SA2 X7 READ TRT WORD
LX2 B6
MX7 12
SX0 B0 CLEAR EOI FLAG
BX7 X7*X2 NEXT TRACK
NG X7,SNS1 IF CURRENT IS NOT EOI TRACK
LX7 12
IX2 X6-X7
NG X2,RXR IF NEW BUFFER NOT BEYOND EOI
ZR X2,RXR IF EOI IN NEW BUFFER
SX0 B1 SET EOI FLAG
EQ RXR EXIT
SNS1 SA1 X1+MDGL SECTOR LIMIT
MX2 -12
BX1 -X2*X1
IX2 X6-X1
NG X2,RXR IF NOT AT SECTOR LIMIT
LX7 12
SA7 LTRK SET NEXT TRACK
LX7 59-11
MX6 0
SA6 LSEC RESET LOGICAL SECTOR
EQ RXR RESTORE X2 AND X7 AND RETURN TO (X2)
SNT SPACE 4,15
** SNT - SET NEXT TRACK.
*
* ENTRY (X0) = CURRENT LOGICAL TRACK.
* (X1) = MST ADDRESS.
* (B6) = RETURN ADDRESS.
*
* EXIT (X6) = NEW LOGICAL TRACK.
* (X2) = TRT WORD WITH NEXT TRACK IN BITS 48-59.
*
* USES A - 2.
* X - 2, 6.
SNT BSS 0 ENTRY
MX2 -2
BX2 -X2*X0 BYTE INDEX
SB1 B6 SAVE (B6)
LX2 2
SB6 X2
LX2 1
SB6 X2+B6 BYTE INDEX * 12D
MX2 -9
LX0 -2
BX6 -X2*X0
SA2 X1+TRLL
IX6 X2+X6
SA2 X6 READ TRT WORD
LX2 B6
SB6 B1 RESTORE (B6)
SB1 1 RESTORE (B1)
MX6 12
LX0 2
BX6 X6*X2 GET NEXT TRACK POINTER
LX6 12
JP B6 RETURN
SRC SPACE 4,10
** SRC - SET RECALL CONTROL.
*
* ENTRY (B6) = RETURN ADDRESS.
* (X0) = CONTROL BUFFER INDEX.
*
* USES A - 1, 3, 6.
* X - 1, 2, 3, 4, 6.
SRC BSS 0 ENTRY
BX2 X0 GET CONTROL BUFFER ADDRESS
LX2 CBTLS
TA3 X2+LSLK,CBT GET RECALL WORD
SA1 RPRM GET RECALL PARAMETER
MX4 -24 SET RECALL CONTROL
BX3 X4*X3
BX6 X3+X1
SA6 A3
JP B6 RETURN
SRR SPACE 4,10
** SRR - SET RECALL RESPONSE.
*
* EXIT (X6) = 1/1, 59/0 (RECALL STATUS).
* PUT STATISTICS UPDATED.
* CONTROL PASSED TO *LBMXS*.
*
* USES A - 1, 3, 6.
* X - 1, 3, 4, 6.
SRR BSS 0 ENTRY
SA3 PUTO
SX4 B1
LX3 PUTLS
MX6 1
TA1 X3+ACST,PUT COUNT BUFFER PROCESSED AND RECALLED
LX4 35-0
BX6 -X1*X6
BX4 -X1*X4
LX6 36-59
LX4 0-35
BX6 X6+X4
IX6 X1+X6
SA6 A1
MX6 1 SET RECALL STATUS
EQ LBMXS EXIT
TITLE CIO MONITOR MODE ROUTINES.
CPP SPACE 4,10
** CPUCIO (PSEUDO-PP) EXCHANGE PACKAGE.
*
* CONTAINS 20-WORD EXCHANGE PACKAGE SIMILAR TO
* THE ONE AT CONTROL POINT N+1, AND THREE EXTRA WORDS
* TO MAKE UP A SHORT CONTROL POINT AREA.
CPP EXP P=/BUFIO/PPC,FL=(,MCM),RAX=(,RXX),FLX=(,MEC),B1=1,A5=(1
,,SP),MA=CPP,EM=(,CXPFE),EA=CPP
* *STSW*.
VFD 3/ZCPS NULL CPU STATUS
VFD 57/0
* CWQW.
VFD 2/1
VFD 7/MTCS CPU PRIORITY = *MAGNET-S*
VFD 1/0
VFD 1/0 CPU SLICE ACTIVE
VFD 1/0 RECALL FLAG
VFD 1/1 EXTENDED CPU SLICE INCOMPLETE
VFD 2/0
VFD 9/0 SERVICE CYCLE
VFD 9/SSSC*JCBE SERVICE PARAMETERS INDEX
VFD 1/0 *MTR* BYPASS FLAG
VFD 2/1 SELECT CPU 0
VFD 3/0
VFD 3/PSXT PSEUDO-PP EXCHANGE PACKAGE TYPE
VFD 18/0 *WQ* LINKAGE
* CSAW.
VFD 60/0
* *CTMW*.
VFD 60/0
ACQ SPACE 4,15
** ACQ - ASSIGN PSEUDO-PP OR CPUCIO REQUEST QUEUE.
*
* ENTRY (X6) = REQUEST.
* (B3) = NORMAL EXIT ADDRESS.
* (B4) = EXIT ADDRESS IF NON-ASSIGNABLE REQUEST
* (B7) = CONTROL POINT AREA ADDRESS.
*
* USES X - 0, 1, 2, 3, 4, 6, 7.
* A - 1, 2, 3, 4, 6, 7.
* B - 3, 6.
*
* CALLS /MONITOR/AQR, /MONITOR/RCC.
ACQ TA2 SP
NZ X2,ACQ1 IF PSEUDO-PP NOT AVAILABLE
* TO INTERLOCK WITH *MTR*, *ACPP* AND THE PP COUNT MUST BE
* UPDATED BEFORE THE STORAGE MOVE CHECK.
SA1 B7+STSW
SX2 B7
SX7 B7 SET CP ADDRESS FOR MONITOR FUNCTIONS
LX2 24 SET ASSIGNED CP ADDRESS
SX0 B1
BX7 X7+X2
LX2 24-7 SET CP NUMBER
LX0 48
BX7 X7+X2
TA7 ACPP,SPX SET CP ASSIGNMENT
IX7 X1+X0 INCREMENT PP COUNT
SA7 A1
SA4 CMCL GET MOVE CONTROL
MX0 55
LX2 -12
LX0 36
BX6 X0*X6
BX6 X6+X2 SET CP NUMBER IN IR
LX2 12
BX7 X4-X2
AX7 48
ZR X7,ACQ0.1 IF STORAGE MOVE REQUESTED / IN PROGRESS
SA6 A2+ SET PSEUDO-PP IR
SA1 /CPUCIO/MB
BX6 X1
SA1 A1+B1
ERRNZ /CPUCIO/MB1-/CPUCIO/MB-1 ADDR MUST BE CONSECUTIVE
SA6 A2+2+4 MB TO MB+4
BX7 X1
SA1 A1+B1
ERRNZ /CPUCIO/MB2-/CPUCIO/MB1-1 ADDR MUST BE CONSECUTIVE
BX6 X1
SA6 A6-B1 MB2 TO MB+3
SB6 CPP EXCHANGE PACKAGE ADDRESS
SA7 A6-B1 MB1 TO MB+2
SX6 B3 SAVE RETURN ADDRESS
SA6 /MONITOR/T2
SB3 ACQ0 *RCC* RETURN ADDRESS
EQ /MONITOR/RCC RECALL CPU
ACQ0 SA1 /MONITOR/T2
SB3 X1+ RESTORE RETURN ADDRESS
JP B3 RETURN
ACQ0.1 TA7 ACPP,SPX CLEAR CP ASSIGNMENT
BX7 X1 RESTORE PP COUNT
SA7 A1
ACQ1 SA3 /CPUCIO/MB SAVE PARAMETER WORD
R= X2,/MONITOR/CQ
SB3 B4 SET STORAGE MOVE RETURN ADDRESS
BX7 X3
SA7 /MONITOR/AQRA
EQ /MONITOR/AQR ASSIGN QUEUE REQUEST
IPP SPACE 4,10
** IPP - INITIATE PSEUDO PP CIO PROCESSOR.
*
* ENTRY REFER TO CPUCIO SPECIAL PROCESSORS DOCUMENTATION.
*
* EXIT TO */CPUCIO/CPCX* IF STANDARD ASSIGNMENT.
* TO */IHPFMD/RPP1* OR */IH819/PPE1* IF BUFFER
* MANAGER RECALL.
* TO */CPUCIO/RPC* IF NOT BUFFERED DEVICE
* PROCESSOR FUNCTION OR NULL FILE.
*
* CALLS ACQ.
IPP BSS 0 ENTRY
TNO /BUFIO/IPS,BIOMMF
IPP0 MX1 -3 GET TERMINATION CONDITION
LX4 4
SX2 5714B
BX1 -X1*X4
LX4 2
MX6 1
BX2 X2*X4
LX6 55-59
SX3 X2-/CIO/SKP*100B-/CIO/EOI
AX2 9
BX6 X4+X6 SET FUNCTION FLAG
ZR X3,/CPUCIO/RPC IF *SKIPEI*
MX4 12
NZ X2,/CPUCIO/RPC IF BACKWARD SKIP
ZR X1,/CPUCIO/RPC IF *RPHR*/*WPHR*
SA6 A4
ERX1 X0 GET CURRENT TRACK
LX4 -24
BX1 X4*X1
ZR X1,/CPUCIO/RPC IF NULL FILE
IPP1 SA1 /CPUCIO/IR GET *CIO* CALL
SB3 IPP2 SET RETURN ADDRESS FOR *ACQ*
BX6 X1
SB4 B3
TJP (/DCP/ACQ,DCPC,/BUFIO/ACQ) ASSIGN PSEUDO PP
IPP2 SA1 IPPA CHECK FOR BUFFER MANAGER RECALL REQUEST
NG X1,/CPUCIO/CPCX IF NOT BUFFER MANAGER RECALL REQUEST
TEQ (/IHPFMD/RPP1,IHPFMD,/IH819/PPE1) PROCESS NEXT REQUEST
IPPA CON -1
MNR SPACE 4,10
** MNR - *BUFIO* EXTENSION TO PROGRAM MODE EXIT PROCESSING.
*
* EXIT TO */MONITOR/PPE* IF *FLPP* INTERRUPT.
* TO */BUFIO/IOC* IF BUFFER MANAGER REQUEST PRESENT.
* TO */MONITOR/MNR4* IF NONE FOUND (X0 = 0).
MNR SA1 B2+3 GET *PSD* FROM EXCHANGE PACKAGE
TA2 IORQ I/O REQUESTS
BX0 X0-X0
LX1 59-39 POSITION TO STEP MODE FLAG
NZ X2,IOC IF I/O REQUEST PROCESSED
TNG X1,(/MONITOR/PPE,IH819,/BUFIO/MNR) IF INTERRUPT
EQ /MONITOR/MNR4 RETURN TO MAIN ROUTINE
* EXTENSION FOR PSEUDO-PP REQUEST PROCESSING.
*
* ENTRY (X3) = MONITOR MODE START TIME.
*
* EXIT (A5) = PSEUDO-PP OUTPUT REGISTER ADDRESS.
* TO */MONITOR/MTRX* IF NO PSEUDO PP REQUEST TO
* PROCESS.
* TO */MONITOR/PPR0.1* IF PSEUDO PP REQUEST TO PROCESS.
* TO */IH819/PPE* OR */BUFIO/MNR* IF BUFFER MANAGER
* RECALL.
* (B4) = REQUEST IF EXIT TO *PPR0.1*.
* (X1) = OUTPUT REGISTER BITS 0 - 47 IF EXIT TO
* *PPR0.1*.
MNR1 SA1 B2+3
TA5 1,SP GET PSEUDO-PP OUTPUT REGISTER
LX1 59-39
MX0 4
TNG X1,(/IH819/PPE,IH819,/BUFIO/MNR1) IF BUFFER RECALL
BX0 X0*X5
NZ X0,/MONITOR/MTRX IF REQUEST ALREADY PROCESSED
UX1 B4,X5
SB4 B4+1777B
NZ B4,/MONITOR/PPR0.1 IF REQUEST OUTSTANDING
EQ /MONITOR/MTRX EXIT
PCQ SPACE 4,10
** PCQ - PROCESS PSEUDO-PP REQUEST QUEUE.
*
* ENTRY IF ENTERED AT *PCQ1* -
* (B3) = RETURN ADDRESS IF PSEUDO-PP NOT AVAILABLE.
* (B4) = RETURN ADDRESS IF NO OUTSTANDING REQUESTS.
*
* CALLS ACQ.
PCQ SB3 /MONITOR/MTRX *ACQ* RETURN ADDRESS
SB4 PCQ2
PCQ1 SA1 CQRL GET NEXT ENTRY
TA2 SP
ZR X1,/MONITOR/RB4 IF NO PSEUDO-PP REQUESTS
NZ X2,/MONITOR/RB3 IF PSEUDO-PP NOT AVAILABLE
SA4 X1+RECW-RCCW READ PP REQUEST
MX7 -12+7 CONTROL POINT ADDRESS MASK
LX7 7
BX7 -X7*X1
SB7 X7 CPA
SA2 X1 DELETE ENTRY FROM QUEUE
MX0 -4
BX6 X2
SA6 A1
BX6 X6-X6
SA1 B7+STSW ADD RECALL SLOT TO FREE LIST
SX3 -420B-RCCW+1
SA6 A4
BX7 -X0*X1
BX1 X0*X1
SX0 A2-B7 COMPUTE RECALL INDEX
SA7 A2
IX0 X0+X3
SA3 A2+REPW-RCCW GET PARAMETER WORD
IX7 X0+X1 SET NEW FREE ENTRY AND RECALL COUNT
SA6 A3+
BX6 X4
SA7 A1
BX7 X3
SA7 /CPUCIO/MB SET PARAMETER WORD
EQ ACQ ASSIGN PSEUDO-PP
PCQ2 SA1 CPP+STSW SET NULL STATUS ON PSEUDO-PP
MX7 3
BX6 X7*X1
ZR X6,/MONITOR/MTRX IF PSEUDO-PP NOT ACTIVE
BX7 -X7*X1
SA7 A1
EQ /MONITOR/BNJ1 BEGIN NEW JOB
PRQ SPACE 4,10
** PRQ - PROCESS REQUEST QUEUE.
*
* ENTRY (X1) = BUFFER ORDINAL TO RECALL.
*
* CALLS IPP, /CPUCIO/CPC.
PRQ SA2 BQRL GET FIRST ENTRY
MX0 12
LX1 12
LX0 -36
PRQ1 SB6 A2
BX2 -X0*X2
SX6 X2
SA2 X2
ZR X6,IPP2 IF END OF QUEUE
BX6 X0*X2
IX6 X6-X1
NG X6,PRQ1 IF BUFFER NUMBER NOT REACHED
NZ X6,IPP2 IF NO MATCH
* ENTRY FOUND, DELETE FROM QUEUE AND RESTART.
MX0 -12
BX6 -X0*X2 EXTRACT LINK
SA3 B6 GET LAST ENTRY
BX3 X0*X3 CLEAR OLD LINK
BX6 X6+X3 INSERT NEW LINK
SA6 A3
SA4 A2+RECW-RCCW READ RECALL REQUEST
SX1 A2
AX1 7
LX1 7
SB7 X1 CONTROL POINT AREA ADDRESS
SA1 B7+STSW
SX0 A2-B7 ADD FREE ENTRY TO CONTROL POINT
MX2 -4
SX0 X0-RCCW+1-420B
BX7 -X2*X1
BX6 X6-X6
BX1 X2*X1
SA7 A2
SA6 A4+
SA3 A2+REPW-RCCW GET PARAMETER WORD
SA6 A3
BX6 X3
SA6 /CPUCIO/MB
IX7 X1+X0
BX6 X4
SA7 A1+
SA6 /CPUCIO/IR
TA5 1,FP SIMULATE *MTR* REQUEST
EQ /CPUCIO/CPC PROCESS CIO REQUEST
TITLE CIO PROCESSOR.
SPACE 4,10
** CIO PROCESSOR.
*
* STANDARD REGISTER DEFINITIONS.
*
* (B1) = 1.
* (B7) = CPA.
* (A4) = (A5) + 5 = MESSAGE BUFFER + 4.
* (A5) = PSEUDO OUTPUT REGISTER ADDRESS.
* (X4) = ABSOLUTE FST ADDRESS.
* (X5) = ABSOLUTE FET+1.
*
*T IR 18/ *CIO*, 1/A, 5/ CP, 18/ SKIP COUNT, 18/ FET ADDRESS
*
*T MB 12/ BF5, 12/ BF4, 12/ BF3, 12/ BF2, 12/ BF1
*
*T MB+1 12/ BF10, 12/ BF9, 12/ BF8, 12/ BF7, 12/ BF6
*
*T MB+2 12/ 0, 24/ *IN*, 24/ *OUT*
*
*T MB+3 1/R, 5/0, 6/ FETL, 24/ *FIRST*, 24/ *LIMIT*
* R SET IF RANDOM FILE.
* FETL FET LENGTH - 5.
*
* FET PARAMETERS ARE TRANSFERRED ONLY IF CIO REQUEST
* IS NOT RESTARTED FROM PSUEDO PP BUSY RECALL STACK.
*
*T MB+4 1/S,5/ RF,6/ RC,5/0,1/F,6/ EC,12/ ORD,4/ LV,8/ XC,12/ IC
* S SET IF *CIO* RESTARTED FROM RECALL STACK.
* RF RESTART FLAGS = 1/TIF, 1/0, 1/SDT, 1/BDF, 1/DTF.
* TIF = TRACK INTERLOCK FLAG.
* SDT = SKIP DATA TRANSFER FLAG.
* BDF = BUFFERED DEVICE FUNCTION FLAG.
* DTF = DATA TRANSFERRED FLAG.
* RC RECALL STACK REASON CODE.
* F BUILD FNT ENTRY (FLAG FOR *1MS* ONLY).
* EC ERROR CODE, IF NONZERO.
* ORD RELATIVE ADDRESS OF FNT ENTRY IN NFL.
* LV LEVEL NUMBER (0 - 17B).
* XC EXTERNAL *CIO* FUNCTION CODE.
* IC INTERNAL *CIO* FUNCTION CODE (SEE *COMSCIO*).
*
*T MB+5 1/E, 23/0, 18/ MSTA, 18/ ST
* E SET IF WRITE EOI REQUIRED.
* ST SECTORS PER TRACK ON EQUIPMENT.
* MSTA MST ADDRESS OF EQUIPMENT.
SPACE 4,10
** GLOBAL DATA.
ABRA CON 0 ABSOLUTE RA
CHRV CON 0 MASS STORAGE CONTROL FLAGS
CLEA CON 0 CURRENT READ LIST ENTRY ABSOLUTE ADDRESS
CWLA CON 0,0 CONTROL WORD DATA ADDRESS / WORD COUNT
ERWB BSS 3 EXTENDED READ/WRITE BUFFER
FMOD CON 0 FILE MODE FOR WRITE
FSZL CON 0 FILE SIZE LIMIT
LBIA CON 0 30/ FIRST SECTOR, 30/ CONTROL BUFFER FWA
NPCB CON 0 NUMBER OF PRUS IN *CIO* BUFFER
NPTR CON 0 NUMBER OF PRUS TO TRANSFER
NTKP CON 0 NEXT TRACK POINTER
PCMS CON 0 PRU CHANGE IN MASS STORAGE ALLOCATION
PRUC CON 0 PRU COUNT
PMFF CON 0 PERMANENT FILE FLAG
RCEV EQU FSZL RECALL EVENT
SCIE EQU ERWB+1 SECTOR COUNT FROM INITIAL POSITION TO EOI
SDTW CON 0 SKIP DATA TRANSFER FLAG FOR WRITE
STLR EQU SDTW SECTOR/TRACK LINKAGE FOR READ
USCW CON 0 UPDATED SECTOR CONTROL WORD FOR WRITE
WCCB CON 0 WORD COUNT OF DATA IN *CIO* BUFFER
WLBR EQU SDTW WRITE I/O BUFFER REQUEST
FCAC VFD 36/0,8/IMSK,8/IMWT,8/IMRD FUNCTION CHARGE
FCCM CON 741774B FET CODE CLEAR MASK (FOR READ)
FCSM CON 20B FET CODE MASK TO SET EOR
CON 740030B FET CODE MASK TO SET EOF
CON 741030B FET CODE MASK TO SET EOI
UACC VFD 12/AISS,12/IOAW,6/40,6/20,24/0 ACCOUNTING UPDATE
UAMI VFD 12/CDCS,12/ACLW,6/0,6/18,24/0 *UADM* MS PRU CHANGE
TFSL BSS 0 TABLE OF FILE SIZE LIMITS
VFD 30/0,30//PFM/DSRNG1*100B
VFD 30//PFM/DSRNG2*100B,30//PFM/DSRNG3*100B
VFD 30//PFM/DSRNG4*100B,30//PFM/DSRNG5*100B
VFD 30//PFM/DSRNG6*100B,30//PFM/DSRNG7*100B
SPACE 4,10
ERRNZ /CIO/RDF INDEX MUST BE ZERO
ERRNZ /CIO/WTF-1 INDEX MUST BE ONE
ERRNZ /CIO/SKP-2 INDEX MUST BE TWO
SPACE 4,10
RB3 EQU /MONITOR/RB3 EXIT TO (B3)
RB4 EQU /MONITOR/RB4 EXIT TO (B4)
RB5 EQU /MONITOR/RB5 EXIT TO (B5)
RB6 EQU /MONITOR/RB6 EXIT TO (B6)
TITLE CIO PROCESSOR EXIT ROUTINES.
RCR SPACE 4,15
** RCR - REQUEST CIO RECALL.
*
* ENTRY (X7) = RECALL REASON CODE.
* (X6) = I/O BUFFER ORDINAL IF ENTRY AT *RCR3*.
*
* EXIT TO *PPCX*.
*
* A - 0, 1, 2, 3, 6, 7.
* B - 6.
* X - 0, 1, 2, 3, 6, 7.
*
* CALLS UAC, WEI.
* PRU TRANSFER LIMIT.
RCR SX7 PTLR SET PRU TRANSFER LIMIT REASON CODE
SX6 -IORT SET I/O TIME RECALL
SB6 RCR6 SET TO CALL *WEI*
EQ RCR4 SAVE RECALL TIME AND REASON
* REQUEST TRACK REJECT.
RCR1 SX7 TIRR SET TRACK REJECT REASON CODE
SX6 -TIRT SET TRACK REJECT RECALL TIME
SB6 RCR6 SET TO CALL *WEI*
EQ RCR4 SAVE RECALL TIME AND REASON
* I/O BUFFER BUSY.
RCR2 SX7 LBBR SET I/O BUFFER BUSY REASON CODE
SX6 -IORT SET I/O TIME RECALL
SB6 RCR6 SET TO CALL *WEI*
EQ RCR4 SAVE RECALL TIME AND REASON
* I/O BUFFER RECALL.
RCR3 SX7 LBRR SET I/O BUFFER RECALL REASON CODE
SB6 RCR6 SET TO CALL *WEI*
RCR4 LX6 24
SA2 A4 SET RECALL STACK REASON CODE
SA6 RCEV SAVE RECALL TIME/EVENT
MX1 6
LX1 -6
BX1 -X1*X2
LX7 -12
BX7 X7+X1
SA7 A4
JP B6 COMPLETE PROCESSING FOR RECALL
* SET/CLEAR TRACK INTERLOCK REJECT.
RCR5 SX7 TIRR SET TRACK INTERLOCK REJECT
SX6 -TIRT SET TRACK INTERLOCK REJECT TIME
SB6 RCR8 SET TO ENTER RECALL STACK
EQ RCR4 SAVE RECALL TIME AND REASON
* WRITE EOI IF NECESSARY. RELEASE I/O BUFFER INTERLOCKS.
RCR6 SA0 RCR7 SET RETURN ADDRESS FOR *WEI*
EQ WEI WRITE EOI/RELEASE BUFFER INTERLOCKS
* UPDATE ACCOUNTING. CLEAR TRACK INTERLOCK.
RCR7 SA0 RCR8 SET RETURN ADDRESS FOR *UAC*
SX7 B1 SET TO NOT RECALL CPU
SB6 A0 RETURN ADDRESS IF TRACK INTERLOCK REJECT
EQ UAC UPDATE ACCOUNTING
* ENTER RECALL STACK.
RCR8 SA1 A5-B1 GET *CIO* CALL
SX0 B1+
BX6 X1
SA2 A4 GET MESSAGE BUFFER PARAMETERS
SA6 A5+B1
SX6 PBMF SET I/O BUFFER RECALL EVENT
BX7 X2
SA3 RCEV GET RECALL TIME/EVENT
SA7 A6+B1
BX6 X6+X3
LX2 0-58
SX1 RECM SET TO ENTER RECALL STACK
PL X3,PPCX IF I/O BUFFER RECALL
SX6 PBMF SET I/O BUFFER RECALL EVENT
BX6 -X3+X6
BX2 X2*X0 TRACK INTERLOCK RESTART FLAG
IX6 X6-X0 SET TIMED RECALL
ERRNZ PBMF-PTMF-1 INDEXES MUST BE CONSECUTIVE
IX6 X6-X2 SET TIMED RECALL / NO ROLLOUT
ERRNZ PTMF-PTRF-1 INDEXES MUST BE CONSECUTIVE
EQ PPCX EXIT
RPC SPACE 4,10
** RPC - REQUEST PP CIO.
*
* ENTRY (X7) = ERROR CODE, IF NONZERO.
* (X0) = RA IF ENTRY AT *RPC3*.
*
* EXIT TO *PPCX*.
*
* ERROR TO *RCR5* IF TRACK INTERLOCK CLEAR REJECT.
*
* USES A - 0, 1, 2, 6, 7.
* B - 6.
* X - 1, 2, 3, 5, 6, 7.
*
* CALLS UAC, WEI.
RPC3 SA2 A5+5 CALCULATE FST ADDRESS
MX6 -12
LX2 -24
BX6 -X6*X2
IX6 X0-X6
R= X4,FSTL
IX4 X6+X4 ABSOLUTE FST ADDRESS
* EQ RPC BUILD PP REQUEST
RPC SA2 A4 SET ERROR CODE
LX7 36
SA1 A5-B1 GET *CIO* CALL
MX6 -59
BX7 X7+X2
MX3 -42
SX2 3R1MS CHANGE TO *1MS* CALL
BX7 -X6*X7 CLEAR RECALL STACK FLAG
LX2 -18
BX6 -X3*X1
SA7 A4
BX6 X6+X2
SA6 A5-B1
SA0 RPC1 SET RETURN ADDRESS FOR *WEI*
BX6 X3*X1
BX6 X6-X2
NZ X6,WEI IF *WEI* NOT YET CALLED
RPC1 SA0 RPC2 SET RETURN ADDRESS FOR *UAC*
SB6 RCR5 RETURN ADDRESS IF TRACK INTERLOCK REJECT
SX7 B1 SET NO RECALL OF CPU
EQ UAC UPDATE ACCOUNTING
RPC2 SA1 A5-B1 GET *CIO* CALL
SA2 A4 GET MESSAGE BUFFER PARAMETERS
BX6 X1
LX7 X2
SA6 A5+B1
SX1 RPPM REQUEST PP
SA7 A6+B1
SX6 B1+B1 SET NO REJECT ON PP CALL
EQ PPCX EXIT
CMP SPACE 4,15
** CMP - COMPLETE MASS STORAGE PROCESSING.
*
* ENTRY (B2) = FET STATUS FOR READ/SKIP.
*
* EXIT TO *PPCX*.
*
* ERROR TO *RCR5* IF TRACK INTERLOCK CLEAR REJECT.
*
* USES A - 0, 1, 2, 3, 6, 7.
* B - 4, 6.
* X - 1, 2, 3, 6, 7.
*
* CALLS UAC, WEI.
CMP5 SA1 SSTL
LX1 59-16
NG X1,CMP IF *CIO* LOGGING DISABLED
SA2 A4 GET MESSAGE BUFFER PARAMETERS
LX2 59-54
SX7 /CIOERR/UCF *UNNECESSARY CIO FUNCTION*
PL X2,RPC IF NO DATA PREVIOUSLY TRANSFERRED
* EQ CMP COMPLETE FUNCTION
CMP SA2 A4 GET MESSAGE BUFFER PARAMETERS
SA0 CMP2 SET RETURN ADDRESS FOR *WEI*
LX2 59-6
NG X2,WEI IF WRITE
ZR B2,WEI IF NOT EOR/EOF/EOI
SX1 B2
AX1 2
SA1 FCSM-1+X1 GET CODE SET MASK
LX2 59-7-59+6
SX3 B1 GET FET+0
IX7 X5-X3
ERX3 X7
NG X2,CMP1 IF SKIP
SA2 FCCM GET CODE CLEAR MASK
BX3 -X2*X3
CMP1 BX6 X3+X1
EWX6 X7
EQ WEI RELEASE BUFFER INTERLOCK
* CHARGE FOR *CIO* OPERATION.
CMP2 SA2 A4 GET MESSAGE BUFFER PARAMETERS
MX6 48
BX6 X6*X2
LX2 -6
MX1 -4
BX1 -X1*X2
SA6 A4
LX1 3
SB4 X1
SA1 FCAC GET FUNCTION CHARGES
AX1 B4
MX6 -8
BX6 -X6*X1
SA1 UACC INCREMENT ACCOUNTING
IX6 X6+X1
LX2 59-6+6
MX7 1
SA6 A1
PL X2,CMP3 IF NOT WRITE
SA1 PRUC GET PRU COUNT
LX2 59-54-59+6
SX1 X1
BX3 X7*X2
BX1 X1+X3
ZR X1,CMP3 IF NO DATA TRANSFERRED
ERX3 X4 SET FILE WRITTEN ON FLAG
LX2 59-10-59+54
BX1 -X2*X7 SET WRITTEN SINCE OPEN IF NOT REWRITE
LX7 6-59
BX7 X7+X3
LX1 7-59
BX7 X7+X1
EWX7 X4
SX2 BMFL*100B FLUSH WRITE BUFFER IF REWRITE
SB4 CMP3 SET RETURN ADDRESS FOR *CIM*
ZR X1,CIM IF REWRITE
CMP3 SA0 CMP4 SET RETURN ADDRESS FOR *UAC*
SB6 RCR5 RETURN ADDRESS IF TRACK INERLOCK REJECT
MX7 1 SET TO RECALL CPU, PREVENT *UADM* ISSUE
EQ UAC UPDATE ACCOUNTING
CMP4 ERX1 X4 SET FST NOT BUSY
SX7 B1
IX3 X5-X7 SET FET COMPETE
BX6 X1+X7
ERX1 X3
EWX6 X4 STORE FST
BX7 X1+X7
SX6 B4 SET *UADM* PARAMTER WORD COUNT
EWX7 X3 STORE FET AFTER FST
BX6 X6+X2 SET RECALL CPU FLAG
SX1 UADM SET EXIT FUNCTION
* EQ PPCX EXIT
PPCX SPACE 4,10
** PPCX - CIO PROCESSOR EXIT.
*
* ENTRY (A5) = ADDRESS OF PSEUDO OUTPUT REGISTER.
* (X1) = EXIT FUNCTION (DPPM, RECM, RPPM).
* (X6) = FUNCTION PARAMETERS.
*
* EXIT TO MONITOR MODE *CPUMTR* TO DROP CPU.
* P REGISTER RESET TO *PPC* FOR NEXT CIO CALL
* (XJ MUST IMMEDIATELY PRECEED *PPC* ENTRY POINT).
PPCX LX1 -12 STORE EXIT FUNCTION IN OUTPUT REGISTER
LX6 36
BX6 X6+X1
SA6 A5
PPCX1 XJ EXIT TO CPUMTR AND DROP CPU
PPCX2 SA1 A5 CHECK OUTPUT REGISTER
AX1 48
NZ X1,PPCX2 IF OUTPUT REGISTER NOT CLEARED
* EQ PPC PROCESS *CIO* REQUEST
TITLE CIO PROCESSOR MAIN ROUTINE.
PPC SPACE 4,20
** PPC - PSEUDO PP CIO FUNCTION PROCESSOR (ENTRY).
*
* EXIT (X6) = BUFFER SPACE/DATA IN PRUS FOR READ/WRITE.
* (X7) = BUFFER SPACE/DATA WORD COUNT FOR READ/WRITE.
* TO *CMP3* IF PREVIOUS TRACK INTERLOCK CLEAR REJECT
* ON COMPLETE FUNCTION.
* TO *RCR5* IF SET TRACK INTERLOCK REJECT.
* TO *RDF* IF READ FUNCTION.
* TO *RDF3* IF SKIP FUNCTION.
* TO *WTF* IF WRITE FUNCTION.
*
* ERROR TO *RPC3* IF INCORRECT FET ADDRESS OR PARAMETER.
* TO *RPC* IF OTHER USER ERROR.
*
* USES A - 0, 1, 2, 3, 4, 6, 7.
* B - 2, 3, 4, 6, 7.
* X - ALL.
*
* CALLS CBS, CRA, SRA, /MONITOR/VFA, /MONITOR/VFP.
*
* MACROS MONITOR.
* VALIDATE FET ADDRESS.
PPC SA2 UACC CLEAR ACCOUNTING CHARGE
MX7 36
BX7 X7*X2
SA1 A5-B1 GET *CIO* CALL
BX6 X6-X6
SA7 A2
MX3 5
SA6 A5+B1 CLEAR *MB*
LX3 36-55
SA6 A6+B1 CLEAR *MB+1*
BX3 X3*X1 CP NUMBER
SA6 A5+6 CLEAR DATA CHANGE/WRITE EOI FLAGS
SB2 B0 INDICATE NO FET ADDRESS
LX3 -36+7
SA6 PRUC CLEAR PRU COUNT
SB3 RPC3 SET ERROR EXIT ADDRESS FOR *VFA*/*VFP*
SB6 PPC1 SET RETURN ADDRESS FOR *VFP*
SB7 X3 CONTROL POINT ADDRESS
SA6 A6-B1 CLEAR MASS STORAGE PRU CHANGE
ERRNZ PRUC-PCMS-1 INDEXES MUST BE CONSECUTIVE
SX7 /CIOERR/ARG *FET ADDRESS OUT OF RANGE*
EQ /MONITOR/VFA VERIFY FET ADDRESS
* VALIDATE FET PARAMETERS.
PPC1 SA4 A5+5 GET MESSAGE BUFFER PARAMETERS
MX2 -24
BX5 -X2*X5 ABSOLUTE FET+1
PL X4,PPC3 IF NOT RESTART FROM RECALL STACK
MX2 -2
SA6 A4-B1 SAVE FET LENGTH - 5 AND RANDOM FLAG
SB6 PPC2 SET RETURN ADDRESS FOR *VFP*
BX6 -X2*X4 GET FET PARAMETER VALIDATION FLAGS
SX1 B0
SX7 /CIOERR/BUF *BUFFER ARGUMENT ERROR*
NZ X6,/MONITOR/VFP IF FET PARAMETER VALIDATION REQUIRED
PPC2 SA2 A4-B1 GET FET LENGTH - 5 AND RANDOM FLAG
BX7 X1+X2 SAVE FIRST AND LIMIT
SA6 A2-B1 SAVE IN AND OUT
SA7 A2
PPC3 SA2 A4
MX3 -24
BX0 -X3*X0
BX6 X0
SA6 ABRA ABSOLUTE RA
MX6 -12
BX3 -X6*X2 INTERNAL FUNCTION CODE
LX2 -24
BX1 -X6*X2 FNT ORDINAL
SX4 X1-FSTL
IX4 X0-X4 ABSOLUTE FST ADDRESS
LX2 59-58+24
ZR X3,CMP3 IF TRACK INTERLOCK CLEAR REJECT
* INTERLOCK TRACK FOR PERMANENT FILE.
SX1 B1
IX1 X4-X1
ERX1 X1 CHECK FILE TYPE
MX6 -6
LX1 -6
BX6 -X6*X1
LX1 -9
MX7 -2
SX6 X6-PMFT
BX7 -X7*X1 CHECK ACCESS MODE
SA6 PMFF
SA7 FMOD
NG X2,PPC5 IF TRACK INTERLOCK ALREADY SET
NZ X6,PPC5 IF NOT DIRECT ACCESS PERMANENT FILE
LX7 59-1
PL X7,PPC5 IF NOT M, A, RM, OR RA MODE
ERX1 X4 SET EQUIPMENT AND FIRST TRACK
SX6 STIS*10000B SET TRACK INTERLOCK SUBFUNCTION
MX2 24
BX1 X2*X1
LX1 -12
BX6 X6+X1
MONITOR STBM
AX1 36
MX7 1
ZR X1,PPC4 IF TRACK INTERLOCK SET
+ EQ RCR5 ENTER RECALL STACK
PPC4 SA2 A4 SET TRACK INTERLOCK FLAG
LX7 58-59
BX7 X2+X7
SA7 A4
* PRESET FOR RANDOM READ/WRITE/SKIP.
PPC5 ERX1 X4 GET EQUIPMENT
MX7 -12
LX1 12
BX7 -X7*X1
MX6 -12
CX2 X7,EST CONVERT EST ORDINAL TO OFFSET
TA2 X2+EQDE,EST READ EST ENTRY
BX7 -X6*X2 MST ADDRESS / 10B
LX7 3
SA3 X7+MDGL GET SECTOR LIMIT
BX6 -X6*X3
LX7 18
BX7 X7+X6
SA7 A4+B1 SAVE EQUIPMENT CHARACTERISTICS
SA2 A4 GET MESSAGE BUFFER PARAMETERS
SA1 A4-B1 GET RANDOM FILE FLAG
LX2 59-54
BX1 -X1+X2
MX6 -24
NG X1,PPC9 IF PRIOR DATA TRANSFER OR NOT RANDOM FILE
LX2 59-7-59+54
SB4 PPC9 SET RETURN ADDRESS FOR *SRA*
SX1 5
NG X2,SRA IF RANDOM SKIP
IX1 X5+X1
ERX1 X1
LX2 59-6-59+7
BX3 -X6*X1
ZR X3,PPC9 IF RANDOM ADDRESS NOT SET
PL X2,CRA IF RANDOM READ
SB4 PPC8 SET RETURN ADDRESS FOR *CRA*
LX2 59-10-59+6
NG X2,CRA IF REWRITE FUNCTION
LX1 59-29 CHECK WRITE-IN-PLACE FLAG
MX7 1
PL X1,PPC6 IF NOT REWRITE
BX7 X7+X2 SET REWRITE FLAG
LX7 10-59
SA7 A4
EQ CRA CONVERT RANDOM ADDRESS
* PROCESS RANDOM WRITE AT EOI.
PPC6 SX1 X3-2 CHECK RANDOM ADDRESS VALUE
SX7 /CIOERR/RWT *INDEX ADDRESS OUT OF RANGE*
NG X1,RPC IF RANDOM INDEX RETURN ADDRESS .LT. 2
SA2 B7+FLSW GET *FL*
MX6 -12
BX2 -X6*X2
LX2 6
IX1 X3-X2
PL X1,RPC IF RANDOM INDEX RETURN ADDRESS .GE. FL
SA0 X3 SAVE RELATIVE ADDRESS OF RANDOM INDEX WORD
BX3 X3-X3 SKIP TO EOI
SB4 PPC7 SET RETURN ADDRESS FOR *CRA*
EQ CRA CONVERT RANDOM ADDRESS
PPC7 SA2 ABRA GET RANDOM INDEX RETURN WORD
SX6 A0
IX2 X2+X6
ERX1 X2
MX6 36
BX6 X6*X1
BX6 X6+X3
EWX6 X2 RETURN RANDOM INDEX
EQ PPC9 CHECK BUFFER SPACE
PPC8 ERX1 X4 SET LAST OPERATION COMPLETE WRITE
MX6 56
BX6 X6*X1
SX2 6
BX6 X6+X2
EWX6 X4
* THE FOLLOWING LOGIC ACCOMPLISHES TWO PURPOSES.
*
* 1) IT CAUSES THE LAST BUFFER ACCESSED TO BE FLUSHED IF
* IT CONTAINS WRITE DATA, AND IT IS NOT GOING TO BE ACCESSED
* FURTHER FOR WRITING.
*
* 2) FOR *PMFT* FILES IT WILL RECALL THE NEW REQUEST IF IT
* IS FOR OTHER THAN A WRITE ACCESS TO THE LAST BUFFER
* ACCESSED, AND THE LAST BUFFER ACCESSED CONTAINS WRITE DATA
* WHICH HAS NOT BEEN FLUSHED TO DISK. EVEN IF THE BUFFER IS
* ON THE UNIT I/O QUEUE THE REQUEST WILL BE RECALLED. THIS
* IS DONE SO THAT ALL UPDATES TO *PMFT* FILES WILL OCCUR IN
* ORDER OF USER REQUEST. THIS IS NECESSARY FOR USER FILE
* RECOVERY AFTER A SYSTEM INTERRUPT OCCURS WHICH REQUIRES A
* LEVEL 0 DEADSTART.
PPC9 R= X1,FUTL-FSTL CHECK I/O BUFFER LINK
IX1 X4+X1
ERX1 X1
MX6 -12
BX7 -X6*X1
ZR X7,PPC14 IF NO I/O BUFFER LINK
LX7 CBTLS CHECK IF THIS FUNCTION ON SAME BUFFER
ERX1 X4
TA2 X7+FSTC,CBT READ CONTROL BUFFER FST
MX0 21
BX1 X1-X2
LX0 -3
BX0 X0*X1
SA3 A2+B1
ERRNZ IOLK-FSTC-1 CODE ASSUMES CONSECUTIVE WORDS
NZ X0,PPC15 IF BUFFER MAY NOT BE FOR THIS FILE
SA2 INBA
PPC10 LX3 59-57
BX0 X2*X1
PL X3,PPC13 IF BUFFER DOES NOT CONTAIN WRITE DATA
NZ X0,PPC11 IF NEW REQUEST NOT FOR THIS BUFFER
SA2 A4
LX2 59-6
SB6 WTF
NG X2,CBS IF WRITE TO THE SAME BUFFER
PPC11 SX2 BMFL*100B FLUSH WRITE BUFFER
SB4 PPC12 SET RETURN ADDRESS FOR *CIM*
LX3 57-59
PL X3,CIM IF I/O INTERLOCK NOT SET
PPC12 SA1 PMFF
ZR X1,RCR2 IF DIRECT ACCESS PERMANENT FILE
PPC13 ZR X0,PPC14 IF REQUEST FOR THIS BUFFER
R= X0,FUTL-FSTL CLEAR BUFFER LINK
IX0 X4+X0
ERX1 X0
MX6 48
BX6 X6*X1
EWX6 X0
PPC14 SA2 A4 GET MESSAGE BUFFER PARAMETERS
BX7 X7-X7 SET *CHRV*
SA7 CHRV
LX2 59-7
NG X2,RDF3 IF SKIP FUNCTION
LX2 59-6-59+7
SB6 RDF SET *CBS* EXIT ADDRESS
PL X2,CBS IF READ FUNCTION
SB6 WTF SET RETURN ADDRESS FOR *CBS*
EQ CBS CHECK BUFFER SIZE
PPC15 MX7 12
LX7 -12
BX6 X7*X2
NZ X6,PPC13 IF FIRST TRACK DEFINED IN CONTROL BUFFER
SA2 INBA
BX6 -X7*X0 COMPARE ONLY EQUIPMENT
ZR X6,PPC10 IF BUFFER MAY BE FOR THIS FILE
EQ PPC13 CLEAR BUFFER INDEX
TITLE CIO READ PROCESSOR.
RDF SPACE 4,10
** RDF - READ/SKIP FORWARD FUNCTION PROCESSOR.
*
* ENTRY AT *RDF* FROM *PPC* VIA *CBS* IF READ FUNCTION.
* AT *RDF3* FROM *PPC* IF SKIP FORWARD FUNCTION.
* (X6) = BUFFER SIZE IN PRUS, IF ENTRY AT *RDF*.
* (X7) = WORD COUNT OF DATA REMAINING IN BUFFER,
* IF ENTRY AT *RDF*.
*
* EXIT TO *CMP* FOR COMPLETED FUNCTION.
* TO *CMP5* IF UNNECESSARY READ FUNCTION.
* TO *RCR* IF PRU TRANSFER LIMIT.
*
* ERROR EXIT TO *RPC* IF ERROR DETECTED.
*
* USES A - 0, 1, 2, 3, 6, 7.
* B - 2, 4, 6.
* X - 1, 2, 3, 6, 7.
*
* CALLS BRD, CBS, CIM, CPT, CRD, CSP, RBI, ULA, ULP.
RDF NZ X6,RDF1 IF ROOM IN BUFFER
SB2 B0 SET TERMINATION CONDITION NOT REACHED
SA2 A4 GET MESSAGE BUFFER PARAMETERS
LX2 59-10
PL X2,CMP5 IF NOT *READSKP*
LX2 59-56-59+10
NG X2,RDF1 IF SKIP DATA TRANSFER FLAG SET
SX6 14B CLEAR TERMINATION TO SET PRU STOP
LX2 -59+56
BX6 -X6*X2
SA6 A4+
SX7 B1+ RESET 1 PRU IN BUFFER
SA7 NPCB
RDF1 ERX1 X4 GET FST ENTRY
LX1 59-11
SA2 A4
LX2 59-5
SB5 RDF3 SET RETURN ADDRESS FOR *ULP*
PL X1,RDF2 IF NOT SYSTEM SECTOR OPERATION
MX6 -59
BX6 -X6*X1 CLEAR SYSTEM SECTOR OPERATION FLAG
SX7 /CIOERR/IRQ *ILLEGAL I/O REQUEST*
PL X2,RPC IF NOT CONTROL WORD READ
LX6 11-59
EWX6 X4
RDF2 LX2 59-4-59+5
PL X2,RDF3 IF NOT *RPHRLS*/*READLS* FUNCTION
SA1 A4-B1 GET FET LENGTH
LX1 1
SX7 /CIOERR/FPE *FET PARAMETER ERROR*
AX1 49
ZR X1,RPC IF NO LIST ADDRESS WORD IN FET
SX1 4
IX1 X5+X1
ERX1 X1
BX7 X7-X7 SET INITIAL CONVERSION FLAG
LX1 59-23
SA7 ULPA
PL X1,ULP IF NOT CONTINUATION OF PREVIOUS OPERATION
* INTERLOCK I/O BUFFER READ BUFFER.
RDF3 ERX2 X4 READ FST
SA1 PRUC CHECK FOR PRU TRANSFER LIMIT
LX2 -48
MX6 -12
SX1 X1+LSLB
BX3 -X6*X2 EST ORDINAL
AX1 12
NZ X1,RCR IF PRU TRANSFER LIMIT
CX1 X3,EST CONVERT EST ORDINAL TO OFFSET
TA3 X1+EQDE,EST READ EST ENTRY
SX1 B1
LX7 X3,B1
TA3 SYFO*FNTG+FSTG,FNT READ SYSTEM FILE FST
LX2 48
BX3 X3-X2
PL X7,RDF3.1 IF NOT SYSTEM DEVICE
SA2 CHRV
SX7 40B
LX3 -36
BX7 X2+X7 SET *READSYS* FLAG IN *CHRV*
BX3 -X6*X3
NZ X3,RDF3.1 IF NOT SYSTEM FILE READ
SA7 A2
RDF3.1 IX1 X4+X1
SA2 LBIA
ERX1 X1 READ FNT LINK WORD
ZR X2,RDF4 IF NO BUFFER INTERLOCKED
BX6 -X6*X1 I/O BUFFER LINK
SX2 B1 SET INTERLOCK VALUE
SB6 RDF5 SET RETURN ADDRESS FOR *CSP*
NZ X6,CSP IF LINK SET IN FNT
SA0 RDF4 SET RETURN ADDRESS FOR *RBI*
EQ RBI RELEASE BUFFER INTERLOCK
RDF4 SX2 BMVI*100B+BMRD VALIDATE I/O BUFFER
SB4 CPT SET RETURN ADDRESS FOR *CIM*
EQ CIM CALL I/O BUFFER MANAGER
RDF5 SB4 CPT SET RETURN ADDRESS FOR *CIM*
SX2 BMRG*100B RELEASE BUFFER AND GET NEXT BUFFER
NG X7,CIM IF SECTOR NOT IN SAME BUFFER
SX7 X7-LSLB
PL X7,CIM IF SECTOR NOT IN SAME BUFFER
EQ CPT EXIT TO CALCULATE PRUS TO TRANSFER
* REENTRY FROM *CPT*.
* PROCESS DATA.
RDF6 SA3 LBIA GET TRACK LINKAGE
SA1 X3+PAD4
MX3 -12
BX6 -X3*X1 SAVE TRACK LINKAGE
LX6 48
SA2 A4
SA6 STLR
ZR B3,RDF11 IF EOI ONLY
LX2 59-56
SA1 A5+3 GET *IN*
SX6 B6 WORD COUNT OF TRANSFER
NG X2,RDF9 IF SKIP DATA TRANSFER
SB6 RDF8 SET *BRD* EXIT ADDRESS
AX1 24
LX2 59-5-59+56
NG X2,CRD IF *READCW*
LX2 59-10-59+5
PL X2,BRD IF NOT *READSKP*
LX2 -59+10
SX3 14B
BX3 X3*X2
NZ X3,BRD IF NOT ON PARTIAL SECTOR
SX7 /CIO/EOR RESET EOR STOP
MX3 1
BX7 X7+X2
LX3 56-59
BX7 X7+X3 SET SKIP DATA TRANSFER FLAG
SA3 WCCB GET WORD COUNT OF *CIO* BUFFER
SA7 A4
IX2 X3-X6
PL X2,BRD IF ENOUGH ROOM IN BUFFER FOR SHORT PRU
SX6 X3+ GET WORD COUNT OF *CIO* BUFFER
EQ BRD COMPLETE FILL OF *CIO* BUFFER
* REENTRY FROM *BRD*/*CRD*.
* UPDATE *IN* POINTER IN FET AND MESSAGE BUFFER.
RDF8 SX6 X1 UPDATE *IN* IN FET
SX2 B1
SA1 A5+3 UPDATE *IN* IN MESSAGE BUFFER
IX2 X5+X2
EWX6 X2
SX1 X1+ *OUT*
LX6 24
BX6 X6+X1
SA6 A1+
* UPDATE CURRENT TRACK AND SECTOR IN FST.
* UPDATE PRU COUNT.
RDF9 SA2 NPTR GET PRU COUNT OF TRANSFER
ERX1 X4 UPDATE CURRENT TRACK AND SECTOR IN FST
LX1 -12
IX6 X1+X2 ADVANCE CURRENT SECTOR
SA1 NPCB DECREMENT BUFFER SPACE PRU COUNT
IX7 X1-X2
MX3 -LSLBS
BX3 -X3*X6 MOD *LSLB* OF SECTOR
NZ X3,RDF10 IF NOT LAST PRU IN CONTROL BUFFER
SA3 STLR GET SECTOR/TRACK LINKAGE
PL X3,RDF10 IF NOT END OF TRACK
MX1 36
BX6 X1*X6 CLEAR CURRENT SECTOR
LX3 24
BX6 X6+X3 SET NEXT TRACK
RDF10 LX6 12
SA3 PRUC INCREMENT PRU COUNT
EWX6 X4
IX6 X3+X2
SA7 A1
SA6 A3
SA2 A4 GET TERMINATION STATUS
* CHECK FOR PRU/EOR/EOF/EOI TERMINATION.
RDF11 ERX1 X4 SET STATUS IN FST
MX6 56
BX6 X6*X1
SX3 B2
BX6 X6+X3
EWX6 X4
SX7 14B
BX7 X7*X2
IX1 X3-X7
PL X1,RDF14 IF TERMINATION CONDITION REACHED
* CHECK FOR BUFFER FULL TERMINATION.
RDF12 SA2 A4
SA1 NPCB CHECK BUFFER SPACE
LX2 59-56
SX6 X1+
NG X2,RDF3 IF SKIP DATA TRANSFER
SB6 RDF13 SET RETURN ADDRESS FOR *CBS*
ZR X6,CBS IF NO MORE ROOM IN BUFFER
RDF13 NZ X6,RDF3 IF MORE ROOM IN BUFFER
SA2 A4
LX2 59-10
SB2 0 PREVENT SETTING FET TERMINATION STATUS
PL X2,CMP IF NOT *READSKP*
SX6 14B CLEAR TERMINATION TO SET PRU STOP
LX2 10-59
BX6 -X6*X2
SA6 A4
SX7 B1 RESET 1 PRU IN BUFFER
SA7 NPCB
EQ RDF3 PROCESS PARTIAL SECTOR
* PRU/EOR/EOF/EOI STOP ENCOUNTERED.
* ADVANCE *READLS*/*RPHRLS*.
RDF14 SB5 ULA SET RETURN ADDRESS FOR *ULP*
LX2 59-4
SX7 B1
NG X2,ULP IF *READLS*/*RPHRLS*
SB4 B2-/CIO/EOF
LX2 59-10-59+4
PL X2,CMP IF NOT SKIP/*READSKP*
LX2 59-7-59+10
NG X2,RDF15 IF NOT *READSP*
* PROCESS *READSKP* FUNCTION.
LX2 0-20-59+7+60 GET LEVEL NUMBER
MX1 56
BX1 X1+X2
MX7 1
NZ X1,CMP IF *READSKP* TO EOR COMPLETE
GE B4,CMP IF *READSKP* TO EOF COMPLETE
LX7 56-59
LX2 20-0 SET SKIP DATA TRANSFER FLAG
BX7 X7+X2
SA7 A4
EQ RDF3 CONTINUE SKIP FOR *READSKP*
* ADVANCE SKIP FUNCTION.
RDF15 SA1 A5-B1 DECREMENT SKIP COUNT
GT B4,CMP IF EOI ENCOUNTERED
LX1 -18
IX7 X1-X7
SX1 X7
LX7 18
SA7 A1
NZ X1,RDF3 IF SKIP FUNCTION NOT COMPLETE
EQ CMP EXIT
BRD SPACE 4,15
** BRD - BUFFER READ DATA.
*
* ENTRY (B6) = RETURN ADDRESS.
* (X0) = FWA DATA IN I/O BUFFER.
* (X1) = *IN*.
* (X6) = WORD COUNT TO TRANSFER.
*
* EXIT (X1) = ADVANCED *IN* POINTER.
* (X6) = 0, IF NO DATA TRANSFERRED.
*
* USES A - 0, 2.
* B - 4, 5.
* X - 0, 2, 3, 6, 7.
*
* CALLS ABP.
BRD ZR X6,RB6 IF NO DATA TO TRANSFER
SA2 ABRA ABSOLUTE RA
LX0 -30
IX2 X1+X2 ABSOLUTE *IN*
SA0 X2
BX0 X0+X2
LX0 30 30/ABSOLUTE *IN*, 30/FWA I/O BUFFER DATA
SX7 X6 WORD COUNT OF TRANSFER
SB4 BRD1 SET RETURN ADDRESS FOR *ABP*
EQ ABP ADVANCE *IN*
BRD1 NG X7,BRD4 IF NO SECOND PART TO TRANSFER
IX6 X6-X7 NUMBER OF WORDS IN FIRST PART
SX3 X2 RELATIVE *FIRST*
SB4 X6 SET TRANSFER SIZE
SB5 BTSZ
BX2 X2-X2
GE B5,B4,BRD3 IF ONE BLOCK OR LESS TO READ
SA2 PSTA ADDRESS INCREMENT WORD
BRD2 RE BTSZ
RJ HHE HANG ON HALF-EXIT
SB5 B5+BTSZ INCREMENT ADDRESSES
SA0 A0+BTSZ
BRD3 IX0 X0+X2
LT B5,B4,BRD2 IF MORE BLOCKS TO TRANSFER
SB5 B4-B5
RE B5+BTSZ
RJ HHE HANG ON HALF-EXIT
MX2 -30
SX6 B5+BTSZ SET WORD COUNT OF LAST BLOCK
BX0 -X2*X0 CLEAR CM ADDRESS FIELD
IX0 X0+X6 ADVANCE I/O BUFFER ADDRESS
SA2 ABRA ABSOLUTE *RA*
IX3 X3+X2 ABSOLUTE *FIRST*
SA0 X3
LX3 30
BX0 X0+X3
BX6 X7 SET BLOCK SIZE OF SECOND BLOCK
BRD4 SB4 X6 SET TRANSFER SIZE
SB5 BTSZ
BX2 X2-X2
GE B5,B4,BRD6 IF .LE. ONE BLOCK TO TRANSFER
SA2 PSTA
BRD5 RE BTSZ
RJ HHE HANG ON HALF-EXIT
SB5 B5+BTSZ
SA0 A0+BTSZ INCREMENT ADDRESSES
BRD6 IX0 X0+X2
LT B5,B4,BRD5 IF MORE FULL BLOCKS TO TRANSFER
SB5 B4-B5
RE B5+BTSZ
RJ HHE HANG ON HALF-EXIT
JP B6 RETURN
CRD SPACE 4,15
** CRD - CONTROL WORD READ DATA.
*
* ENTRY (B2) = READ STATUS.
* (X0) = FWA OF DATA IN I/O BUFFER.
* (X1) = *IN*.
* (X6) = WORD COUNT OF TRANSFER.
* (NPTR) = NUMBER OF PRUS TO TRANSFER.
*
* EXIT TO *RDF8*.
*
* USES A - 2, 3, 7.
* B - 3, 4, 6.
* X - 0, 2, 3, 6, 7.
*
* CALLS ABP, BRD.
CRD BX3 X6 SAVE WORD COUNT, INITIALIZE PRU COUNT
LX3 30
CRD1 SX6 1 INCREMENT PRU COUNT
BX7 X3
IX3 X3+X6
SA2 NPTR GET NUMBER OF PRUS TO TRANSFER
SX6 X3
IX2 X2-X6
NG X2,RDF8 IF NO MORE PRUS TO TRANSFER
AX7 30+6 CALCULATE REMAINING WORD COUNT
IX2 X7-X6
SX6 100B SET FULL BLOCK WORD COUNT
PL X2,CRD2 IF FULL BLOCK TO TRANSFER
LX7 30+6
IX6 X3-X7
AX6 30 WORD COUNT OF TRANSFER
NZ X6,CRD2 IF DATA TO TRANSFER
SX2 B2-/CIO/EOF
NZ X2,CRD2 IF NOT EOF
SX7 14B
SA2 A4
BX2 X7*X2
SX2 X2-/CIO/EOF
ZR X2,RDF8 IF TERMINATE ON EOF
* PROCESS HEADER CONTROL WORD.
CRD2 BX7 X6 WORD COUNT
SX2 B1
LX2 36+6 PRU SIZE
LX7 2
IX7 X7+X6 BYTE COUNT
BX7 X7+X2
SA2 ABRA *RA*
IX2 X1+X2
EWX7 X2 STORE HEADER CONTROL WORD IN BUFFER
SB4 BRD SET RETURN ADDRESS FOR *ABP*
IX7 X0+X6 SAVE ADVANCED I/O BUFFER DATA ADDRESS
SA7 CWLA
BX7 X3 SAVE SECTOR COUNT
SA7 A7+B1
SX7 B1 SET TO ADVANCE *IN* BY 1 WORD
SB6 CRD3 SET RETURN ADDRESS FOR *BRD*
EQ ABP ADVANCE *IN*
* PROCESS TRAILER CONTROL WORD.
CRD3 ERX2 X4 BUILD TRAILER CONTROL WORD
MX7 -24
SA3 CWLA+1 RESTORE SECTOR COUNT
LX2 -12
BX7 -X7*X2 CURRENT TRACK AND SECTOR
SX0 X3-1 GET PRU COUNT
IX0 X7+X0
LX2 12+3
MX7 9
BX7 X7*X2 EQUIPMENT
LX7 -27
MX2 4
NZ X6,CRD4 IF DATA TRANSFERRED
SB3 B2-/CIO/EOF
NZ B3,CRD4 IF NOT EOF
LX2 -8
BX7 X7+X2
CRD4 BX7 X7+X0
SA2 ABRA *RA*
IX2 X1+X2
EWX7 X2 STORE TRAILER CONTROL WORD
SX7 B1
SA2 A3-B1 GET ADVANCED I/O BUFFER DATA ADDRESS
SB4 CRD1 SET RETURN ADDRESS FOR *ABP*
BX0 X2
EQ ABP ADVANCE *IN*
ULA SPACE 4,10
** ULA - UPDATE LIST ACCOUNTING.
*
* ENTRY (CLEA) = ABSOLUTE ADDRESS OF CURRENT LIST ENTRY.
* (X3) = RANDOM ADDRESS FOR CURRENT ENTRY.
*
* EXIT TO *RDF12* TO CONTINUE DATA TRANSFER.
* (ULPA) = CURRENT RANDOM ADDRESS.
* (ULPA+1) = CURRENT FST.
*
* USES A - 1, 2, 3, 6.
* X - 0, 1, 2, 3, 6.
ULA ERX1 X4 GET FST
BX6 X3 SAVE CURRENT RANDOM ADDRESS
SA6 ULPA
SA2 CLEA
BX6 X1 SAVE FST
SA6 A6+B1
SX1 B1 GET PREVIOUS RANDOM ADDRESS
IX1 X2-X1
MX0 -24
ERX1 X1
BX1 -X0*X1
SA2 PRUC SAVE OLD PRU COUNT
SX6 X2
LX6 30
SX2 X2
BX6 X6+X2
SA6 A2
IX1 X3-X1 CURRENT POSITION - PREVIOUS POSITION
NG X1,ULA1 IF BACKWARD POSITIONING
SX1 X1-IMPL-1 CHECK IF NEW POSITIONING ABOVE THRESHOLD
NG X1,RDF12 IF NOT ABOVE THRESHOLD
ULA1 SA2 UACC INCREMENT ACCOUNTING CHARGE
SX6 IMRL
IX6 X2+X6
SA6 A2
EQ RDF12 CONTINUE DATA TRANSFER
ULP SPACE 4,10
** ULP - UPDATE LIST POINTER.
*
* ENTRY (B5) = EXIT ADDRESS.
*
* EXIT (CLEA) = ABSOLUTE ADDRESS OF CURRENT LIST ENTRY.
* TO *CMP* IF END OF LIST ENCOUNTERED.
*
* ERROR TO *RPC* IF INCORRECT LIST ADDRESS.
*
* USES A - 1, 2, 6, 7.
* B - 2, 6.
* X - 0, 1, 2, 6, 7.
*
* CALLS CRA.
ULP SX0 4 GET LIST POINTER
IX0 X5+X0
ERX1 X0
SA2 B7+FLSW GET FL
MX6 -12
BX2 -X6*X2
LX2 6
SB6 X1
SX7 /CIOERR/FPE *FET PARAMETER ERROR*
LE B6,B1,RPC IF LIST POINTER .LE. 1
BX6 X1 CHECK FOR CONTINUATION
LX6 59-23
NG X6,ULP1 IF CONTINUATION
SX6 B1 PREVENT ADVANCE OF LIST POINTER
IX1 X1-X6
LX6 23-0
BX1 X1+X6 SET CONTINUATION FLAG
ULP1 SX6 1 ADVANCE LIST ADDRESS
IX6 X1+X6
EWX6 X0
SX6 X6
IX2 X6-X2
PL X2,RPC IF LIST POINTER .GE. FL
SA2 ABRA ABSOLUTE *RA*
IX7 X2+X6
SA7 CLEA SAVE CURRENT LIST ENTRY ABSOLUTE ADDRESS
ERX2 X7 GET RANDOM ADDRESS
MX7 -24
SA1 ULPA
BX3 -X7*X2
IX6 X3-X1 CURRENT - PREVIOUS RANDOM ADDRESS
ZR X3,ULP2 IF END OF LIST
SB4 ULP2.1 SET RETURN ADDRESS FOR *CRA*
ZR X1,CRA IF INITIAL CALL
SA2 A1+B1 GET FST
MX0 -12
LX2 -12 EXTRACT SECTOR NUMBER SAVED IN FST
BX1 -X0*X2
IX7 X1+X6 FST SECTOR + RANDOM ADDRESS INCREMENT
SA1 A4+B1 GET SECTORS PER TRACK
SX6 X1
IX1 X7-X6
NG X7,CRA IF NEW RANDOM ADDRESS BEFORE THIS TRACK
PL X1,CRA IF NEW RANDOM ADDRESS AFTER THIS TRACK
LX2 -12 EXTRACT CURRENT TRACK
BX0 -X0*X2
EQ SFP SET UPDATED FST POSITION
ULP2.1 R= X1,FUTL-FSTL
IX0 X4+X1
ERX1 X0
MX6 -12
BX7 -X6*X1
ZR X7,ULP2.2 IF NO BUFFER INDEX
LX7 CBTLS
ERX2 X4
TA3 X7+FSTC,CBT
BX2 X2-X3
SA3 INBA
BX2 X3*X2
BX6 X6*X1
ZR X2,ULP2.2 IF ACCESSING THE SAME BUFFER
EWX6 X0 CLEAR BUFFER INDEX
ULP2.2 JP B5 EXIT
* PROCESS END OF LIST.
ULP2 MX7 1
ERX1 X0 CLEAR CONTINUATION FLAG
LX7 23-59
BX7 -X7*X1
EWX7 X0
SB2 /CIO/EOF SET EOF RETURN FOR FET
EQ CMP EXIT
ULPA CON 0 PREVIOUS RANDOM ADDRESS
CON 0 FST FOR PREVIOUS RANDOM ADDRESS
TITLE CIO WRITE PROCESSOR.
WTF SPACE 4,20
** WTF - WRITE FUNCTION PROCESSOR.
*
* ENTRY (X6) = (NPTR) = NUMBER OF PRUS TO TRANSFER THIS PASS.
* (X7) = (WCCB) = WORD COUNT OF DATA IN BUFFER IF WRITE,
* ROOM REMAINING IN BUFFER IF READ.
*
* EXIT TO *CMP* IF FUNCTION COMPLETE.
* TO *CMP5* IF UNNECESSARY WRITE FUNCTION.
* TO *RCR* IF TRANSFER LIMIT.
* TO *RCR1* IF TRACK LIMIT.
* TO *RCR2* IF INSUFFICIENT I/O BUFFERS TO
* CONTINUE TRANSFER.
*
* ERROR EXIT TO *RPC* IF ERROR DETECTED.
*
* USES A - 0, 1, 2, 3, 6, 7.
* B - 2, 3, 4, 6.
* X - 0, 1, 2, 3, 6, 7.
*
* CALLS BWD, CBS, CIM, CMS, CPT, CRA, CSP, CWD, SNT, SRA.
*
* MACROS MONITOR.
WTF SA3 A4 GET MESSAGE BUFFER PARAMETERS
SX2 54B
BX1 X2*X3 TERMINATION CONDITION AND *WRITECW* FLAG
ERX2 X4 GET FST ENTRY
SB4 X1-/CIO/EOI
LX1 59-5
SB2 B4-/CIO/EOF+/CIO/EOI
SB6 WTF3 SET RETURN ADDRESS FOR *SNT*
NZ X7,WTF1 IF DATA IN BUFFER
NG X1,CMP5 IF *WRITECW* WITH NO DATA
NZ B2,WTF1 IF NOT EOF OPERATION
SX1 6
BX1 X1*X2
SX1 X1-2
MX7 1
ZR X1,WTF1 IF LAST OPERATION IS INCOMPLETE WRITE
LX7 56-59 SET SKIP FLAG
BX3 X3+X7
WTF1 NZ X6,WTF2 IF AT LEAST ONE FULL SECTOR IN BUFFER
ZR B4,CMP5 IF BUFFERED WRITE
WTF2 SA1 A4+B1 GET MST ADDRESS
LX2 -24
MX7 -12
AX1 18
BX0 -X7*X2 CURRENT TRACK
EQ SNT SET NEXT TRACK
WTF3 ERX1 X4
SA6 NTKP SAVE OLD EOI SECTOR/NEXT TRACK POINTER
MX0 1
LX1 -12
BX7 -X7*X1 CURRENT SECTOR
LX0 10-59
LX1 59-1+12-60
BX7 X6-X7
BX6 -X0*X3 CLEAR REWRITE FLAG
NG X2,WTF4 IF NOT EOI TRACK
ZR X7,WTF5 IF POSITIONED AT EOI
SX2 -1
WTF4 BX6 X3
PL X1,WTF5 IF LAST OPERATION NOT WRITE
BX6 X3+X0 SET REWRITE FLAG
WTF5 SA1 FMOD GET FILE MODE
SB5 X1-1
ZR X1,WTF6 IF NO RESTRICTIONS
SX7 /CIOERR/IFM *ILLEGAL MODIFICATION*
BX0 X0*X6
ZR B5,WTF5.1 IF UPDATE MODE
PL X2,WTF6 IF POSITIONED AT EOI
EQ B5,B1,RPC IF APPEND MODE
WTF5.1 ZR X0,RPC IF NOT REWRITE FOR UPDATE OR MODIFY MODE
* SET FILE SIZE LIMIT.
WTF6 SA6 A4
BX3 X2 PRESERVE EOI FLAG
SX2 B1 GET FILE SIZE INDEX FROM FNT
IX2 X4+X2
ERX2 X2
MX7 -3
LX2 -30
BX7 -X7*X2
LX7 -1
LX6 59-56
SA2 TFSL+X7 GET MAXIMUM FILE SIZE IN PRUS
PL X7,WTF7 IF VALUE IN UPPER PART OF WORD
LX2 30
WTF7 AX2 30
BX7 X2
SA7 FSZL SAVE FILE SIZE LIMIT
PL X6,WTF7.1 IF NOT *WRITEF* WITH NO DATA
SX6 B0+
SA6 WCCB CLEAR DATA WORD COUNT
SA6 NPCB CLEAR DATA PRU COUNT
WTF7.1 SB4 WTF7.2
SB4 -B4
NG X3,SRA IF NOT POSITIONED AT EOI
ZR X7,WTF7.5 IF NO FILE SIZE LIMIT
SB4 WTF7.4
SB4 -B4 PREVENT FST/FET UPDATE
EQ SRA CALCULATE CURRENT POSITION RANDOM ADDRESS
WTF7.2 SB4 WTF7.3 SET RETURN ADDRESS FOR *CRA*
BX7 X3 SAVE CURRENT POSITION RANDOM ADDRESS
SB4 -B4 PREVENT FST/FET UPDATE
SA7 SCIE
SX3 B0+
EQ CRA CALCULATE EOI RANDOM ADDRESS
WTF7.3 SA1 SCIE NUMBER OF SECTORS AFTER CURRENT POSITION
IX7 X3-X1
SA7 A1
EQ WTF8 PROCESS WRITE
WTF7.4 SA2 FSZL SET FILE SIZE
SX1 B2
IX7 X7+X1 SECTOR COUNT THROUGH END OF TRACK
LX7 30
BX6 X2+X7
SX7 B0
SA6 A2
WTF7.5 SA7 SCIE SET CURRENT POSITION = EOI ((SCIE) = 0)
* CALCULATE NUMBER OF SECTORS FOR WRITE OPERATION.
WTF8 SA2 A4 GET TERMINATION CONDITION
MX1 -2
SA0 WTF11 SET RETURN ADDRESS FOR *CMS*
LX2 -2
BX1 -X1*X2
SB6 WTF9 SET RETURN ADDRESS FOR *CBS*
SB3 X1-/CIO/EOI/4
ZR B3,CBS IF BUFFERED WRITE
SA3 NPCB GET NUMBER OF SECTORS IN *CIO* BUFFER
SB2 X1
SB2 X3+B2 SECTOR COUNT = FULL PRUS+EOR+EOF+EOI
EQ CMS COMPUTE MOD 40B OF CURRENT SECTOR
WTF9 SA2 A4+
SB2 X6 SECTOR COUNT = FULL PRUS
LX2 59-5
PL X2,WTF10 IF NOT *WRITECW*
BX6 X7
LX2 59-10-59+5
NG X2,WTF10 IF REWRITE
SB2 B2+10B COMPENSATE FOR SHORT SECTORS
WTF10 NZ X6,CMS IF DATA IN BUFFER
EQ CMP COMPLETE PROCESSING
* CALCULATE NUMBER OF I/O BUFFERS NEEDED FOR WRITE.
WTF11 PX6 X2
SB2 X1+B2 MOD 40B OF CURRENT SECTOR + SECTOR COUNT
SA2 A4
LX2 59-10
NG X2,WTF12 IF REWRITE
SB2 B2+LSLB ROUND UP NUMBER OF BUFFERS AND COUNT EOI
WTF12 SX1 B2+
PX1 X1
NX6 X6
FX1 X1/X6
UX1,B6 X1
LX1 B6
SB6 X1 NUMBER OF I/O BUFFERS NEEDED
SA1 A4+B1 GET SECTORS PER TRACK
SX7 X1
SA1 LBIA CHECK IF BUFFER INTERLOCKED
AX7 LSLBS
SB3 X7 NUMBER OF I/O BUFFERS PER TRACK
SB4 11
GE B6,B4,WTF12.1 IF MORE THAN 11 BUFFERS NEEDED
LE B6,B3,WTF12.2 IF NOT MORE THAN ONE TRACK OF BUFFERS
SB4 B3
EQ WTF13 RESTRICT TO ONE TRACK WORTH OF BUFFERS
WTF12.1 LE B4,B3,WTF13 IF NOT MORE THAN ONE TRACK OF BUFFERS
SB4 B3+
EQ WTF13 RESTRICT TO ONE TRACK WORTH OF BUFFERS
WTF12.2 SB4 B6+
GT B6,B1,WTF13 IF MORE THAN 1 BUFFER NEEDED
SB4 1
NZ X1,CPT IF BUFFER ALREADY INTERLOCKED
SX7 BMVI*100B+BMRW
NG X2,WTF14 IF REWRITE OF ONE BUFFER
WTF13 SX7 BMVI*100B+BMWR
ZR X1,WTF14 IF NO INTERLOCKED BUFFER
MX1 1 SET CURRENT BUFFER INTERLOCKED FLAG
LX1 41-59
BX7 X7+X1
WTF14 SX2 B4-B1
SX1 LSLB LOGICAL SECTORS PER I/O BUFFER
IX0 X2*X1 CHECK IF PRU COUNT OVERFLOW
LX2 42
IX0 X0+X1
SA1 PRUC
IX1 X1+X0
AX1 12
NZ X1,RCR IF PRU COUNT WILL EXCEED 12 BITS
BX7 X7+X2 SET NUMBER OF I/O BUFFERS TO REQUEST
SA7 WLBR
* CALCULATE NUMBER OF I/O BUFFERS ON REMAINDER OF
* CURRENT TRACK.
SA2 A4+B1 GET SECTORS PER TRACK
SX7 X2
IX1 X7-X3 SECTOR LIMIT - FIRST SECTOR IN BUFFER
PX1 X1
FX1 X1/X6
UX1,B6 X1
LX1 B6
SB6 X1+ NUMBER OF I/O BUFFERS REMAINING ON TRACK
GE B6,B4,WTF20 IF SUFFICIENT ROOM ON CURRENT TRACK
MX0 -12
ERX3 X4 GET CURRENT TRACK
LX2 -18
SX1 X2 MST ADDRESS
SB6 WTF15 SET RETURN ADDRESS FOR *SNT*
LX3 -24
BX0 -X0*X3
EQ SNT SET NEXT TRACK
WTF15 SA3 B7+ACLW CHECK FOR JOB PRU LIMIT
NG X2,WTF20 IF NEXT TRACK ASSIGNED
ZR B5,WTF20 IF UPDATE MODE
MX2 -18
SX7 /CIOERR/PRL *PRU LIMIT*
BX2 -X2*X3
SA3 FSZL FILE SIZE LIMIT
ZR X2,RPC IF JOB PRU LIMIT
* CHECK FILE SIZE LIMIT.
ZR X3,WTF18 IF UNLIMITED
BX2 X3
AX2 30
SA1 A4+B1 SECTORS PER TRACK
SX1 X1
NZ X2,WTF17 IF FILE SIZE ALREADY CALCULATED
SB4 WTF16 SET RETURN ADDRESS FOR *SRA*
SB4 -B4 PREVENT SETTING RANDOM INDEX IN FET
EQ SRA CALCULATE NUMBER OF SECTORS ON FILE
WTF16 SA3 FSZL FILE SIZE LIMIT
SX1 B2
IX6 X7+X1 SECTOR COUNT THRU END OF CURRENT TRACK
LX6 30
BX3 X3+X6
WTF17 MX6 -30
BX6 -X6*X3
LX1 30 ADD IN SECTORS FOR NEW TRACK
IX7 X1+X3
SA7 A3+
AX7 30
IX6 X7-X6
SX7 /CIOERR/FTL *FILE TOO LONG*
PL X6,RPC IF FILE SIZE LIMIT EXCEEDED
* REQUEST ADDITIONAL TRACK.
WTF18 ERX1 X4 GET EQUIPMENT AND CURENT TRACK
MX6 -12
LX1 12
BX6 -X6*X1
LX1 12
MX0 12
BX1 X0*X1
BX6 X1+X6
LX6 36
SX7 B1 REQUEST ONE TRACK
BX6 X6+X7
MX0 -5
MONITOR RTCM
MX6 -12 CHECK TRACK ASSIGNMENT
BX7 -X6*X1
NZ X7,WTF19 IF TRACK ASSIGNED
* PROCESS TRACK LIMIT.
+ NG X1,RCR1 IF *RTCM* REJECT
EQ RPC CALL PP CIO TO COMPLETE REQUEST
* INCREMENT MASS STORAGE PRU COUNT.
WTF19 SA1 A4+B1 GET SECTORS PER TRACK
SX1 X1
SA2 PCMS
IX6 X2+X1
SA6 A2
MX7 1
LX7 10-59
SA2 A4 CLEAR REWRITE FLAG
BX7 -X7*X2
SA7 A4+
* CALL I/O BUFFER MANAGER.
WTF20 SA2 WLBR GET NUMBER OF I/O BUFFERS TO REQUEST
SB4 WTF21 SET RETURN ADDRESS FOR *CIM*
EQ CIM CALL I/O BUFFER MANAGER
WTF21 SA2 A5+B1 CHECK IF MULTIPLE BUFFERS INTERLOCKED
BX7 X7-X7
NZ X2,CPT IF MORE THAN ONE BUFFER ASSIGNED
SA2 WLBR
SA0 WTF21.1 SET RETURN ADDRESS FOR *CMS*
AX2 41
ZR X2,CPT IF ONLY ONE BUFFER REQUESTED
LX2 -1
NG X2,WTF21.2 IF NEXT BUFFER REQUIRED
EQ CMS CALCULATE MOD 40B OF CURRENT SECTOR
WTF21.1 SX1 X1-LSLB+LSLB/4
NG X1,CPT IF CAN WRITE MORE DATA TO CURRENT BUFFER
WTF21.2 SA2 A4 CHECK FOR REWRITE
LX2 59-10
PL X2,RCR2 IF NOT REWRITE
EQ CPT CALCULATE PRU-S TO TRANSFER
* REENTRY FROM *CPT*.
* CHECK IF ROOM FOR BLOCK WRITE AND EOI.
WTF23 ERX1 X4 GET CURRENT SECTOR
LX1 -12
MX7 -12
BX1 -X7*X1
IX7 X1+X6 LAST SECTOR POSITION + 1 TO TRANSFER
SA1 A4 CHECK FOR REWRITE
MX6 1
LX1 59-10
SB4 B6 SAVE WORD COUNT
BX6 -X6*X1
PL X1,WTF24 IF NOT REWRITE
SA1 NTKP GET NEXT TRACK POINTER
IX1 X1-X7
PL X1,WTF25 IF NOT OVERWRITTING EOI SECTOR
NZ B5,WTF24 IF NOT UPDATE MODE
SX7 /CIOERR/IFM *INCORRECT MODIFICATION*
EQ RPC CALL *1MS*
WTF24 SA1 A4+B1 SET WRITE EOI FLAG
LX6 10-59
SA6 A4+ CLEAR REWRITE FLAG
MX6 1
BX6 X1+X6
SA6 A4+1
SA1 LBIA GET FIRST SECTOR OF CURRENT BUFFER
AX1 30
IX6 X7-X1 MOD 40B OF LAST SECTOR TO TRANSFER + 1
SA1 A5+1 CHECK FOR MORE BUFFERS INTERLOCKED
SX6 X6-LSLB
NG X6,WTF25 IF NOT OVERWRITE OF LAST SECTOR IN BUFFER
ZR X1,WTF8 IF MUST SAVE ROOM FOR EOI
* ADVANCE CURRENT TRACK/SECTOR.
WTF25 ERX1 X4 GET FST ENTRY
MX6 48
LX1 -12
BX6 X6*X1
SA2 A4+B1 GET SECTOR LIMIT
BX6 X6+X7 SAVE ADVANCED SECTOR
SX1 X2
IX1 X7-X1
NG X1,WTF28 IF NOT AT END OF TRACK
LX2 -18 GET SECTOR LIMIT
SX1 X2 MST ADDRESS
BX7 X0 SAVE I/O BUFFER DATA ADDRESS
LX6 -12
MX0 -12
BX0 -X0*X6 CURRENT TRACK
SB6 WTF26 SET RETURN ADDRESS FOR *SNT*
EQ SNT SET NEXT TRACK
WTF26 PL X2,WTF26 IF NEXT TRACK NOT ASSIGNED
SA6 NTKP SAVE NEXT TRACK POINTER
BX0 X6
SB6 WTF27 SET RETURN ADDRESS FOR *SNT*
EQ SNT SET NEXT TRACK
WTF27 SA1 A6
BX0 X7 RESTORE I/O BUFFER DATA ADDRESS
SA6 A6+ SAVE OLD EOI SECTOR/NEXT TRACK POINTER
BX7 X1
MX6 48
ERX1 X4 GET FST ENTRY
LX1 -24
BX1 X6*X1
BX1 X1+X7 SET CURRENT TRACK
LX1 12
BX6 X6*X1 CLEAR CURRENT SECTOR
* SET LINK IN HEADER IF LAST PRU IN SECTOR USED.
* INCREMENT TOTAL PRU COUNT.
* DECREMENT CIO BUFFER PRU COUNT AND WORD COUNT.
WTF28 SA2 USCW GET UPDATED SECTOR CONTROL WORD
MX1 2
LX1 23-59 CLEAR DATA FLAGS
BX2 -X1*X2
MX1 -LSLBS CHECK IF LAST PRU IN BUFFER USED
BX1 -X1*X6 MOD *LSLB* OF CURRENT SECTOR
LX6 12
SB6 X1
BX1 X6
BX6 X2
MX2 48
NZ B6,WTF29 IF NOT WRITING LAST PRU IN BUFFER
BX6 X2*X6 SET NEXT TRACK/SECTOR IN HEADER
BX6 X6+X7
WTF29 SA6 X3 STORE HEADER
SX3 B2-/CIO/EOR
MX6 56
SA2 NPTR GET NUMBER OF PRUS TO TRANSFER
BX6 X6*X1 SET LAST OPERATION INCOMPLETE WRITE
LX2 6
SB6 X2-100B
SX2 2
BX6 X6+X2
LX7 36 BUILD EOF TRAILER
NG X3,WTF31 IF FULL BLOCK TRANSFER
SX1 B6+77B
NZ X3,WTF30 IF EOF TRANSFERRED
SX3 B4-B6 CALCULATE WORD COUNT OF SHORT PRU
LX7 12
LX3 -24
BX7 X7+X3
WTF30 SA7 ERWB PLACE TRAILER IN EXTENDED WRITE BUFFER
SB6 A0+ SAVE (A0)
BX7 X0 SAVE (X0)
LX0 30
SA0 A7 FWA TO BEGIN TRANSFER FROM
AX0 30
SX3 A7
IX1 X0+X1
LX3 30
BX0 X1+X3 30/FWA FROM, 30/FWA I/O BUFFER DATA TO
WE 1 TRANSFER ONE WORD
RJ HHE HANG ON HALF-EXIT
BX0 X7 RESTORE (X0)
SA0 B6 RESTORE (A0)
LX2 1 SET LAST OPERATION COMPLETE WRITE
BX6 X6+X2
WTF31 SA2 A2 GET NUMBER OF PRUS TO TRANSFER
EWX6 X4
SA1 PRUC INCREMENT TOTAL PRU COUNT
SA3 WCCB DECREMENT CIO BUFFER WORD COUNT
IX6 X1+X2
SA6 A1
SA1 NPCB DECREMENT CIO BUFFER PRU COUNT
SX7 B4
IX7 X3-X7
IX6 X1-X2
PL X6,WTF32 IF MORE PRUS IN CIO BUFFER
BX6 X6-X6
WTF32 SA6 A1
SA7 A3
SA1 SDTW SKIP DATA TRANSFER FLAG FOR WRITE
SA2 A4
BX7 X2+X1 ADD SKIP FLAG
SA7 A4
LX2 59-5
SA1 A5+3 GET *OUT*
SX6 B4 SET WORD COUNT TO TRANSFER
SX1 X1
NG X2,CWD IF *WRITECW*
SB6 WTF33 SET RETURN ADDRESS FOR *BWD*
EQ BWD BUFFER WRITE DATA
* REENTRY FROM *BWD*/*CWD*.
* DATA TRANSFERRED FROM CIO BUFFER TO I/O BUFFER.
* UPDATE *OUT* POINTER IN FET AND MESSAGE BUFFER.
WTF33 SX3 B1+B1 UPDATE *OUT* IN FET
SX6 X1
MX2 36
IX3 X5+X3
SA1 A5+3 UPDATE *OUT* IN MESSAGE BUFFER
SB6 WTF34 SET RETURN ADDRESS FOR *CSP*
EWX6 X3
BX2 X2*X1 *IN*
BX6 X6+X2
SA6 A1
EQ CSP CALCULATE SECTOR POSITION
* CHECK IF CURRENT SECTOR IN SAME I/O BUFFER.
WTF34 SX2 BMRF*100B RELEASE AND FLUSH WRITE BUFFER
SB4 WTF36 SET RETURN ADDRESS FOR *CIM*
NG X7,CIM IF SECTOR NOT IN SAME BUFFER
SX7 X7-LSLB
PL X7,CIM IF SECTOR NOT IN SAME BUFFER
SB6 CPT CALCULATE PRUS TO TRANSFER
WTF35 SA2 A4 CHECK IF TERMINATION CONDITION REACHED
SX6 14B
BX6 X6*X2
SB3 X6
SB2 B2-B3
PL B2,CMP IF TERMINATION CONDITION REACHED
JP B6 CONTINUE WRITE PROCESSING
WTF36 SA2 A4 CHECK FOR REWRITE
LX2 59-10
PL X2,WTF36.1 IF NOT REWRITE
SA1 PMFF
SB6 RCR2 EXIT ADDRESS IF OPERATION NOT COMPLETE
ZR X1,WTF35 IF DIRECT ACCESS PERMANENT FILE
WTF36.1 ZR X6,WTF37 IF NEXT BUFFER NOT INTERLOCKED
SB6 CPT CALCULATE PRUS TO TRANSFER
NG X2,WTF35 IF REWRITE
SA1 A5+1
NZ X1,WTF35 IF ADDITIONAL I/O BUFFERS INTERLOCKED
WTF37 SB6 WTF8 REQUEST MORE I/O BUFFERS
EQ WTF35 CHECK FOR TERMINATION CONDITION
BWD SPACE 4,15
** BWD - BUFFER WRITE DATA.
*
* ENTRY (B6) = RETURN ADDRESS.
* (X0) = FWA TO TRANSFER DATA IN I/O BUFFER.
* (X1) = *OUT*.
* (X6) = WORD COUNT TO TRANSFER.
*
* EXIT (X1) = ADVANCED *OUT* POINTER.
* (B5) = FILE MODE - 1.
*
* USES A - 0, 1, 2.
* B - 4, 5.
* X - 0, 2, 3, 6, 7.
*
* CALLS ABP.
BWD ZR X6,RB6 IF NO DATA TO TRANSFER
SA2 ABRA ABSOLUTE *RA*
LX0 -30
IX2 X1+X2 ABSOLUTE *OUT*
SA0 X2
BX0 X0+X2
LX0 30 30/ABSOLUTE *OUT*, 30/FWA I/O BUFFER DATA
SX7 X6
SB4 BWD1 SET RETURN ADDRESS FOR *ABP*
EQ ABP ADVANCE *OUT*
BWD1 NG X7,BWD4 IF NO SECOND PART TO TRANSFER
IX6 X6-X7 NUMBER OF WORDS IN FIRST PART
SX3 X2 RELATIVE *FIRST*
SB4 X6 SET TRANSFER SIZE
SB5 BTSZ
BX2 X2-X2
GE B5,B4,BWD3 IF ONE BLOCK OR LESS TO WRITE
SA2 PSTA ADDRESS INCREMENT WORD
BWD2 WE BTSZ
RJ HHE HANG ON HALF-EXIT
SB5 B5+BTSZ INCREMENT ADDRESSES
SA0 A0+BTSZ
BWD3 IX0 X0+X2
LT B5,B4,BWD2 IF MORE BLOCKS TO TRANSFER
SB5 B4-B5
WE B5+BTSZ
RJ HHE HANG ON HALF-EXIT
MX2 -30
SX6 B5+BTSZ SET WORD COUNT OF LAST BLOCK
BX0 -X2*X0 CLEAR CM ADDRESS FIELD
IX0 X0+X6 ADVANCE I/O BUFFER ADDRESS
SA2 ABRA ABSOLUTE *RA*
IX3 X3+X2 ABSOLUTE *FIRST*
SA0 X3
LX3 30
BX0 X0+X3
BX6 X7 SET BLOCK SIZE OF SECOND BLOCK
BWD4 SB4 X6 SET TRANSFER SIZE
SB5 BTSZ
BX2 X2-X2
GE B5,B4,BWD6 IF .LE. ONE BLOCK TO TRANSFER
SA2 PSTA
BWD5 WE BTSZ
RJ HHE HANG ON HALF-EXIT
SB5 B5+BTSZ
SA0 A0+BTSZ INCREMENT ADDRESSES
BWD6 IX0 X0+X2
LT B5,B4,BWD5 IF MORE FULL BLOCKS TO TRANSFER
SB5 B4-B5
WE B5+BTSZ
RJ HHE HANG ON HALF-EXIT
SA2 FMOD RESTORE FILE MODE
SB5 X2-1
JP B6 RETURN
CWD SPACE 4,15
** CWD - CONTROL WORD WRITE DATA.
*
* ENTRY (X0) = FWA TO TRANSFER DATA IN I/O BUFFER.
* (X1) = *OUT*.
* (X6) = WORD COUNT TO TRANSFER.
*
* EXIT TO *WTF33*.
* (X1) = ADVANCED *OUT* POINTER.
*
* USES A - 2, 3, 7.
* B - 4, 6.
* X - 0, 2, 3, 6, 7.
*
* CALLS ABP, BWD.
CWD SA2 NPTR GET NUMBER OF PRUS TO TRANSFER
SA3 WCCB DECREMENT WORD COUNT OF *CIO* BUFFER
LX2 1 COUNT CONTROL WORDS
IX7 X3-X2
SA7 A3
BX3 X6 WORD COUNT OF TRANSFER
SA2 NPTR
ZR X2,WTF33 IF TRANSFER COMPLETE
SX6 B1
IX7 X2-X6
SA7 A2
SX7 B1 SKIP OVER HEADER CONTROL WORD
SB4 CWD2 SET RETURN ADDRESS FOR *ABP*
EQ ABP ADVANCE *OUT*
CWD2 LX6 6 SET FULL BLOCK WORD COUNT
IX7 X0+X6 SAVE ADVANCED I/O BUFFER DATA ADDRESS
SA7 CWLA
IX3 X3-X6
PL X3,CWD3 IF FULL BLOCK
IX6 X3+X6 SET SHORT BLOCK WORD COUNT
CWD3 BX7 X3 SAVE WORD COUNT
SB6 CWD4
SA7 A7+B1
EQ BWD WRITE DATA
CWD4 SA2 CWLA GET ADVANCED I/O BUFFER DATA ADDRESS
SA3 A2+B1 GET WORD COUNT
BX0 X2 RESET (X0)
SA2 NPTR WORD COUNT OF TRANSFER
SB4 WTF33 SET EXIT ADDRESS
SX7 B1
ZR X2,ABP IF TRANSFER COMPLETE, ADVANCE OUT
IX7 X2-X7 DECREMENT PRUS
SA7 A2
SB4 CWD2 SET RETURN ADDRESS
SX7 B1+B1 SKIP TRAILER AND HEADER CONTROL WORDS
SX6 B1
EQ ABP ADVANCE *OUT*
SCW SPACE 4,30
** SCW - SCAN CONTROL WORDS FOR *WRITECW*.
*
* ENTRY (B2) = MAXIMUM PRUS TO TRANSFER THIS PASS.
* (B4) = MOD 10B OF CURRENT SECTOR.
* (X0) = I/O BUFFER DATA FWA.
* (X3) = ADDRESS OF CONTROL WORD.
*
* EXIT TO *CMP* IF TRANSFER TERMINATED DUE TO INSUFFICIENT
* DATA IN CIO BUFFER.
* TO *CPT* IF MORE DATA AVAILABLE AFTER INSUFFICIENT
* DATA DETECTED.
* TO *WTF23* IF PRUS TO TRANSFER.
* (B2) = STATUS (0 = FULL BLOCK, 4 = EOR, 10B = EOF).
* (B6) = WORD COUNT OF TRANSFER.
* (X0) AND (X3) RESTORED TO SAME AS ON ENTRY.
* (X6) = (NPTR) = NUMBER OF PRUS TO TRANSFER
* THIS PASS (1 TO 10B).
*
* ERROR TO *RPC* IF BUFFER CONTROL WORD ERROR.
*
* USES A - 0, 2, 3, 6, 7.
* B - 2, 3, 4, 6.
* X - 0, 1, 2, 3, 6, 7.
*
* CALLS ABP, CBS.
SCW SA2 X3 GET HEADER WORD
BX6 X2
SA6 USCW SAVE UPDATED SECTOR CONTROL WORD
LX0 30
SA2 A5+B1
SB3 B4-LSLB/4
SA0 B4 MOD 10B OF CURRENT SECTOR
NZ X2,SCW0 IF NEXT BUFFER RESERVED
SB2 -B3 LIMIT TRANSFER TO PRESERVE ROOM FOR EOI
SCW0 BX0 X3+X0 SAVE (X3) AND (X0)
SA3 A5+3 GET *OUT*
BX6 X6-X6 CLEAR NUMBER OF PRUS TO TRANSFER
SX1 X3
SCW1 SA2 WCCB GET WORD COUNT OF *CIO* BUFFER
LX3 X6,B1
LX6 6
IX3 X3+X6 NUMBER OF WORDS TO TRANSFER
LX6 -6
SB4 X2
IX3 X2-X3
SA2 ABRA ABSOLUTE *RA*
ZR X3,SCW7 IF NO MORE DATA IN BUFFER
IX2 X2+X1
MX7 -12
ERX2 X2 GET HEADER CONTROL WORD
BX2 -X7*X2 BYTE COUNT
SX7 X2-500B
NZ X7,SCW4 IF NOT FULL BLOCK
SX3 X3-102B
NG X3,SCW7 IF NOT ENOUGH DATA IN BUFFER
SX6 X6+B1 INCREMENT NUMBER OF SECTORS TO TRANSFER
SB6 A0
SA2 USCW UPDATE SECTOR CONTROL WORD
SB4 LSLB/4
NE B6,B4,SCW1.1 IF PRU NOT IN NEXT CONTROL WORD
BX7 X2 STORE SECTOR CONTROL WORD IN BUFFER
SB6 B0
SA7 X0
SA2 A7+B1 GET NEXT SECTOR CONTROL WORD
SX3 B1 INCREMENT SECTOR CONTROL WORD ADDRESS
SA0 B0+
IX0 X0+X3
SCW1.1 SX7 10000B BUILD SECTOR MASK
LX7 B6
SA0 A0+B1
BX7 -X7*X2 CLEAR SHORT PRU FLAG
SX3 B2+
IX3 X3-X6
SA7 USCW SAVE UPDATED SECTOR CONTROL WORD
SX7 102B SET NUMBER OF WORDS TO ADVANCE
SB4 SCW1 SET RETURN ADDRESS FOR *ABP*
NZ X3,ABP IF MORE PRUS TO TRANSFER
SCW2 LX6 6
SB6 X6 WORD COUNT TO TRANSFER
SB2 B0 SET FULL BLOCK INDICATOR
LX6 -6
SCW3 MX1 -30
BX3 -X1*X0 RESTORE (X0) AND (X3)
SA6 NPTR SAVE NUMBER OF PRUS TO TRANSFER
AX0 30
EQ WTF23 RETURN TO MAIN WRITE LOOP
SCW4 PL X7,SCW6 IF BYTE COUNT .GT. 500B
SX7 5
PX7 X7
PX2 X2
NX7 X7
FX7 X2/X7
UX7,B6 X7
LX7 B6
SX2 X7+2
IX3 X3-X2
NG X3,SCW7 IF NOT ENOUGH DATA IN BUFFER
SB3 X7
SA2 USCW GET UPDATED SECTOR CONTROL WORD
SB4 LSLB/4
SX3 B1
SB6 A0
NE B6,B4,SCW4.1 IF PRU NOT IN NEXT CONTROL WORD
BX7 X2 STORE SECTOR CONTROL WORD IN BUFFER
SA0 B0
SA7 X0
SA2 A7+B1 GET NEXT SECTOR CONTROL WORD
IX0 X0+X3
SB6 B0
SCW4.1 LX3 12
LX3 B6
BX7 X2+X3 SET SHORT PRU FLAG
SA7 USCW SAVE UPDATED SECTOR CONTROL WORD
LX6 6
SB6 X6+B3 WORD COUNT OF TRANSFER
LX6 -6
SX6 X6+B1 INCREMENT NUMBER OF SECTORS TO TRANSFER
SB2 /CIO/EOR SET EOR STATUS
NZ B3,SCW3 IF DATA IN BLOCK
SB4 SCW5 SET RETURN ADDRESS FOR *ABP*
SX7 1 SET NUMBER OF WORDS TO ADVANCE
EQ ABP ADVANCE *OUT*
SCW5 SA2 ABRA *RA*
IX2 X2+X1
MX7 -4
ERX2 X2 GET TRAILER CONTROL WORD
MX7 -4
LX2 12
BX7 X7+X2
NZ X7,SCW3 IF NOT LEVEL 17B
SB2 /CIO/EOF SET EOF STATUS
EQ SCW3 RESTORE ENTRY CONDITIONS
SCW6 SX7 /CIOERR/BLE *BUFFER CONTROL WORD ERROR*
EQ RPC CALL PP CIO
* PROCESS INSUFFICIENT DATA IN CIO BUFFER.
SCW7 NZ X6,SCW2 IF SECTORS TO TRANSFER
SB6 SCW8 SET RETURN ADDRESS FOR *CBS*
EQ CBS CHECK BUFFER SPACE
SCW8 SX1 B4
IX7 X1-X7
NG X7,CPT IF MORE DATA IN BUFFER
EQ CMP COMPLETE WRITE PROCESSING
TITLE CIO PROCESSOR SUBROUTINES.
ABP SPACE 4,15
** ABP - ADVANCE BUFFER POINTERS.
*
* ENTRY (B4) = RETURN ADDRESS.
* (X1) = *IN* OR *OUT* POINTER TO BE ADVANCED.
* (X7) = NUMBER OF WORDS TO TRANSFER.
*
* EXIT (X1) = ADVANCED *IN* OR *OUT* POINTER.
* (X2) = *FIRST* POINTER IN BITS 0 - 17.
* (X7) = NUMBER OF WORDS TO TRANSFER AFTER WRAP-AROUND
* IF .GT. 0.
*
* USES A - 2.
* X - 1, 2, 7.
ABP SA2 A4-B1 GET *FIRST* AND *LIMIT*
SX2 X2 *LIMIT*
IX2 X2-X1 NUMBER OF WORDS IN BUFFER BEFORE WRAP
IX1 X1+X7 ADVANCE *IN* OR *OUT* POINTER
IX7 X7-X2 NUMBER OF WORDS TO TRANSFER AFTER WRAP
SA2 A4-1 GET *FIRST*
LX2 -24
SX2 X2
NG X7,RB4 IF NO WRAP AROUND
SX1 X2 SET *IN* OR *OUT* = *FIRST*
IX1 X1+X7 ADVANCE *IN* OR *OUT* POINTER
NZ X7,RB4 IF DATA IN SECOND PART
SX7 -B1 INDICATE NO SECOND PART OF TRANSFER
JP B4 RETURN
CBS SPACE 4,15
** CBS - CHECK BUFFER SPACE.
*
* ENTRY (B6) = RETURN ADDRESS.
*
* EXIT (X6) = (NPCB) = BUFFER SIZE IN PRUS.
* (X7) = (WCCB) = WORD COUNT OF DATA IN BUFFER
* IF WRITE, ROOM REMAINING IN BUFFER IF READ.
*
* ERROR TO *RPC* IF BUFFER ARGUMENT ERROR.
*
* USES A - 1, 2, 3, 6, 7.
* B - 2, 3.
* X - 0, 1, 2, 3, 6, 7.
CBS SX2 B1+B1 GET *OUT* FROM FET
IX2 X5+X2
ERX2 X2
SB2 X2
SA2 A4 GET MESSAGE BUFFER PARAMETERS
SX6 B2
SA3 A4-B1 GET FIRST AND LIMIT FROM MESSAGE BUFFER
LX2 59-6
SA1 A3-B1 GET *IN* FROM MESSAGE BUFFER
SX0 X3 LIMIT
AX3 24
SX3 X3 FIRST
SB3 X3
PL X2,CBS1 IF READ
SB2 X1 GET *OUT* FROM MESSAGE BUFFER
SX1 1 GET *IN* FROM FET
IX1 X5+X1
ERX1 X1
SX1 X1+
BX6 X1
LX1 24
CBS1 IX7 X6-X3 REVALIDATE IN OR OUT POINTER
NG X7,CBS5 IF POINTER .LT. FIRST
IX7 X6-X0
PL X7,CBS5 IF POINTER .GE. LIMIT
AX1 24
IX0 X0-X3 LIMIT - FIRST
LX1 24
SX3 B2
BX7 X1+X3 UPDATE MESSAGE BUFFER *IN* AND *OUT*
SA7 A3-B1
LX1 -24
IX7 X1-X3 *IN* - *OUT*
SX1 X1+1 *IN* + 1
NG X2,CBS2 IF WRITE FUNCTION
IX7 X3-X1 *OUT* - *IN* - 1
CBS2 PL X7,CBS3 IF NO BUFFER WRAP REQUIRED
IX7 X0+X7
CBS3 SA7 WCCB SAVE WORD COUNT
BX6 X7 CALCULATE BUFFER SIZE IN PRUS
LX2 59-5-59+6
AX6 6
PL X2,CBS4 IF NOT *READCW*/*WRITECW*
SX6 102B
PX1 X7
PX6 X6
NX6 X6
FX6 X1/X6
UX6 B2,X6
LX6 B2
CBS4 SA6 NPCB SAVE BUFFER SIZE IN PRUS
JP B6 RETURN
CBS5 SX7 /CIOERR/BUF *BUFFER ARGUMENT ERROR*
EQ RPC CALL PP CIO
CIM SPACE 4,25
** CIM - CALL I/O BUFFER MANAGER.
*
* ENTRY (B4) = RETURN ADDRESS.
* (X2) = 12/0,6/NBI,1/I,29/0,6/OP,6/BC.
* NBI = NUMBER OF ADDITIONAL WRITE BUFFERS
* TO INTERLOCK.
* I = SET IF CURRENT WRITE BUFFER INTERLOCKED.
* OP = I/O BUFFER MANAGER OPERATION.
* BC = BUFFER COUNT (OP = BMRD) OR
* INTERLOCK MODE (OP = BMVI).
*
* EXIT (X6) = FWA CONTROL BUFFER IF INTERLOCKED.
* (LBIA) = INTERLOCKED BUFFER ADDRESS IF NONZERO.
*
* ERROR TO *RCR2* IF I/O BUFFER BUSY.
* TO *RCR3* IF I/O BUFFER RECALL.
* TO *RPC* IF I/O ERROR, ADDRESS ERROR OR INACCESSIBLE
* DEVICE.
*
* USES A - 0, 1, 2, 3, 6, 7.
* B - 3.
* X - 0, 1, 2, 3, 6, 7.
*
* CALLS CMS.
*
* MACROS MONITOR.
CIM SA3 A4 GET FNT ORDINAL
MX0 -12
LX3 -24
BX6 -X0*X3
SA3 LBIA
BX7 X7-X7
SA7 A3 CLEAR BUFFER INTERLOCK ADDRESS
SX1 B7 GET CONTROL POINT NUMBER
LX1 18-7
BX6 X1+X6
LX6 12
BX6 X6+X2
MONITOR BFMM
SX2 X2+
SB3 X2-BMFO*100B
SX2 B1 GET FNT+2 WORD
LX1 -12
IX2 X4+X2
BX6 -X0*X1 I/O BUFFER LINK
ERX1 X2
BX7 X0*X1
BX7 X7+X6
EWX7 X2
BX7 X1
SA1 A5+
LX1 -12
NG B3,CIM0 IF NOT A FLUSH OPERATION
SX6 B0+
CIM0 NG X1,CIM2 IF RECALL STATUS
LX3 X1,B1
BX7 X7-X7
NG X3,RCR2 IF I/O BUFFER BUSY
AX3 56
SA1 A5+B1 CHECK FOR MULTIPLE WRITE BUFFERS
SB3 X3+ SAVE BUFFER MANAGER STATUS
SA0 CIM1 SET RETURN ADDRESS FOR *CMS*
NZ X6,CMS IF LINK RETURNED
ZR X1,CIM1.1 IF NO ALTERNATE BUFFER
BX6 -X0*X1
BX7 X0*X1
LX7 -12
SA7 A1
ERX1 X2
BX1 X0*X1
BX7 X1+X6 SET I/O BUFFER LINK IN FNT
EWX7 X2
SA1 A5+B1
SA2 A1+B1
NZ X1,CMS IF MORE ALTERNATE BUFFERS
BX7 X1
SA7 A2
BX7 X2
SA7 A1
EQ CMS CALCULATE FIRST SECTOR OF BUFFER
CIM1 LX6 CBTLS SET INTERLOCKED BUFFER ADDRESS
LX3 30
TX6 X6,CBT
BX6 X6+X3
SA6 A3+
BX7 X7-X7
CIM1.1 NZ B3,RPC IF INACCESSIBLE DEVICE OR ERROR
JP B4 RETURN
* CHECK FOR RECALL ON FIRST OR SECOND I/O BUFFER.
CIM2 SA1 A5+B1
ZR X1,RCR3 IF RECALL ON FIRST BUFFER
EWX7 X2
ZR X3,RCR3 IF FIRST BUFFER NOT INITIALLY INTERLOCKED
BX7 X3 RESET INTERLOCKED BUFFER ADDRESS
SA7 A3
BX7 X7-X7 CLEAR ORDINAL FROM MESSAGE BUFFER
SA7 A5+B1
EQ RCR3 ENTER RECALL STACK
CMS SPACE 4,15
** CMS - CALCULATE MOD 40B OF CURRENT SECTOR.
*
* ENTRY (A0) = RETURN ADDRESS.
*
* EXIT (X1) = MOD 40B OF CURRENT SECTOR.
* (X2) = LSLB = 40B.
* (X3) = FIRST SECTOR IN CURRENT I/O BUFFER.
*
* USES A - 1.
* B - 6.
* X - 0, 1, 2, 3.
CMS ERX1 X4 GET CURRENT SECTOR
MX0 -12
SX2 LSLB LOGICAL SECTORS PER I/O BUFFER
LX1 -12
BX1 -X0*X1
SB6 A0+ GET RETURN ADDRESS
BX3 X1
MX1 -LSLBS CALCULATE MOD 40B OF CURRENT SECTOR
BX1 -X1*X3
IX3 X3-X1 CALCULATE FIRST SECTOR
JP B6 RETURN
CPT SPACE 4,20
** CPT - CALCULATE PRUS TO TRANSFER.
*
* EXIT TO *CMP* IF NO PRUS TO WRITE.
* TO *RDF6* IF READ OPERATION.
* TO *WTF23* IF PRUS TO WRITE.
* TO *RPC* IF PRU SIZE ERROR.
* (B2) = STATUS (0 = FULL BLOCK, 4 = EOR,
* 10B = EOF, 14B = EOI).
* (B6) = WORD COUNT OF TRANSFER.
* (X0) = FWA DATA IN I/O BUFFER.
* (X2) = (USCW) = SECTOR CONTROL WORD (UPDATED FOR
* WRITE).
* (X3) = ADDRESS OF LAST ACCESSED SECTOR CONTROL WORD.
* (B3) = (X6) = (NPTR) = NUMBER OF PRUS TO TRANSFER.
* (SDTW) = 0, EXCEPT BIT 56 IS SET FOR SKIP DATA
* TRANSFER FLAG ON WRITE OPERATION.
* (USCW) = LAST ACCESSED SECTOR CONTROL WORD.
*
* USES A - 1, 2, 6, 7.
* B - 2, 3, 4, 6.
* X - 1, 2, 6, 7.
*
* CALLS CBS, CSA, SCW.
CPT12 ZR X6,CMP IF NO DATA IN BUFFER
CPT SB4 CPT1 SET RETURN ADDRESS FOR *CSA*
EQ CSA CALCULATE SECTOR ADDRESS IN I/O BUFFER
CPT1 SA2 A4
SB2 X7-LSLB COMPLEMENT OF MAXIMUM PRUS TO TRANSFER
BX7 X7-X7 CLEAR SKIP FLAG DATA TRANSFER ON WRITE
SB2 -B2 MAXIMUM PRUS TO TRANSFER
SA7 SDTW
LX2 59-6
SB4 B3+ MOD 10B OF CURRENT SECTOR
SA1 NPCB GET NUMBER OF PRUS IN BUFFER
PL X2,CPT4 IF READ/SKIP
LX2 59-5-59+6
SB3 X1
NG X2,SCW IF *WRITECW*
SB6 -B2
SX7 X1+B6
NG X7,CPT2 IF WILL NOT REACH LAST SECTOR IN BUFFER
SA1 A5+B1
SB3 B2
NZ X1,CPT2 IF ANOTHER BUFFER RESERVED
SB6 LSLB/4 LIMIT TRANSFER TO SAVE SPACE FOR EOI
LE B3,B6,CPT2 IF NO SWITCH OF SECTOR CONTROL WORD
SB3 B6-B4 DO NOT ALLOW SWITCH OF CONTROL WORDS
SB2 B6-B4
CPT2 SX7 B5 SAVE (B5)
PX7 X7,B3 SAVE (B3)
SB5 LSLB/4
CPT2.1 SB6 B5-B4 (B6) = REMAINING PRUS IN CONTROL WORD
GE B3,B6,CPT2.2 IF MULTIPLE SECTOR CONTROL WORDS
SB6 B3 SET PRUS
CPT2.2 SB3 B3-B6 DECREMENT PRUS
MX1 1
SB6 B6-B1
SA2 X3 READ SECTOR CONTROL WORD
AX1 B6 MASK TO CLEAR SHORT PRU FLAGS
SB6 B6+B4 SKIP PRUS ALREADY WRITTEN
SB6 B6+B1
LX1 B6
LX1 12
BX2 -X1*X2 CLEAR SHORT PRU FLAGS
ZR B3,CPT2.3 IF ALL PRUS PROCESSED
MX1 2 IGNORE DATA FLAGS
LX1 23-59
BX6 -X1*X2
SX3 X3+B1 INCREMENT TO NEXT SECTOR CONTROL WORD
SA6 A2 STORE SECTOR CONTROL WORD
SB4 B0
EQ CPT2.1 UPDATE NEXT WORD
CPT2.3 SB5 X7 RESTORE (B5)
UX7,B3 X7 RESTORE (B3)
SX7 14B GET TERMINATION CONDITION
SA1 A4
BX7 X7*X1
SX7 X7-/CIO/EOI
SB4 WTF23 SET RETURN ADDRESS
NZ X7,CPT3 IF EOR/EOF OPERATION
NZ B3,CPT8 IF SECTORS TO TRANSFER
SB6 CPT12 SET RETURN ADDRESS FOR *CBS*
EQ CBS CHECK BUFFER SPACE
* PROCESS SHORT BLOCK FOR EOR/EOF WRITE.
CPT3 SB2 B2-B3
ZR B2,CPT8 IF MAXIMUM PRU TRANSFER
MX7 1
LX6 X7,B6
LX6 13
SB2 B6-LSLB/4
NZ B2,CPT3.1 IF NOT END OF SECTOR CONTROL WORD
MX1 4 CLEAR PARITY ERROR AND IGNORE DATA FLAGS
LX1 23-59
BX6 -X1*X2
SX3 X3+B1 INCREMENT TO NEXT SECTOR CONTROL WORD
SA6 A2 STORE SECTOR CONTROL WORD
SA2 A2+B1 READ NEXT SECTOR CONTROL WORD
SX6 10000B
CPT3.1 BX2 X2+X6 SET SHORT PRU FLAG IN HEADER
SB3 B3+B1 INCREMENT NUMBER OF PRUS TO TRANSFER
SA1 WCCB GET WORD COUNT OF *CIO* BUFFER
SB6 X1 NUMBER OF WORDS TO TRANSFER
SA1 A4
SB2 /CIO/EOF SET EOF STATUS
LX1 59-56
LX7 56-59
NG X1,CPT9 IF PROCESSING EOF FOR *WRITEF*
SB2 /CIO/EOR SET EOR STATUS AND SKIP FLAG
SA7 SDTW SET SKIP FLAG
EQ CPT9 EXIT
* PROCESS READ AND SKIP OPERATIONS.
CPT4 LX2 59-56-59+6
SX7 B1 BUILD SHORT PRU MASK
LX7 12-1+59-19
LX7 B4
NG X2,CPT6 IF SKIP DATA TRANSFER
LX2 0-2-59+56
MX6 -2
BX6 -X6*X2 GET TERMINATION CONDITION
NZ X6,CPT5 IF NOT *RPHRLS*
SB2 B1 LIMIT TRANSFER TO ONE PRU
CPT5 SB4 -B2
SX6 X1+B4
PL X6,CPT6 IF ENOUGH ROOM IN BUFFER FOR ALL PRUS
SB2 X1+ TERMINATE TRANSFER ON FULL BUFFER
CPT6 SA2 X3
SB3 B2
SB4 RDF6 SET RETURN ADDRESS
* SCAN SHORT PRU FLAGS FOR EOR/EOF/EOI.
CPT7 LX7 1-59+19 CHECK EOR FLAG
BX1 X7*X2
NZ X1,CPT10 IF SHORT PRU
SB2 B2-B1
LX7 59-19
ZR B2,CPT8 IF ALL PRUS CHECKED
PL X7,CPT7 IF NOT END OF SECTOR CONTROL WORD
SA2 A2+B1 READ NEXT SECTOR CONTROL WORD
SX7 B1
SX3 A2
LX7 12-1+59-19
EQ CPT7 CHECK NEXT SECTOR CONTROL WORD
CPT8 SX6 B3
LX6 6
SB6 X6
SB2 B0
CPT9 SX6 B3 SAVE NUMBER OF PRUS TO TRANSFER
BX7 X2 SAVE SECTOR CONTROL WORD
SA6 NPTR
SA7 USCW
JP B4 EXIT
* PROCESS SHORT PRU ON READ/SKIP OPERATION.
CPT10 SB3 B3-B2 NUMBER OF FULL PRUS
SX6 B3
LX6 6
SB6 X6 WORD COUNT OF FULL PRUS
MX7 -12
SX1 X6+77B GET HEADER WORD FROM LAST DATA WORD
IX1 X0+X1
BX6 X0 SAVE (X0)
SB2 A0 SAVE (A0)
SA0 ERWB READ HEADER WORD
SX0 A0+
LX0 30
BX0 X0+X1
RE 1 TRANSFER ONE WORD OF DATA
RJ HHE HANG ON HALF-EXIT
SA0 B2 RESTORE (A0)
BX0 X6 RESTORE (X0)
SA1 ERWB GET HEADER WORD
LX1 12
SB3 B3+B1 TERMINATE TRANSFER ON SHORT PRU
BX7 -X7*X1
AX1 48
ZR X7,CPT11 IF EOF/EOI
SX6 X1-100B
SB6 B6+X1 ADD WORD COUNT OF SHORT PRU
SX7 /CIOERR/DRE DEVICE ERROR
PL X6,RPC IF PRU SIZE ERROR CALL *1MS*
NG X1,RPC IF PRU SIZE ERROR CALL *1MS*
SB2 /CIO/EOR SET EOR STATUS
EQ CPT9 EXIT
CPT11 SB2 /CIO/EOF SET EOF STATUS
NZ X1,CPT9 IF EOF
SB2 /CIO/EOI SET EOI STATUS
SB3 B3-1 RESET PRU COUNT TO PRECEED EOI
EQ CPT9 EXIT
CSA SPACE 4,15
** CSA - CALCULATE SECTOR ADDRESS IN I/O BUFFER.
*
* ENTRY (B4) = RETURN ADDRESS.
*
* EXIT (X0) = FWA DATA IN I/O BUFFER.
* (X3) = ADDRESS OF SECTOR CONTROL WORD IN I/O
* BUFFER.
* (X6) = (B3) = MOD 10B OF CURRENT SECTOR.
* (X7) = CURRENT SECTOR - FIRST SECTOR IN BUFFER.
*
* USES A - 2.
* B - 3, 6.
* X - 0, 2, 3, 6, 7.
*
* CALLS CSP.
CSA SB6 CSA1 SET RETURN ADDRESS FOR *CSP*
EQ CSP CALCULATE CURRENT SECTOR POSITION
CSA1 SX0 X3+IOLK
SA2 X0+
IX3 X3+X6 SECTOR CONTROL WORD ADDRESS
MX6 -24
BX0 -X6*X2 FWA I/O BUFFER
MX6 -3
BX6 -X6*X7 MOD 10B OF CURRENT SECTOR
SB3 X6
LX7 6
IX0 X0+X7 FWA CURRENT SECTOR IN I/O BUFFER
LX7 -6
JP B4 RETURN
CSP SPACE 4,15
** CSP - CALCULATE SECTOR POSITION IN I/O BUFFER.
*
* ENTRY (B6) = RETURN ADDRESS.
*
* EXIT (X1) = CURRENT SECTOR.
* (X3) = FWA CONTROL BUFFER.
* (X6) = (B3) = SECTOR CONTROL WORD INDEX IN CONTROL
* BUFFER.
* (X7) = CURRENT SECTOR - FIRST SECTOR IN BUFFER.
*
* USES A - 1, 3.
* B - 3.
* X - 1, 2, 3, 6, 7.
CSP SA3 LBIA GET FWA INTERLOCKED I/O BUFFER
ERX1 X4 GET CURRENT SECTOR
MX6 -12
BX2 X3
LX1 -12
AX2 30
BX1 -X6*X1
IX7 X1-X2 CURRENT SECTOR - FIRST SECTOR
MX2 -24
BX3 -X2*X3
SX6 X7 INCREMENT FOR SECTOR CONTROL WORD
AX6 CBTLS
SB3 X6
JP B6 RETURN
IMF SPACE 4,15
** IMF - ISSUE CPU MONITOR FUNCTION.
*
* ENTRY (B6) = RETURN ADDRESS.
* (X1) = FUNCTION CODE.
* (X6) = FUNCTION PARAMETERS.
*
* EXIT (X1) = FUNCTION REPLY.
* (X6) = 0.
*
* ERROR ADVANCE EXIT TO (B6)+1 IF FUNCTION REJECT.
*
* USES A - 1, 6.
* B - 6.
* X - 1, 6.
IMF LX1 -12 ENTER REQUEST IN PSEUDO OUTPUT REGISTER
BX6 X6+X1
SA6 A5+
XJ
IMF1 SA1 A5+ CHECK OUTPUT REGISTER
NG X1,IMF2 IF REQUEST REJECTED
LX1 59-56
NG X1,IMF2 IF REQUEST REJECTED
LX1 56-59
MX6 12
BX6 X6*X1
NZ X6,IMF1 IF NOT CLEARED
JP B6 RETURN
IMF2 SB6 B6+B1 ADVANCE EXIT FOR FUNCTION REJECT
JP B6 RETURN
SRA SPACE 4,15
** SRA - SET RANDOM ADDRESS FOR CURRENT TRACK/SECTOR.
*
* ENTRY (B4) = RETURN ADDRESS.
* (B4) = COMPLEMENT OF RETURN ADDRESS IF NOT TO
* CALL *RRI*.
*
* EXIT TO *CRA*.
* (X3) = 12/ CURRENT TRACK, 36/ 0, 12/ CURRENT SECTOR.
*
* USES A - 1.
* X - 1, 3, 6.
SRA ERX1 X4 GET CURRENT TRACK AND SECTOR
MX6 -12
LX1 -12
BX3 -X6*X1
LX1 -12
BX6 -X6*X1
LX6 -12
BX3 X3+X6
* EQ CRA COMPUTE RANDOM ADDRESS
CRA SPACE 4,25
** CRA - CONVERT/COMPUTE RANDOM ADDRESS.
*
* ENTRY (B4) = RETURN ADDRESS.
* (B4) = COMPLEMENT OF RETURN ADDRESS, IF TO RETURN
* RANDOM ADDRESS WITHOUT UPDATING FST/FET.
* (X3) = 0 IF POSITION TO EOI AND RETURN RANDOM
* ADDRESS FOR EOI.
* (X3) .GT. 0 IF RANDOM ADDRESS TO BE CONVERTED
* AND POSITIONED TO.
* (X3) .LT. 0 IF RETURN RANDOM ADDRESS FOR SPECIFIED
* TRACK AND SECTOR (12/TRACK, 36/0, 12/SECTOR).
*
* EXIT TO *SFP* FOR UPDATE OF FST CURRENT TRACK AND SECTOR
* TO POSITION FOR RANDOM ADDRESS.
* TO *RRI* TO SET RANDOM INDEX IN FET.
* (B2) = SECTORS PER TRACK.
* (X3) = RANDOM ADDRESS OF POSITION.
* (X7) = SECTORS ON FILE BEFORE CURRENT TRACK FOR *SRA*
* CALL.
*
* ERROR TO *RPC* IF INCORRECT RANDOM ADDRESS.
*
* USES A - 1, 2, 6.
* B - 2, 3, 4, 6.
* X - 0, 1, 2, 3, 6, 7.
CRA ERX1 X4 GET FST ENTRY
MX6 12
LX1 24
MX7 -2
BX0 X6*X1 EXTRACT CURRENT TRACK
LX1 -12
ZR X0,CRA12 IF FILE NOT USED
BX1 X6*X1 EXTRACT FIRST TRACK
SA2 A4+B1 GET MST ADDRESS AND SECTORS PER TRACK
SB6 B0 PRESET TRACK COUNT
LX2 -18
SA2 X2+TRLL SET TRT BASE ADDRESS
SB3 X2-4000B/4
SA2 A4+1 SET SECTORS PER TRACK
NZ X3,CRA3 IF NOT SKIP TO EOI
* PROCESS SKIP TO EOI.
CRA1 BX0 X6*X1 EXTRACT LINK
LX0 10
SB6 B6+B1
SA1 B3+X0 READ TRT WORD
LX0 2
BX2 -X7*X0 EXTRACT BYTE
LX2 2 BYTE * 4
LX3 X2,B1 BYTE * 8
IX2 X3+X2 BYTE * 12
SB2 X2+
LX1 X1,B2 POSITION TRACK BYTE
NG X1,CRA1 IF NOT END OF TRACK CHAIN
BX7 X1
SA1 A4+B1 GET SECTORS PER TRACK
SX3 B6-1
AX7 48
SX1 X1
IX3 X3*X1
IX3 X3+X7
CRA2 SB2 X1
PL B4,SFP IF SETTING FST
SB3 -B4
JP B3
* PROCESS POSITION TO RANDOM ADDRESS.
CRA3 NG X3,CRA7 IF RETURNING RANDOM ADDRESS
SX6 X2
SX2 X2 SECTORS PER TRACK
* IX2 X3/X2 SECTORS / SECTORS PER TRACK
PX2 X2
PX3 X3
NX2 X2
FX2 X3/X2
UX3 X3
UX2,B6 X2
LX2 B6
IX6 X2*X6 CALCULATE SECTOR NUMBER IN LAST TRACK
IX6 X3-X6
SA6 CRAA
MX6 12
SB6 X2+B1
* SCAN TRT.
CRA4 BX0 X6*X1 EXTRACT TRACK
LX1 12
LX0 10
BX1 -X7*X1 EXTRACT BYTE POSITION
LX1 2 BYTE * 4
LX2 X1,B1 BYTE * 8
IX2 X1+X2 BYTE * 12
SA1 B3+X0 READ TRT WORD
SB6 B6-1 DECREMENT TRACK COUNT
SB2 X2
LX1 X1,B2
ZR B6,CRA5 IF TRACK REACHED
NG X1,CRA4 IF NOT END OF TRACK CHAIN
CRA5 SA2 CRAA GET SECTOR NUMBER IN LAST TRACK
LX0 2 POSITION CURRENT TRACK
BX6 X6*X1 EXTRACT EOI SECTOR OR NEXT TRACK
SX7 /CIOERR/RAD * RANDOM ADDRESS NOT ON FILE.*
LX6 -48
IX6 X6-X2 EOI SECTOR - SECTOR NUMBER IN LAST TRACK
NG X6,RPC IF ADDRESS NOT ON FILE
SA1 A4+B1 GET SECTORS PER TRACK
BX7 X2
EQ CRA2 EXIT
* PROCESS RETURN RANDOM ADDRESS.
CRA7 SX6 X3 SAVE SECTOR
BX3 X3-X6 CLEAR SECTOR
SA6 CRAA
SX2 B0
MX6 12
EQ CRA9 ENTER LOOP
CRA8 LX0 10
SB6 B6+B1 INCREMENT TRACK COUNT
SA1 B3+X0 READ TRT WORD
LX0 2
BX2 -X7*X0 EXTRACT BYTE
LX2 2 BYTE * 4
LX0 X2,B1 BYTE * 8
IX2 X0+X2 BYTE * 12
CRA9 SB2 X2
LX1 X1,B2 POSITION TRACK BYTE
BX0 X6*X1 EXTRACT LINK
BX2 X3-X0 COMPARE TRACK
ZR X2,CRA11 IF TRACK FOUND
NG X1,CRA8 IF NOT EOI
* IF THIS FALL THROUGH CASE IS TAKEN, THE TRT MUST BE MASHED.
CRA10 SX7 /CIOERR/RAD * RANDOM ADDRESS NOT ON FILE.*
EQ RPC CALL PP CIO
CRA11 SA1 A4+B1 GET SECTORS PER TRACK
SA2 CRAA GET SECTOR NUMBER ON THIS TRACK
SX6 B6
SX1 X1
IX7 X1*X6 TRACKS * SECTORS PER TRACK
IX3 X2+X7 RANDOM ADDRESS
SB3 -B4
PL B4,RRI IF SET RANDOM ADDRESS IN FET
JP B3 RETURN
CRA12 NZ X3,CRA10 IF RANDOM ADDRESS SPECIFIED
R= X3,FSMS SET RANDOM ADDRESS
SB3 -B4
PL B4,RRI IF SET RANDOM ADDRESS IN FET
JP B3 RETURN
CRAA CON 0 TEMPORARY
SFP SPACE 4,15
** SFP - SET FST POSITION FOR RANDOM POSITIONING.
*
* ENTRY (B4) = RETURN ADDRESS.
* (X0) = VALUE TO SET FOR CURRENT TRACK.
* (X3) = RANDOM ADDRESS TO BE SET IN FET+6.
* (X7) = VALUE TO SET FOR CURRENT SECTOR.
*
* EXIT TO *RRI*.
*
* USES A - 1, 6.
* X - 0, 1, 2, 6, 7.
SFP ERX1 X4 GET FST ENTRY
MX6 -24
LX1 -12
BX2 -X6*X1 PREVIOUS TRACK AND SECTOR
BX6 X6*X1
BX6 X6+X7 SET CURRENT SECTOR
LX6 -12
BX6 X6+X0 SET CURRENT TRACK
LX6 24
EWX6 X4
* EQ RRI SET RANDOM INDEX IN FET
RRI SPACE 4,10
** RRI - RETURN RANDOM INDEX TO FET.
*
* ENTRY (B4) = RETURN ADDRESS.
* (X3) = RANDOM INDEX.
*
* USES A - 1, 6.
* X - 1, 2, 6.
RRI SA1 A4-B1 GET RANDOM FILE FLAG
PL X1,RB4 IF NOT RANDOM FILE
BX6 X3 STORE RANDOM INDEX IN FET+6
SX2 5
IX2 X5+X2
LX6 30
EWX6 X2
JP B4 RETURN
RBI SPACE 4,10
** RBI - RELEASE I/O BUFFER INTERLOCK.
*
* ENTRY (A0) = RETURN ADDRESS.
* (X2) = INTERLOCK VALUE (1 FOR READ/SKIP,
* 4000B FOR WRITE).
*
* USES A - 3, 6.
* B - 4.
* X - 2, 3, 6.
RBI SA3 LBIA CHECK IF I/O BUFFER INTERLOCKED
SB4 A0 SET RETURN ADDRESS
LX2 48
ZR X3,RB4 IF NO BUFFER INTERLOCKED
SX6 B0+
SA6 A3+ CLEAR BUFFER INTERLOCK ADDRESS
SA6 CHRV CLEAR CONTROL FLAGS
+ SA3 X3+LSLK **** PERFORM IN ONE WORD ****
IX6 X3-X2 **** PERFORM IN ONE WORD ****
SA6 A3 **** PERFORM IN ONE WORD ****
+ NG X6,* IF DATA INTEGRITY ERROR - STOP
JP B4 RETURN
UAC SPACE 4,15
** UAC - UPDATE ACCOUNTING AND RELEASE TRACK INTERLOCK.
*
* ENTRY (A0) = RETURN ADDRESS.
* (B6) = RETURN ADDRESS IF CLEAR TRACK INTERLOCK REJECT.
* (X7) .LT. 0 IF *UADM* TO BE ISSUED BY *PPCX*.
* (X7) BIT 0 = 0 IF TO RESTART CPU FOR NON-AUTO
* RECALL *CIO* CALL.
*
* EXIT (X2) = RECALL CPU FLAG IF *UADM* TO BE ISSUED LATER.
* (X6) = (B4) = NUMBER OF *UADM* PARAMETER WORDS IN
* MESSAGE BUFFER IF *UADM* TO BE ISSUED LATER.
*
* USES A - 0, 1, 2, 3, 6.
* B - 4, 6.
* X - 0, 1, 2, 3, 6, 7.
*
* MACROS MONITOR.
* CHARGE FOR PRUS TRANSFERRED.
* UPDATE CURRENT RANDOM INDEX IN FET+6 FOR RANDOM FILE.
UAC SA3 PRUC GET PRU COUNT
SX0 X3
LX0 IMPT
SA1 UACC INCREMENT ACCOUNTING
ZR X0,UAC1 IF NO DATA TRANSFERRED
IX6 X1+X0
SA6 A1
MX1 1 SET DATA TRANSFERRED FLAG
LX1 54-59
SA2 A4 GET MESSAGE BUFFER PARAMETERS
BX6 X2+X1
SA6 A4+
SA1 A4-1 GET RANDOM FILE FLAG
ZR X5,UAC1 IF NO FET ADDRESS
PL X1,UAC1 IF NOT RANDOM FILE
SX1 5
LX0 -IMPT
IX1 X5+X1
AX3 30
IX0 X0-X3
ERX2 X1 UPDATE RANDOM INDEX IN FET
LX0 30
IX6 X2+X0
EWX6 X1
* CLEAR TRACK INTERLOCK.
UAC1 SA3 A4 CHECK TRACK INTERLOCK
LX3 59-58
PL X3,UAC3 IF TRACK NOT INTERLOCKED
ERX1 X4 GET EQUIPMENT AND FIRST TRACK
SX6 CTIS*10000B CLEAR TRACK INTERLOCK
MX2 24
BX1 X2*X1
LX1 -12
BX6 X6+X1
SX3 B6+ SAVE RETURN ADDRESS FOR REJECT
MONITOR STBM
AX1 36
MX6 -59 CLEAR TRACK INTERLOCK FLAG
ZR X1,UAC2 IF TRACK INTERLOCK CLEARED
+ SA0 X3 SET REJECT RETURN ADDRESS
SX7 X7 FORCE *UADM* TO BE ISSUED
EQ UAC3 DO NOT CLEAR TRACK INTERLOCK FLAG
UAC2 SA3 A4 GET MESSAGE BUFFER PARAMETERS
LX6 58-59
BX6 -X6*X3 CLEAR TRACK INTERLOCK FLAG
SA6 A4
* BUILD *UADM* PARAMETER WORDS FOR ACCOUNTING CHARGE
* AND FILE SIZE CHANGES.
UAC3 SA1 UACC GET ACCOUNTING CHARGE
MX0 -24
LX7 49-0
BX3 -X0*X1
BX6 X1
SA1 A5-1 GET AUTO RECALL FLAG
MX2 1
LX1 49-41
LX2 49-59
BX2 -X7*X2
BX2 -X1*X2
LX7 0-49
SB4 B0+
ZR X3,UAC4 IF NO ACCOUNTING UPDATE REQUIRED
SA6 A5+B1
SB4 B1
UAC4 SA3 PCMS
ZR X3,UAC5 IF NO PRU INCREMENT/DECREMENT
SA1 UAMI GET MASS STORAGE CHANGE PARAMETERS
SB4 B4+1
BX6 X1+X3
SA6 A5+B4
PL X3,UAC5 IF TRACKS REQUESTED
SX6 CICS-CDCS INCREMENT MASS STORAGE PRU-S
LX6 48
IX1 X1+X6
BX6 -X3+X1
SA6 A5+B4
UAC5 SB6 A0 SET RETURN ADDRESS
SX6 B4 SET *UADM* PARAMETER COUNT
ZR B4,RB6 IF *UADM* NOT REQUIRED
NG X7,RB6 IF *UADM* TO BE ISSUED LATER
BX6 X6+X2 SET RECALL CPU FLAGS
LX6 12
SX3 1
BX6 X6+X3 SET NO DROP FLAG
LX6 24
MONITOR UADM,B6
WEI SPACE 4,10
** WEI - WRITE EOI/RELEASE BUFFER INTERLOCKS.
*
* ENTRY (A0) = RETURN ADDRESS.
*
* EXIT TO *RBI*.
*
* USES A - 1, 2, 3, 6.
* B - 4, 6.
* X - 0, 1, 2, 3, 6, 7.
*
* CALLS CIM, CSA, CSP, IDE, RBI.
*
* MACROS MONITOR.
WEI SA2 A4+ GET MESSAGE BUFFER PARAMETERS
SB4 0
LX2 59-6
MX3 -12
PL X2,WEI8 IF NOT WRITE FUNCTION
WEI1 SB4 B4+B1
SA1 A5+B4 GET MULTIPLE WRITE BUFFER ORDINALS
ZR X1,WEI3 IF NO MORE WRITE BUFFERS
WEI2 BX6 -X3*X1
LX6 CBTLS
MX0 1
AX1 12
+ TA2 X6+LSLK,CBT **** PERFORM IN ONE WORD ****
IX7 X2-X0 **** PERFORM IN ONE WORD ****
SA7 A2 **** PERFORM IN ONE WORD ****
NZ X1,WEI2 IF MORE BUFFERS TO RELEASE
LE B4,B1,WEI1 IF MORE INTERLOCK WORDS
WEI3 SA1 NTKP GET OLD EOI SECTOR
SB4 WEI4 SET RETURN ADDRESS FOR *CSA*
SA2 A4+B1 CHECK IF EOI WRITE REQUIRED
BX0 X1 SAVE CURRENT SECTOR
NG X2,CSA IF WRITE EOI REQUIRED
SA2 PCMS GET MASS STORAGE PRU CHANGE
ZR X2,WEI7 IF NO *RTCM* ISSUED
EQ WEI5 RESET EOI IN TRT
WEI4 SA2 X3+
SB6 X6
MX6 2
SX7 X7-30B
ERRNZ LSLB-40B CODE DEPENDS ON BUFFER SIZE
LX6 23-59
BX2 -X6*X2 CLEAR DATA FLAGS
NG X7,WEI4.1 IF NOT IN LAST CONTROL WORD OF BUFFER
MX6 48
BX6 X6*X2 CLEAR LINK
WEI4.1 SX7 10000B BUILD SHORT PRU MASK
LX7 B6
BX6 X2+X7
SA6 X3 STORE HEADER
SX6 1
IX2 X4-X6 STORE FNT ENTRY IN EOI SECTOR
ERX2 X2
BX6 X2
SA6 ERWB SET UP BUFFER FOR WRITE
ERX2 X4 STORE FST ENTRY IN EOI SECTOR
BX6 X2
SA6 A6+B1
SB4 A0 SAVE (A0)
SA2 PDTL STORE PACKED DATE AND TIME IN EOI SECTOR
BX7 X2
SA7 A6+B1
SA0 A6-B1 FWA TO BEGIN TRANSFER FROM (*ERWB*)
SX6 A0
LX6 30
BX0 X0+X6 30/FWA FROM, 30/FWA I/O BUFFER DATA (TO)
WE 3
RJ HHE HANG ON HALF-EXIT
MX7 -6
BX6 X6-X6
IX0 X0-X7
SA6 A0
WE 1
RJ HHE HANG ON HALF-EXIT
SA0 B4 RESTORE (A0)
SB4 WEI5 RETURN ADDRESS FOR *IDE*
BX0 X1 SAVE CURRENT SECTOR
SB6 IDE *CSP* RETURN ADDRESS
EQ CSP CALCULATE SECTOR POSITION
WEI5 ERX2 X4 GET EQUIPMENT AND CURRENT TRACK
SB7 X6+ RESTORE (B7)
MX6 12
MX7 11
BX6 X6*X2 EQUIPMENT
LX7 -25
BX7 X7*X2 CURRENT TRACK
LX6 -12
BX6 X6+X7
* SET THE CHECKPOINT BIT FOR THE DEVICE WHEN EXTENDING *LIFT*
* OR *PMFT* FILES. CHECKPOINT IS SET FOR *LIFT* TO ENSURE
* THAT THE DEVICE IS CHECKPOINTED AFTER THE INDIRECT ACCESS
* PERMANENT FILE CHAIN IS EXTENDED BY *CPUPFM*. EQUIVALENT
* LOGIC IS NOT NEEDED IN *1MS* BECAUSE INDIRECT ALLOCATION
* AND DEVICE CHECKPOINTING IS COMPLETELY MANAGED WITHIN *PFM*
* FOR NON-BUFFERED DEVICES.
SX2 B1 CHECK FILE TYPE
IX2 X4-X2
ERX2 X2
LX2 -6
MX7 -6
BX2 -X7*X2
SX7 X2-LIFT
ZR X7,WEI5.1 IF *LIFT* FILE
SX7 X2-PMFT
NZ X7,WEI6 IF NOT *PMFT* FILE
WEI5.1 MX7 1 SET DEVICE CHECKPOINT
LX7 -12
BX6 X6+X7
WEI6 LX0 12 EOI SECTOR
BX6 X6+X0
MONITOR DTKM DROP TRACKS AND SET EOI
SA2 PCMS UPDATE MASS STORAGE PRU CHANGE
IX6 X2-X1
SA6 A2
WEI7 MX2 1 SET INTERLOCK VALUE
LX2 12
EQ RBI RELEASE BUFFER INTERLOCK
WEI8 SA3 LBIA CHECK I/O BUFFER INTERLOCKED
SB4 A0+
ZR X3,RB4 IF NO BUFFER INTERLOCKED
SX1 B1 GET I/O BUFFER LINK
IX1 X4+X1
ERX1 X1
MX6 -12
BX6 -X6*X1
SX2 B1 SET INTERLOCK VALUE
ZR X6,RBI IF NO LINK IN FNT ENTRY
SB6 WEI9 SET RETURN ADDRESS FOR *CSP*
EQ CSP CALCULATE SECTOR POSITION
WEI9 SA1 CHRV ALLOW ACCESS TO OFF/SUSPECT DEVICE
SX2 EPNS
BX6 X2+X1
SA6 A1
SX2 BMRB*100B RELEASE READ BUFFER
NG X7,CIM IF NEXT SECTOR NOT IN SAME BUFFER
SX7 X7-LSLB
PL X7,CIM IF NEXT SECTOR NOT IN SAME BUFFER
SX2 B1+ SET INTERLOCK VALUE
EQ RBI RELEASE BUFFER INTERLOCK
ENDBLK
BLOCK IHPFMD,(NON-819 INTERRUPT HANDLER.)
BIO SPACE 4,15
** BIO - PROCESS *BIOM* MONITOR FUNCTION.
*
* ENTRY (A5) = OUTPUT REGISTER ADDRESS.
* (X5) = OUTPUT REGISTER.
*
* USES X - ALL.
* A - ALL.
* B - 3, 4, 5.
*
* CALLS /BUFIO/DLB, /BUFIO/SBR,
* /MONITOR/HNG, /MONITOR/PPRX.
BIO LX5 -24 POSITION *PUT* ORDINAL
MX0 -12
BX6 -X0*X5
AX1 36 EXTRACT SUB-FUNCTION
ZR X6,/MONITOR/HNG IF INVALID *PUT* ORDINAL
TX2 X6-1,-NRUN
PL X2,/MONITOR/HNG IF INVALID *PUT* ORDINAL
LX6 PUTLS
SX3 A5 OUTPUT REGISTER ADDRESS
TA4 X6+PILL,PUT
BX7 -X0*X4 CHECK UNIT INTERLOCK
IX2 X7-X3
ZR X1,TBIO IF *SUIS* REQUEST
ERRNZ SUIS CODE DEPENDS ON VALUE
NZ X2,/MONITOR/HNG IF NOT ASSIGNED THIS PP
SX6 A4-PILL+UNCT
SB4 X1-TBIOL
SA6 PUTA SAVE *PUT* ADDRESS
LX5 -48
MX2 -11
JP TBIO+TBIOL+B4 EXIT TO PROCESSOR
* ENTER PROCESSOR WITH -
*
* (A4) = ADDRESS OF *PILL* WORD.
* (A6) = ADDRESS OF *PUTA*.
* (X0) = 48 BIT MASK.
* (X2) = 49 BIT MASK.
* (X4) = *PILL* WORD OF *PUT* ENTRY.
* (X5) = PP OUTPUT REGISTER SHIFTED LEFT -12.
* (X6) = *PUT* ADDRESS OF *UNCT* WORD.
* (X7) = BYTE 4 OF *PILL* WORD.
TBIO BSS 0
BSS 0 FORCE UPPER
SUIS EQU *-TBIO
SUIS EQU //SUIS ENSURE SUBFUNCTION CORRECT
LX7 36
MX0 1
EQ BIO10 SET UNIT INTERLOCK
BSS 0 FORCE UPPER
DCBS EQU *-TBIO
DCBS EQU //DCBS ENSURE SUBFUNCTION CORRECT
SX7 BIO24
TEQ (/PROBE/IOS,PROBE,/IHPFMD/BIO20) UPDATE *PROBE* TABLE
BSS 0 FORCE UPPER
SETS EQU *-TBIO
SETS EQU //SETS ENSURE SUBFUNCTION CORRECT
SA3 X6
LX3 -12
EQ BIO30 SET ERROR STATUS IN *CBT*
BSS 0 FORCE UPPER
IDSS EQU *-TBIO
IDSS EQU //IDSS ENSURE SUBFUNCTION CORRECT
SX7 BIO40
EQ BIO20 INHIBIT DATA STREAMING
BSS 0 FORCE UPPER
CETS EQU *-TBIO
CETS EQU //CETS ENSURE SUBFUNCTION CORRECT
SA1 X6
BX2 -X0*X1
EQ BIO60 CLEAR ERROR STATUS FROM I/O QUEUE
BSS 0 FORCE UPPER
TBIOL EQU *-TBIO
* SET UNIT INTERLOCK.
BIO10 NZ X7,/MONITOR/PPR1 IF *PUT* ENTRY INTERLOCKED
BX6 X4+X3
SA6 A4 SET INTERLOCKING PPOR ADDRESS
SA2 A4-PILL+UNCT
BX6 X0+X2 SET UNIT INTERLOCK FLAG
SA6 A2
EQ /MONITOR/PPR1 EXIT
* DELINK CONTROL BUFFER(S) / INHIBIT DATA STREAMING.
BIO20 SA7 PADD SAVE PROCESSOR ADDRESS
BX6 -X2*X5
ERRNZ CBCT-PUTA-2 CODE DEPENDS ON VALUES
SA6 A7+B1 BUFFER COUNT
BIO21 SA4 CBCT DECREMENT BUFFER COUNT
SX6 X4-1
ZR X4,BIO27 IF REQUEST COMPLETE
SA1 PUTA
SA2 X1 FETCH *UNCT* WORD FROM *PUT*
MX0 -12
BX5 X2 PRESERVE (X2) FOR *DLB*
SA6 A4
SA3 A4-B1 RETRIEVE PROCESSOR ADDRESS
AX5 12
SB4 X3
BX7 -X0*X5 EXTRACT CURRENT CONTROL BUFFER ORDINAL
SX6 B1
LX7 CBTLS
ZR X7,/MONITOR/HNG IF I/O QUEUE EMPTY
TA4 X7+IOLK,CBT
JP B4 EXIT TO PROCESSOR
* DELINK CONTROL BUFFER(S).
BIO24 SA3 STAT
NZ X3,BIO25 IF CALLED VIA *SETS* SUBFUNCTION
SA3 A4+B1 READ *HSLK* WORD
ERRNZ HSLK-IOLK-1 CODE DEPENDS ON VALUE
MX0 -48
BX7 -X0*X3 CLEAR ERROR DATA
SA7 A3
BIO25 SA3 A4-IOLK
LX4 -57 EXTRACT WRITE FLAG
BX7 X6*X4 WRITE FLAG
ERRNZ HSCT-1 CODE DEPENDS ON VALUE
SA4 X1+B1
IX7 X1+X7 ACCUMULATOR ADDRESS + WRITE FLAG
ERRNZ RDST+1-WTST INDICES MUST BE CONSECUTIVE
SA1 X7+RDST ACCUMULATOR WORD
AX4 54 PHYSICAL SECTORS PER BUFFER
SB3 BIO26 *DLB* RETURN ADDRESS
IX6 X1+X4 INCREMENT ACCUMULATOR
LX6 59-35
NG X6,/BUFIO/DLB IF ACCUMULATOR OVERFLOW
LX6 35-59
SA6 A1 UPDATE ACCUMULATOR
EQ /BUFIO/DLB DELETE BUFFER
BIO26 SB3 BIO21 *SBR* RETURN ADDRESS
EQ /BUFIO/SBR SET BUFFER RECALL
BIO27 SA5 A5 CHECK INTERLOCK FLAG
LX5 59-23
PL X5,BIO29 IF NOT CLEARING UNIT INTERLOCK
BIO28 SA4 PUTA
MX1 -59 SET MASKS
MX0 -12
SA3 X4-UNCT+PILL FETCH PP INTERLOCK WORD
BX6 X0*X3
SA6 A3 CLEAR PP INTERLOCK
SA4 X4+
BX6 -X1*X4 CLEAR UNIT BUSY
SA6 A4
BIO29 BX7 X7-X7 CLEAR OUTPUT REGISTER IMAGE
SA2 STAT SET REPLY STATUS
SA7 A2
BX7 X2
SA7 A5
EQ /MONITOR/PPRX RETURN
* PROCESS I/O ERROR.
BIO30 BX2 -X0*X3 EXTRACT CURRENT *CBT* ORDINAL
LX2 CBTLS *CBT* INDEX
TA4 X2+HSLK,CBT
MX7 -48
LX5 12
BX7 -X7*X4 CLEAR *HSLK* ERROR PROCESSING DATA
LX3 -24
BX3 -X0*X3 EST ORDINAL
CX1 X3,EST CONVERT EST ORDINAL TO OFFSET
TA1 X1+EQDE,EST
BX6 -X0*X5 EXTRACT ERROR CODE
MX2 2
SA3 A5-B1 READ INPUT REGISTER
BX2 X2*X4
LX1 24+3 POSITION SECONDARY CHANNEL BYTE
SB3 X6-DDFE
BX3 -X0*X3
NG X2,BIO35 IF I/O ERROR FLAG ALREADY SET
LX4 1
LX6 48
NG X4,BIO32 IF DEVICE VERIFICATION CALL
LX0 48+3
MX4 3 FORM CHANNEL MASK
BX0 X4+X0
BX5 -X0*X1 CHECK SECONDARY CHANNEL ACCESSIBLE
SB5 X5-4
LX1 -12
BX4 -X0*X1 PRIMARY CHANNEL DATA
SB4 X4-4
AX4 48+3 PRIMARY CHANNEL
BX1 X4-X3
AX5 48+3 SECONDARY CHANNEL
ZR X1,BIO31 IF CALLER ON PRIMARY CHANNEL
NZ B4,BIO32 IF PRIMARY CHANNEL UNAVAILABLE
SX3 X4 SELECT PRIMARY CHANNEL
EQ BIO32 CONTINUE
BIO31 NZ B5,BIO32 IF SECONDARY CHANNEL UNAVAILABLE
SX3 X5+ SELECT SECONDARY CHANNEL
BIO32 LX3 54 CHANNEL
MX0 1 I/O ERROR FLAG
BX0 X2+X0 I/O ERROR + FORCED CHANNEL SELECTION FLAGS
LX4 X2,B1 POSITION FORCED CHANNEL SELECTION
SA1 A4-HSLK+PAD4
MX5 -54
BX6 X6+X0 COMBINE FLAGS AND ERROR CODE
BX1 -X5*X1 CLEAR CHANNEL FIELD
BX6 X7+X6 MERGE ERROR DATA INTO *HSLK*
SA6 A4+
BX7 X1+X3 MERGE CHANNEL INTO *PAD4*
SA7 A1+
NG X4,BIO33 IF DEVICE VERIFICATION CALL
NZ B3,BIO28 IF ERROR NOT DIAGNOSTIC FAILURE
BIO33 SA5 A5 REREAD OUTPUT REGISTER
SX7 B1
LX7 23-0 FORCE CLEARING OF *PUT* INTERLOCK
BX6 X5+X7
SA6 A5
MX2 -11
LX7 36-23 SET REPLY STATUS
SX5 B1
SA7 STAT
JP TBIO+DCBS DELINK CURRENT CONTROL BUFFER
BIO35 SA4 A4-HSLK+IOLK
LX6 48 POSITION ERROR CODE
BX6 X2+X6 ERROR CODE + FORCED CHANNEL SELECTION
LX3 54 POSITION CHANNEL
SA1 A4-IOLK+PAD4
BX6 X6+X7 MERGE ERROR DATA INTO *HSLK*
MX5 -54
BX1 -X5*X1 CLEAR CHANNEL FIELD
BX7 X1+X3 MERGE CHANNEL INTO *PAD4*
LX4 59-57
SA6 A4-IOLK+HSLK UPDATE *HSLK*
SA7 A1+ UPDATE *PAD4*
PL X4,BIO33 IF READ OPERATION
SB3 B3+DDFE-PARE
ZR B3,BIO33 IF MEDIA ERROR
BX3 X6
LX3 59-58
NG X3,BIO33 IF DEVICE VERIFICATION REQUEST
SA3 PUTA
LX4 57-59-24 POSITION FORWARD LINK FOR I/O QUEUE
SA1 X3+ FETCH *UNCT* WORD FROM *PUT*
BX2 -X0*X4
LX0 12
SB6 BIO37
BX3 -X0*X1 CURRENT CBT ORDINAL
LX3 CBTLS-12
TA3 X3+LSLK,CBT
MX6 -6
MX5 -24
LX6 18
BX5 -X5*X3 RECALL DATA
BX6 -X6*X3 RECALL CONTROL POINT NUMBER
ZR X5,BIO36 IF RECALL NOT SET
ZR X6,BIO33 IF PP IN RECALL
BIO36 BX6 X0*X1 CLEAR CURRENT BUFFER ORDINAL
EQ /BUFIO/SCB SELECT CURRENT BUFFER
BIO37 SA6 A1+
SX7 B1 SET REPLY STATUS
LX7 36-0
SA7 STAT
EQ BIO28 CLEAR *PUT* INTERLOCK
* INHIBIT DATA STREAMING.
BIO40 LX6 53-0
BX6 X6+X4 SET INHIBIT FLAG
SA6 A4+
EQ BIO21 PROCESS NEXT REQUEST
* CLEAR ERROR STATUS FROM UNIT I/O QUEUE.
BIO60 ZR X2,BIO28 IF QUEUE EMPTY
MX5 -48
LX2 CBTLS
BIO61 TA4 X2+HSLK,CBT CLEAR ERROR STATUS
BX6 -X5*X4
SA6 A4 UPDATE *CBT* ENTRY
SA3 A4-B1
ERRNZ IOLK+1-HSLK CODE DEPENDS ON VALUE
LX3 -24
BX2 -X0*X3 EXTRACT FORWARD LINK
LX2 CBTLS
NZ X2,BIO61 IF NOT END OF QUEUE
BX3 -X0*X1
LX1 -12 POSITION *UNCT* WORD
BX4 -X0*X1
NZ X4,BIO28 IF CURRENT *CB* PRESENT
BX6 X1+X3
LX6 12 SET CURRENT *CB* = FIRST
SA6 A1
EQ BIO28 CLEAR *PUT* INTERLOCK
PUTA BSS 3 *PUT* ADDRESS OF *UNCT* WORD
PADD EQU PUTA+1 PROGRAM TRANSFER ADDRESS
CBCT EQU PADD+1 CONTROL BUFFER COUNT
STAT CON 0 REPLY STATUS
RPP SPACE 4,15
** RPP - RECALL PSEUDO-PP.
*
* ENTRY (A3) = CONTROL BUFFER ADDRESS.
* (A5) = OUTPUT REGISTER ADDRESS.
*
* EXIT (X5) = OUTPUT REGISTER.
* TO *BIO*.
*
* USES X - 1, 5, 7.
* A - 1, 5, 7.
* B - 7.
*
* CALLS /BUFIO/PRQ.
RPP TX1 A3,-CBT COMPUTE CONTROL BUFFER ORDINAL
SX7 A5 SAVE PP OR ADDRESS
AX1 CBTLS
SA7 /BUFIO/IPPA
EQ /BUFIO/PRQ PROCESS REQUEST QUEUE
RPP1 SA5 /BUFIO/IPPA RESTORE (A5)
SX7 -B1 RESET *IPPA*
SA5 X5
SA7 /BUFIO/IPPA
EQ BIO21 PROCESS NEXT REQUEST
ENDBLK
BLOCK IH819,(INTERRUPT HANDLER - 819/CYBER 176.)
SPACE 4,10
** DATA.
NRQT BSS MMXC/2+1 NEXT REQUEST(S)
RTCI BSS 1 INTERRUPT START TIME
PPE SPACE 4,15
** PPE - EXTENSION FOR BUFFER MANAGER RECALL.
*
* ENTRY (A1) = ADDRESS OF *PSD*.
* (X1) = CONTENTS OF *PSD*.
*
* EXIT TO */MONITOR/MTRX* IF NO MORE REQUESTS TO PROCESS.
* TO *PRQ* IF TO PROCESS PSEUDO PP REQUEST.
*
* CALLS /BUFIO/PRQ.
PPE MX2 -57 CLEAR STEP CONDITION
BX6 -X2*X1
SX7 B7
LX6 39-59
SA7 /BUFIO/IPPA SAVE (B7)
SA6 A1+
PPE1 SA2 BMRI
ZR X2,PPE2 IF NO REQUESTS PRESENT
SX7 X2-1
SA1 TBMR+X7 GET REQUEST
SA7 A2 UPDATE REQUEST INDEX
EQ /BUFIO/PRQ PROCESS REQUEST QUEUE
PPE2 SA1 /BUFIO/IPPA RESTORE (B7)
SX7 -B1
SB7 X1
SA7 A1 RESET SAVE WORD
EQ /MONITOR/MTRX EXIT
XJ2 SPACE 4,10
** XJ2 - EXTENSION TO CHECK STEP CONDITION ON RA+1 REQUEST
*
* ENTRY (B2) = EXCHANGE PACKAGE ADDRESS
*
* EXIT TO */BUFIO/PPE* IF STEP MODE SET
* TO */MONITOR/XJ2* IF STEP MODE NOT SET
XJ2 SA1 B2+3 GET *PSD*
LX1 59-39
PL X1,/MONITOR/MTR IF NOT STEP MODE
EQ PPE PROCESS BUFFER MANAGER RECALL
TBMR SPACE 4,10
** BUFFER MANAGER RECALL REQUESTS ARE PASSED FROM THE 819
* INTERRUPT HANDLER IN THE FOLLOWING TABLE. THERE IS A
* POINTER (INDEX) TO THE NEXT AVAILABLE ENTRY IN *BMRI*,
* WHICH IS ADJUSTED EACH TIME THE TABLE IS ACCESSED.
TBMR BSS BMRL BUFFER MANAGER RECALL REQUEST TABLE
BMRI CON 0 REQUEST INDEX
RIO SPACE 4,10
** RIO - RESTART 819 I/O.
*
* EXIT TO /BUFIO/IOCX.
*
* USES X - 1, 2, 5, 6, 7.
* A - 1, 2, 5, 6, 7.
* B - 6, 7.
*
* CALLS IOA.
RIO SA1 RIOA PRESET *IOA* FOR RECOVERY PROCESS
SA2 IOA3
BX6 X1
BX7 X2
SA6 A2
SA7 A1
SX7 B0+ PRESET *CCT* INDEX
SA7 RIOB
RIO1 LX7 CCTLS
SB7 B0 INITIALIZE UNIT NUMBER
TA5 X7+CCNT,CCT SET *CCT* ENTRY ADDRESS
SB6 7 SET UNIT COUNT
BX7 X5
EQ IOA1 ENTER *IOA* TO PROCESS CHANNEL
RIO2 SA1 RIOB GET *CCT* INDEX
SX7 X1+B1
SA7 A1
SX1 X7-NCCT
NG X1,RIO1 IF NOT END OF *CCT*
SA1 RIOA RESTORE *IOA*
BX6 X1
SA6 IOA3
EQ /BUFIO/IOCX RETURN
RIOA EQ RIO2 *IOA* RETURN ADDRESS
RIOB CON 0 *CCT* INDEX
CLU SPACE 4,10
** CLU - CLEAR UNIT FLAGS.
*
* ENTRY (A2) = *PUT* ENTRY ADDRESS.
* (B2) = CHANNEL NUMBER.
*
* USES X - ALL.
* A - 2, 4, 5, 6, 7.
* B - 3, 5.
*
* CALLS INR, SAA.
CLU SX6 B2 CHANNEL NUMBER
MX0 -59
LX6 CCTLS/2
MX7 6
TA4 X6,CCT READ CHANNEL CONTROL TABLE
SA2 A2 GET *PUT* ENTRY
LX7 -6
SA5 A4+B1 READ CHANNEL CONTROL TABLE
ERRNZ CCNT-CREQ-1 INDEXES MUST BE CONSECUTIVE
BX3 X7*X2 UNIT NUMBER
BX6 -X0*X4 CLEAR CHANNEL BUSY
LX3 12
SX1 B1
SB5 X3-60D
IX6 X6-X1 DECREMENT ACTIVE COUNT
AX0 B5
MX1 -12
BX7 -X0*X5 CLEAR UNIT REQUESTED FLAG
LX1 12
SA7 A5
BX0 -X1*X2 CURRENT REQUEST
SB3 CLU2 *INR* RETURN ADDRESS
LX1 12
BX3 -X1*X4 RETRY REQUEST
BX6 X1*X6 CLEAR RETRY REQUEST
LX3 -24+PUTLS
SA6 A4
LX1 -12
MX6 18
LX6 -6
BX6 X6*X2 CLEAR UNIT REQUEST QUEUE
NZ X0,CLU1 IF ANOTHER REQUEST PRESENT
SA6 A2
ZR X3,CLU2 IF NO RETRY REQUEST
TA4 X3,PUT GET *PUT* ENTRY
NG X4,CLU2 IF UNIT BUSY
MX5 1
BX0 -X1*X4 CURRENT REQUEST
BX6 X4+X5 SET UNIT BUSY
ZR X0,CLU2 IF NO CURRENT REQUEST
SA6 A4
CLU1 LX0 -12
EQ INR INITIATE REQUEST
CLU2 SB3 IOLX *SAA* RETURN ADDRESS
EQ SAA SET ACCOUNTING ADJUSTMENT
DCS SPACE 4,20
** DCS - DECODE STATUS.
*
* XP SLAVE INPUT.
*
* ENTRY (A0) = CM BUFFER ADDRESS.
* (A1) = PARTNER XP ADDRESS.
* (A2) = *PUT* ENTRY ADDRESS.
* (A3) = CONTROL BUFFER ADDRESS.
* (B2) = CHANNEL NUMBER.
* (B4) = PARTNER CHANNEL NUMBER.
*
* EXIT TO *CLU*.
*
* USES X - ALL.
* A - 1, 2, 3, 4, 5, 6, 7.
* B - 3, 4, 6, 7.
*
* CALLS /MONITOR/APQ, /BUFIO/DLB, /BUFIO/SBR.
DCS RO B2 RELEASE FLPP DRIVER
SA4 A0 READ FIRST WORD OF CM BUFFER
SA5 A0+B1 SECOND WORD
RI B2 RESET I/O BUFFER POINTERS
RI B4
LX4 59-57
SB6 DCSA *819 PRTY*
NG X4,CLU IF COMPLETION STATUS
SA2 A2 READ *PUT* ENTRY
ERRNZ UNCT INDEX MUST BE ZERO
MX0 -3
LX0 54
SX4 B0+
BX7 -X0*X2 READ RECOVERY INDEX
NZ X7,DCS4 IF READ RECOVERY TO PROCESS
MX1 -48
LX5 59-5
SX6 NRDE
SB3 DCS2 *DLB* RETURN ADDRESS
NG X5,DCS1 IF *NOT READY* CONDITION
SX6 DSTE SET *DEVICE STATUS* ERROR CODE
DCS1 LX6 48 POSITION ERROR CODE
BX2 X0*X2 CLEAR READ RECOVERY INDEX
BX3 X5
SA4 A0
SA5 A3+HSLK
LX4 59-42
BX7 -X1*X5
MX1 1
BX7 X1+X7 SET ERROR FLAG
BX7 X6+X7 MERGE ERROR CODE INTO *HSLK*
SA7 A5
SA5 A5-HSLK+IOLK
PL X4,/BUFIO/DLB IF BUFFER DOES NOT CONTAIN WRITE DATA
NG X3,DCS3 IF DISK NOT READY
PL X5,DCS2 IF BUFFER DELETED BY *WRT*
EQ /BUFIO/DLB DELETE BUFFER
DCS2 SB3 DCS3 *SRC* RETURN ADDRESS
SB7 B0+ EXCHANGE PACKAGE INDEX
EQ /BUFIO/SBR SET BUFFER RECALL
DCS3 SA4 A0+B1 READ CM BUFFER
SB6 DCSB *819 ABT*
LX4 59-5
PL X4,DCS4 IF NOT DISK NOT READY
SB6 DCSC *819 NRDY*
DCS4 SA5 B6 SET MESSAGE IN SYSTEM CONTROL POINT
SX1 A1 SAVE (A1), (A2), (B4)
SX2 A2
LX1 18
BX6 X5
SA5 A2 GET *PUT* ENTRY
MX7 -6 GET EST ORDINAL (LOWER 6 BITS)
LX5 -36
BX5 -X7*X5
MX7 -3
BX7 -X7*X5
AX5 3
LX5 6
BX7 X5+X7
LX7 12
IX6 X6+X7
BX7 X1+X2
TA6 MS2W,SCA
NG X4,CLU IF DISK NOT READY
SA5 A0+ GET BLOCK WORD COUNT
SA7 DCSD
SX6 B4
SA4 A2 READ *PUT* ENTRY
ERRNZ UNCT INDEX MUST BE ZERO
SA6 A7+B1
MX7 -11
SX3 5
BX2 -X7*X5 WORD COUNT
SX1 B2 MASTER FLPP CHANNEL NUMBER
SX2 X2+9+4 BYTE COUNT OF STATUS PACKET
LX1 21-1
IX3 X2/X3 WORD COUNT OF STATUS PACKET
MX7 -9
LX4 -36
SA2 DCSE 18/*1MD*,42/0
BX7 -X7*X4 EST ORDINAL
LX7 12
BX7 X7+X1
TA4 EMB GET *EMB* HEADER 1 (FLAGS, *IN*)
BX7 X7+X5
SA1 A4+B1 GET *EMB* HEADER 2 (*OUT*, *LIMIT*)
LX4 -12 POSITION *IN*
SA7 A0
MX0 -12
SX3 X3+B1 ADD ONE FOR HEADER
BX6 -X0*X1 *LIMIT*
LX1 -12
BX5 -X0*X4 *IN*
BX1 -X0*X1 *OUT*
SB3 DCS6 *APQ* RETURN ADDRESS IF *EMB* FULL
* THE FOLLOWING CODE EMULATES THE ERROR MESSAGE BUFFER
* HANDLING FOUND AND DOCUMENTED IN COMMON DECK *COMPIMB*.
* (X0) = -7777
* (X1) = *OUT*
* (X2) = *1MD* INPUT REGISTER/*EMB* TERMINATOR
* (X3) = MESSAGE LENGTH INCLUDING HEADER (*ML*).
* (X4) = *EMB* HEADER 1 (SHIFTED -12)
* (X5) = *IN*
* (X6) = *LIMIT*
DCS4.1 IX7 X5-X1 *IN* - *OUT*
NG X7,DCS4.2 IF *IN* .LT. *OUT*
IX7 X5+X3 *IN* + *ML*
IX7 X7-X6 *IN* + *ML* - *LIMIT*
NG X7,DCS4.3 IF MESSAGE FITS BETWEEN *IN* AND *LIMIT*
BX7 X2 SET TERMINATOR IN *EMB*
ZR X1,DCS5 IF *OUT* .EQ. *FIRST* - DO NOT RESET *IN*
TA7 X5+2,EMB
MX5 0 RESET *IN*
EQ DCS4.1 RECHECK MESSAGE FIT
DCS4.2 IX7 X7+X3 *IN* + *ML* - *OUT*
PL X7,DCS5 IF MESSAGE WILL NOT FIT - CALL *1MD*
DCS4.3 SB4 X5+B1
IX7 X5+X3 UPDATE *IN*
SB4 B4+X3
BX5 X0*X4 REMOVE OLD *IN*
SB6 X3-1
IX7 X5+X7 MERGE IN UPDATED *IN*
SB3 DCS7 *APQ* RETURN ADDRESS
LX7 12
SA7 A4+ UPDATE *EMB* HEADER 1
DCS4.9 SA5 A0+B6 MOVE ERROR DATA TO BUFFER
SB6 B6-B1
BX7 X5
SA7 A4+B4
SB4 B4-B1
PL B6,DCS4.9 IF NOT END OF MOVE
LX3 12 SET WORD COUNT IN HEADER
SX7 MLDY+4000B SET 819 DRIVER MAINTENANCE LOG CODE
BX7 X7+X3
SA7 A4+B4 STORE HEADER IN BUFFER
DCS5 LX4 59-1-59+11
NG X4,/MONITOR/RB3 IF *1MD* ALREADY ACTIVE
BX6 X2
TB7 SCA SYSTEM CONTROL POINT ADDRESS
SB6 DCS5.1 *CAL* RETURN ADDRESS - NO LIMIT
EQ /MONITOR/CAL CHECK ACTIVITY LIMIT
DCS5.1 SA4 A4 GET BUFFER CONTROL WORD
SX2 B1+B1 SET *1MD* CALLED FLAG
BX7 X2+X4
SA7 A4
SB4 B0 SET LIBRARY SEARCHED NEEDED
EQ /MONITOR/APQ ASSIGN *1MD*
DCS6 TA5 EMB SET DATA LOST FLAG
SX6 B1+
LX6 36
BX6 X5+X6
SA6 A5+
DCS7 SA4 DCSD RESTORE (A1), (A2), (B4)
SA5 A4+B1
SA2 X4
SB4 X5
AX4 18
SA1 X4+
EQ CLU CLEAR UNIT FLAGS
DCSA DATA C*819PTY00*
DCSB DATA C*819ABT00*
DCSC DATA C*819NRY00*
DCSD BSS 2 REGISTER SAVE AREA
DCSE VFD 18/3R1MD,42/0 *1MD* INPUT REGISTER/*EMB* TERMINATOR
FNR SPACE 4,15
** FNR - FIND NEXT REQUEST.
*
* ENTRY (B3) = RETURN ADDRESS.
* (B4) = CHANNEL NUMBER.
* (B7) = 0 IF READ, 1 IF WRITE.
* (A3) = CONTROL BUFFER ADDRESS.
*
* EXIT (X7) = NEGATIVE IF NO MORE REQUESTS ON THIS CYLINDER.
* (X7) = 0 IF CONTINUOUS REQUEST (NO POSITIONING).
* (X7) = TRACK AND SECTOR OF NEXT REQUEST.
*
* USES X - 1, 2, 3, 4, 5, 6, 7.
* A - 3, 4, 5, 6, 7.
FNR SA4 A3+IOLK READ CONTROL BUFFER
MX6 -12
SX1 B4 CHANNEL
LX4 -24
BX4 -X6*X4 LINK TO NEXT REQUEST
ZR X4,FNR2 IF END OF QUEUE
LX4 CBTLS
SX2 B1
TA4 X4+IOLK,CBT READ NEXT CONTROL BUFFER
SX7 B7 READ/WRITE FLAG
LX2 57
LX7 57
BX5 X2*X4 EXTRACT WRITE DATA FLAG
AX1 CCTLS/2
BX7 X7-X5
NZ X7,FNR2 IF NOT MATCHING MODES (READ/WRITE)
SA5 A4+PAD1-IOLK READ PHYSICAL ADDRESS
SA3 A3 READ CURRENT PHYSICAL ADDRESS
ERRNZ PAD1 INDEX MUST BE ZERO
SX7 A5
SA7 NRQT-1+X1 SET NEXT REQUEST
LX5 24
LX3 24
BX7 X5
BX2 X3-X5
AX7 48
AX3 48
BX6 -X6*X2
IX3 X7-X3
NZ X6,FNR2 IF NOT SAME CYLINDER
BX7 X7-X7 SET CONTINUOUS REQUEST FOUND
SX3 X3-PSLB
LX5 6
ZR X3,FNR1 IF CONTINUOUS SECTORS
MX1 -6
SX7 B1+B1 SET *SWITCH* FUNCTION
BX1 -X1*X5 TRACK
LX7 4
LX5 6
BX7 X1+X7
MX1 -6
LX7 5
BX1 -X1*X5 SECTOR
BX7 X7+X1
FNR1 LX7 48
MX3 1 SET I/O LINKUP
LX3 56-59
BX6 X4+X3
SA6 A4
JP B3 RETURN
FNR2 SX5 B4+ SET *STOP* FOR NEXT REQUEST
MX7 1
AX5 CCTLS/2
SA7 NRQT-1+X5
JP B3 RETURN
INR SPACE 4,10
** INR - INITIATE REQUEST.
*
* ENTRY (B3) = RETURN ADDRESS.
* (X0) = CONTROL BUFFER ORDINAL.
*
* USES X - ALL.
* A - 2, 3, 4, 5, 6, 7.
* B - 5, 7.
INR LX0 CBTLS
MX7 -12
TA5 X0+HSLK,CBT
BX2 -X7*X5 *PUT* ORDINAL
SA3 A5+FSTC-HSLK
LX2 PUTLS
LX3 12
TA2 X2+UNCT,PUT
BX3 -X7*X3 EST ORDINAL
LX2 12
CX5 X3,EST CONVERT EST ORDINAL TO OFFSET
MX3 -6
BX3 -X3*X2
MX1 12
SB7 X3 UNIT NUMBER
LX1 3
MX4 3 FORM CHANNEL MASK
LX2 -6
BX1 X1-X4
TA5 X5+EQDE,EST READ EST ENTRY
LX5 24+3
BX6 X1*X5 EXTRACT ALTERNATE CHANNEL
SB5 X6-4
AX6 48+3-CCTLS/2 CHANNEL CONTROL TABLE INDEX
LX5 -12
BX5 X1*X5 EXTRACT PRIMARY CHANNEL
SX1 X5-4
AX5 48+3-CCTLS/2 CHANNEL CONTROL TABLE INDEX
TA3 X5+CREQ,CCT
NZ B5,INR2 IF ALTERNATE ACCESS UNAVAILABLE
TA4 X5+CREQ,CCT
SB5 X1 SAVE PRIMARY CHANNEL STATUS
BX1 -X7*X3
NZ B5,INR1 IF PRIMARY ACCESS UNAVAILABLE
BX7 -X7*X4 ACTIVE REQUESTS - SECOND CHANNEL
IX7 X1-X7
NG X7,INR2 IF FIRST CHANNEL HAS FEWEST REQUESTS
INR1 SA3 A4+ USE SECOND CHANNEL
INR2 NG X3,INR3 IF CHANNEL BUSY
TX4 A3-CREQ,-CCT COMPUTE CHANNEL NUMBER
MX6 -3
AX4 CCTLS/2
BX6 -X6*X2 READ RECOVERY INDEX
MX1 1
IX6 X0+X6 OFFSET FOR READ RECOVERY
SB5 X4 CHANNEL NUMBER
TA5 X0+IOLK,CBT GET READ/WRITE FLAG
TA4 X6+PAD1,CBT READ PHYSICAL ADDRESS
LX1 54-59
LX5 54-57
SX6 B7 UNIT NUMBER
BX5 X5*X1 READ/WRITE FLAG
MX7 12
LX6 48
LX7 -12
BX5 X5+X6 FCN, UNIT
BX6 X7*X4 CYLINDER
LX7 -36
LX4 -24
BX6 X6+X5 FCN, UNIT, CYL
BX4 X7*X4 TRACK, SECTOR
SX5 B5 CHANNEL NUMBER
BX6 X6+X4 FCN, UNIT, CYL, TRACK, SECTOR
LX5 7
SA6 /MONITOR/MCU+X5 STORE REQUEST
* INITIATE REQUEST.
MX1 48
SX7 B7 UNIT NUMBER
TX6 A2-UNCT,-PUT SET *PUT* ENTRY PENDING
LX1 12
LX6 12-PUTLS
BX3 X1*X3 CLEAR PENDING REQUEST
SA7 A6+B1
BX6 X6+X3 INSERT NEW PENDING REQUEST
RI B5 RESET I/O BUFFER POINTERS
MX3 1
RO B5 SET RECORD FLAG TO *FLPP*
BX6 X6+X3 SET CHANNEL BUSY
SB5 B5+B1
SA6 A3
RI B5 RESET BUFFER POINTERS (PARTNER CHANNEL)
JP B3 RETURN
INR3 TX7 A2-UNCT,-PUT SET RETRY REQUEST
MX1 48
LX7 24-PUTLS
LX1 24
LX2 -6
MX4 -59
BX3 X1*X3 CLEAR RETRY REQUEST
BX6 -X4*X2 CLEAR UNIT BUSY
BX7 X7+X3 INSERT NEW RETRY REQUEST
SA6 A2
SA7 A3
JP B3 RETURN
IOA SPACE 4,20
** IOA - I/O ACCEPT.
*
* MASTER INPUT.
*
* ENTRY (A0) = CM BUFFER ADDRESS.
* (B4) = CHANNEL NUMBER.
* ((A0)+1) = UNIT NUMBER.
*
* EXIT (X0) = CONTROL BUFFER ORDINAL.
* TO *INR*.
*
* USES X - 1, 2, 3, 4, 5, 6, 7.
* A - 2, 4, 5, 6, 7.
* B - 3, 5, 6, 7.
*
* CALLS INR, SAA.
IOAX MJ EXIT
IOA TB7 READ REAL TIME CLOCK
SX1 B4
SX7 B7
LX1 CCTLS/2
SA4 A0+B1 GET UNIT NUMBER
MX6 48
SA7 RTCI SAVE REAL-TIME CLOCK
TA3 X1+CREQ,CCT READ CHANNEL REQUEST CONTROL
SB7 X4 UNIT NUMBER
SA5 A3+B1
ERRNZ CCNT-CREQ-1 INDEXES MUST BE CONSECUTIVE
MX7 -59
PL X3,IOAX IF CHANNEL NOT BUSY
LX6 12
BX3 -X7*X3 CLEAR CHANNEL BUSY
SX2 B1
BX3 X6*X3 CLEAR PENDING REQUEST
RI B4 RESET I/O BUFFER POINTERS
SB6 B7-60
IX5 X5+X2 INCREMENT TOTAL REQUEST COUNT
IX6 X3+X2 INCREMENT ACTIVE REQUEST COUNT
AX7 B6
RI B2 RESET I/O BUFFER POINTERS
BX7 X7+X5 SET UNIT REQUEST FLAG
SA6 A3
SA7 A5+
SB6 7
* *IOA* IS ENTERED HERE BY *RIO* TO INITIATE REQUESTS ON
* ALL CHANNELS IN USE WHEN FLUSHING WRITE BUFFERS DURING
* RECOVERY. EXIT IS ACCOMPLISHED BY CODE MODIFICATION.
IOA1 MX2 -3
SX6 B7+1 INCREMENT UNIT NUMBER
BX4 -X2*X6
SB7 X4
LX3 X7,B7 UNIT REQUEST FLAG
PL X3,IOA4 IF NO REQUEST ISSUED
IOA2 SB6 B6-1
NZ B6,IOA1 IF NOT END OF UNITS
IOA3 SB3 IOAX *SAA* RETURN ADDRESS
* EQ RIO2 (BUFFER RECOVERY IN PROGRESS)
EQ SAA SET ACCOUNTING ADJUSTMENT
IOA4 SB5 B7-4
SX3 A5+CUN1-CCNT
NG B5,IOA5 IF UNITS 0 - 3
SX3 X3+CUN2-CUN1
IOA5 SA2 X3 GET *PUT* ORDINAL
SX6 B7 COMPUTE BYTE OFFSET
ZR X2,IOA2 IF NO UNITS DEFINED
MX4 -2
SX5 12
BX4 -X4*X6
IX6 X4*X5
SB5 X6
MX4 -12
AX2 B5
BX6 -X4*X2 *PUT* ORDINAL
ZR X6,IOA2 IF NO UNIT DEFINED
LX6 PUTLS
TA2 X6+UNCT,PUT READ *PUT* ENTRY
NG X2,IOA2 IF UNIT BUSY
MX4 1
MX5 -12
BX6 X4+X2 SET UNIT BUSY
LX2 -12
BX0 -X5*X2
ZR X0,IOA2 IF EMPTY QUEUE
SA6 A2
SB3 IOA3 *INR* RETURN ADDRESS
EQ INR INITIATE REQUEST
IOL SPACE 4,25
** IOL - I/O LINKUP.
*
* XP SLAVE INPUT.
*
* ENTRY (A1) = PARTNER XP ADDRESS.
* (A0) = CM BUFFER ADDRESS.
* (B2) = CHANNEL NUMBER (PARTNER).
* (B4) = CHANNEL NUMBER.
* ((A0)) = *FLPP* REPLY.
*
* EXIT (A2) = *PUT* ENTRY ADDRESS.
* (A3) = CONTROL BUFFER ADDRESS.
* (X0) = LCM BUFFER ADDRESS.
* (X2) = *PUT* ENTRY.
* TO *RDD* (READ) OR *WRT* (WRITE).
*
* USES X - ALL.
* A - 2, 3, 5, 6, 7.
* B - 3, 5, 7.
*
* CALLS DCS, RDD, SAA, WRT.
IOLX MJ EXIT
IOL TB7 READ REAL-TIME CLOCK
SX2 B2 CHANNEL NUMBER
SX7 B7
LX2 CCTLS/2
SA7 RTCI SAVE REAL-TIME CLOCK AT INTERRUPT
TA3 X2+CREQ,CCT READ CHANNEL CONTROL TABLE
MX6 -12
BX7 -X6*X3 ACTIVE REQUESTS
ZR X7,IOLX IF NO ACTIVE REQUESTS
MX4 1
LX6 12
BX7 X3+X4 SET CHANNEL BUSY
BX3 -X6*X3 PENDING REQUEST
ZR X3,IOL1 IF NO PENDING REQUEST ISSUED
MX6 36
AX3 12-PUTLS
LX6 12
TA2 X3+UNCT,PUT READ *PUT* ENTRY
BX7 X6*X7 CLEAR RETRY REQUEST
LX3 24-PUTLS
BX7 X3+X7 INSERT NEW RETRY REQUEST
BX6 -X4*X2 CLEAR UNIT BUSY
SA6 A2
IOL1 SB3 IOL2 *SAA* RETURN ADDRESS
SA2 B0 SET I/O LINKUP SEQUENCE
RO B4 SIGNAL *FLPP*
SA7 A3
EQ SAA SET ACCOUNTING ADJUSTMENT
IOL2 MJ EXIT
* SECOND I/O LINKUP INTERRUPT, OR STATUS REPLY.
*
* (A2) = 0 IF I/O LINKUP SEQUENCE.
* (A2) = *PUT* ENTRY ADDRESS, IF STATUS REPLY.
IOL3 TB3 READ REAL-TIME CLOCK
SX6 A2+
SX7 B3
SA7 RTCI SAVE REAL-TIME CLOCK AT INTERRUPT
NZ X6,DCS IF STATUS REPLY
SA2 A0+ GET *FLPP* REPLY
SX5 A3+B1
ERRNZ CCNT-CREQ-1 INDEXES MUST BE CONSECUTIVE
MX3 12
RI B4
BX0 X3*X2
RI B2 RESET I/O BUFFER POINTERS
LX2 18
SX3 4
SB5 X2 FUNCTION
LX2 6
BX3 X3*X2
ZR X3,IOL4 IF UNITS 0-3
SX5 X5+B1
ERRNZ CUN2-CUN1-1 INDEXES MUST BE CONSECUTIVE
IOL4 SA5 X5+B1 READ UNIT LIST
ERRNZ CUN1-CCNT-1 INDEXES MUST BE CONSECUTIVE
MX3 -2 COMPUTE UNIT OFFSET
SX4 12
BX3 -X3*X2
IX3 X3*X4
SB7 X3
AX5 B7 POSITION *PUT* ORDINAL
MX4 -12
BX3 -X4*X5
LX3 PUTLS
MX1 -24
TA2 X3+UNCT,PUT READ *PUT* ENTRY
LX2 -12
BX4 -X4*X2 CURRENT
LX2 12
LX4 CBTLS
TA5 X4+IOLK,CBT
TA3 X4+PAD1,CBT SET CONTROL BUFFER ADDRESS
PL X5,IOL6 IF I/O INTERLOCK CLEAR
SX3 B1
LX5 -57
BX3 X5*X3
SX4 B5 FUNCTION
IX4 X4-X3
NZ X4,IOL6 IF FUNCTIONS DO NOT MATCH
MX3 1
BX7 X7-X7
BX6 X3+X5 SET I/O LINKUP
SA7 A0 SET *GO* TO *FLPP*
LX6 57
SA6 A5
NZ X0,DCS IF ABORT DURING I/O LINKUP
RO B2 SIGNAL MASTER *FLPP*
IOL5 OB7 B2
ZR B7,IOL5 IF MASTER HAS NOT ACCEPTED
BX0 -X1*X6 I/O BUFFER ADDRESS
NZ B5,WRT IF WRITE
EQ RDD READ
IOL6 NZ X0,DCS IF ABORT DURING I/O LINKUP
EQ * HANG
RAB SPACE 4,20
** RAB - READ ABORT PROCESSOR.
*
* XP SLAVE INPUT.
*
* ENTRY (A0) = CM BUFFER ADDRESS.
* (A1) = PARTNER XP ADDRESS.
* (A2) = *PUT* ENTRY ADDRESS.
* (A3) = CONTROL BUFFER ADDRESS.
* (B4) = CHANNEL NUMBER.
* (B5) = READ RECOVERY INDEX.
* (X0) = LCM BUFFER ADDRESS.
*
* EXIT TO *DCS*.
*
* USES X - 1, 2, 3, 4, 5, 6, 7.
* A - 2, 3, 4, 5, 6, 7.
* B - 6, 7.
RAB SA5 A1 RESET MASTER XP
SA4 A0 GET STATUS
SX3 IOA NEW (P)
MX6 -36
LX3 36
BX6 -X6*X5 CLEAR OLD (P)
LX4 59-58
BX6 X6+X3 INSERT NEW (P)
MX7 1
SA6 A5
MX1 -3
PL X4,DCS IF NOT A READ ERROR
SA5 A1+5 READ MASTER XP
BX5 -X1*X5 (B5) = READ RECOVERY INDEX
SA2 A2 READ *PUT* ENTRY
ERRNZ UNCT INDEX MUST BE ZERO
LX1 -6
SB7 X5
BX2 X1*X2
GT B7,B5,RAB1 IF MASTER NEXT
SX5 B5
RAB1 SB6 X5-1
SB7 X5-PSLB
LX5 54
SA4 A3+B6 ADDRESS OF SECTOR IN ERROR
MX1 2
LX1 23-59
BX6 X1*X4 CLEAR VALID DATA FLAGS
BX6 -X6
BX6 X1*X6
BX6 X6+X4
SA6 A4
NG B7,RAB2 IF NOT LAST SECTOR
BX5 X5-X5 CLEAR NEW READ RECOVERY INDEX
RAB2 BX7 X5+X2 SET NEW READ RECOVERY INDEX
SA7 A2
SX7 B4+ CLEAR POSSIBLE CONTINUATION REQUEST
AX7 CCTLS/2
MX6 1
SA6 NRQT-1+X7
EQ DCS DECODE STATUS
RDD SPACE 4,15
** RDD - READ DISK.
*
* ENTRY (A0) = CM BUFFER ADDRESS.
* (A1) = PARTNER XP ADDRESS.
* (A2) = *PUT* ENTRY ADDRESS.
* (A3) = CONTROL BUFFER ADDRESS.
* (X0) = LCM BUFFER ADDRESS.
* (X2) = *PUT* ENTRY.
*
* USES X - ALL.
* A - ALL.
* B - 3, 5, 6, 7.
*
* CALLS /BUFIO/DLB, FNR, RAB, SAA, /BUFIO/SBR, SCB.
RDD SA1 A1 SET UP PARTNER XP
SA4 A1+2
MX6 -3
LX2 6
SX7 RDD3 ENTRY ADDRESS FOR MASTER XP
SA5 A4+B1
BX2 -X6*X2 RECOVERY INDEX
MX3 42
LX7 36
LX3 18
SB5 X2 RECOVERY INDEX
BX4 X3*X4 CLEAR (A2)
BX5 X3*X5 CLEAR (A3)
SX6 A2
SX3 A3
LX6 18
LX3 18
BX6 X4+X6 INSERT NEW (A2)
SA6 A4
SA4 A1+5
BX6 X5+X3 INSERT NEW (A3)
SB7 B5-PSLB+1
SA6 A5
MX3 42
MX5 -36
SX6 X2+B1 RECOVERY INDEX FOR PARTNER
BX4 X3*X4 CLEAR (B5)
BX1 -X5*X1 CLEAR (P)
BX6 X6+X4 INSERT NEW (B5)
BX7 X7+X1 INSERT NEW (P)
SA6 A4+
LX2 9
SA7 A1+
IX0 X0+X2 OFFSET LCM ADDRESS BY RECOVERY INDEX
NZ B7,RDD1 IF NOT LAST SECTOR
MX7 1
SA7 A0
RDD1 SX4 1000B
SB3 RDD2 *SAA* RETURN ADDRESS
IX6 X0+X4
RO B2 SIGNAL MASTER
SA6 A1+10B SET NEW (X0)
EQ SAA SET ACCOUNTING ADJUSTMENT
RDD2 MJ EXIT
* FIRST INTERRUPT.
RDD3 TB7 READ REAL-TIME CLOCK
IB3 B4 CHECK FOR FULL BUFFER
SA4 A0 READ HEADER
MX5 2
SB6 200B
SX7 B7
LX5 -12
SB3 B3-B6
BX6 X5*X4 UNIT NUMBER
SA7 RTCI SAVE REAL-TIME CLOCK AT INTERRUPT
NG B3,RAB IF READ ABORT
SA0 A0+B1
BX4 -X5*X4 CLEAR UNIT
WE 177B
+ LX6 2
SX2 177B
BX6 X6+X4 INSERT UNIT NUMBER
IX0 X0+X2 INCREMENT LCM ADDRESS
SA0 A0+177B INCREMENT CM ADDRESS
SA6 A3+B5 SET HEADER IN CONTROL BUFFER
SB3 RDD4 *SAA* RETURN ADDRESS
EQ SAA SET ACCOUNTING ADJUSTMENT
RDD4 MJ EXIT
* SECOND INTERRUPT.
TB7 READ REAL-TIME CLOCK
SX2 200B
SX7 B7
WE 200B
+ SA7 RTCI SAVE REAL-TIME CLOCK AT INTERRUPT
SA0 A0-B6 RESET CM ADDRESS
IX0 X0+X2 INCREMENT LCM ADDRESS
SB3 RDD5 *SAA* RETURN ADDRESS
EQ SAA SET ACCOUNTING ADJUSTMENT
RDD5 MJ EXIT
* THIRD INTERRUPT.
TB7 READ REAL-TIME CLOCK
BX7 X7-X7 *GO* FOR NEXT SECTOR
SB3 PSLB-2 CHECK FOR NEXT TO LAST SECTOR
WE 200B
+ SX6 B7
IX0 X0+X2 INCREMENT LCM ADDRESS
SA6 RTCI SAVE REAL-TIME CLOCK AT INTERRUPT
SA0 A0+B6 INCREMENT CM ADDRESS
NE B3,B5,RDD6 IF NOT NEXT TO LAST SECTOR
SB7 B0 SET READ PROCESSING FOR *FNR*
SB3 RDD6 *FNR* RETURN ADDRESS
EQ FNR FIND NEXT REQUEST
RDD6 SB3 RDD7 *SAA* RETURN ADDRESS
EQ SAA SET ACCOUNTING ADJUSTMENT
RDD7 MJ EXIT
* FOURTH INTERRUPT.
TB7 READ REAL-TIME CLOCK
SX2 B6
- WL 200B
SX6 B7
SA0 A0-B6 RESET CM ADDRESS
SA6 RTCI SAVE REAL-TIME CLOCK AT INTERRUPT
RDD8 IB3 B4
SA5 A0
NE B3,B1,RDD8 IF LAST WORD NOT PRESENT
IX0 X0+X2 INCREMENT LCM ADDRESS
SB5 B5+2 INCREMENT SECTOR COUNT
SX2 B1
WX5 X0 WRITE LAST WORD TO BUFFER
SX4 1000B
IX0 X0+X2
SA7 A0+ SEND CONTROL WORD TO *FLPP*
SB3 PSLB+1
RI B4 RESET I/O BUFFER POINTERS
IX0 X0+X4 INCREMENT LCM BUFFER ADDRESS
RO B4
MX7 -57
EQ B3,B5,RDD9 IF LAST SECTOR
SB3 RDD2 *SAA* RETURN ADDRESS
EQ SAA SET ACCOUNTING ADJUSTMENT
RDD9 SA2 A2 READ *PUT* ENTRY
ERRNZ UNCT INDEX MUST BE ZERO
LX7 -3
SB3 RDD10 *DLB* RETURN ADDRESS
BX2 -X7*X2 CLEAR RECOVERY INDEX
EQ /BUFIO/DLB DELETE BUFFER
RDD10 SB3 RDD11 *SRC* RETURN ADDRESS
SB7 B0+ SET INPUT XP
EQ /BUFIO/SBR SET BUFFER RECALL
RDD11 SX2 B4 GET NEXT REQUEST
SA5 A1+5 CLEAR PARTNER SECTOR COUNT
AX2 CCTLS/2
MX0 42
SA4 NRQT-1+X2
BX6 X0*X5 CLEAR (B5)
MX1 -24
SA6 A5
SA3 X4 READ NEXT CONTROL BUFFER
SX7 X4 CONTROL BUFFER ADDRESS
BX2 X4
SA5 A1+3
LX0 18
SA4 X4+IOLK
LX7 18
BX5 X0*X5 CLEAR (A3)
BX6 -X1*X4 LCM BUFFER ADDRESS
BX7 X5+X7 INSERT NEW (A3)
SA4 A2+RDST UPDATE READ STATISTICS
SX5 PSLB PHYSICAL SECTOR COUNT
SA6 A1+10B SET NEW (X0)
SA7 A5+
SX0 1000B
SB7 59-35
SB5 B1
IX7 X4+X5 INCREMENT ACCUMLATOR
IX0 X0+X6 LCM BUFFER ADDRESS
LX1 X7,B7
SB3 RDD13 *RXB* *SCB* RETURN ADDRESS
NG X1,RDD12 IF ACCUMULATOR OVERFLOW
SA7 A4+ UPDATE ACCUMULATOR
RDD12 NG X2,RXP IF NOT CONTINUING ON NEXT REQUEST
EQ SCB SET CURRENT BUFFER
RDD13 SB3 RDD2 *SAA* RETURN ADDRESS
EQ SAA SET ACCOUNTING ADJUSTMENT
RPP SPACE 4,10
** RPP - REQUEST PSEUDO-PP.
*
* ENTRY (A4) = FWA OF CONTROL BUFFER + *LSLK*.
* (B3) = RETURN ADDRESS.
* (B4) = CHANNEL NUMBER.
* (B7) = 0 IF INPUT XP, 20B IF OUTPUT XP.
*
* USES X - 3, 4, 5, 6, 7.
* A - 5, 6, 7.
RPP SX4 B4 COMPUTE XP ADDRESS
LX4 5
SX4 X4+B7
SX3 B1
SA5 /MONITOR/MCU+X4+3 READ PSD
LX3 39
BX6 X3+X5 SET STEP MODE FLAG
SA6 A5+
TX7 A4-LSLK,-CBT COMPUTE CONTROL BUFFER ORDINAL
SA5 BMRI GET REQUEST QUEUE INDEX
AX7 3
SX6 X5+B1 INCREMENT INDEX
SA7 TBMR+X5 SET REQUEST IN QUEUE
SA6 A5+
JP B3 RETURN
RXP SPACE 4,10
** RXP - RESET EXCHANGE PACKAGES.
*
* ENTRY (A1) = PARTNER XP ADDRESS.
* (B3) = RETURN ADDRESS.
* (B4) = CHANNEL NUMBER.
*
* USES X - 2, 3, 4, 6, 7.
* A - 4, 7.
* B - 3.
*
* CALLS SAA.
RXP SX2 B4 CHANNEL NUMBER
SX3 B1
SX7 IOA
BX3 X3*X2
MX6 -36
SB3 IOL2 *SAA* RETURN ADDRESS
SA4 A1+
NZ X3,RXP1 IF IN SLAVE
SX7 IOL3
SB3 IOAX *SAA* RETURN ADDRESS
RXP1 LX7 36
BX6 -X6*X4
BX7 X7+X6 INSERT NEW (P)
SA7 A4
ERRNZ SAA-* SUBROUTINES MUST BE CONSECUTIVE
* EQ SAA
SAA SPACE 4,10
** SAA - SET ACCOUNTING ADJUSTMENT.
*
* ENTRY (B3) = RETURN ADDRESS.
* (RTCI) = REAL-TIME CLOCK AT INTERRUPT.
*
* USES X - 3, 4, 5, 6.
* A - 4, 5, 6.
* B - 7.
SAA SA4 RTCI REAL-TIME CLOCK AT INTERRUPT
SA5 CL+CPBT PROGRAM MODE BASE TIME OF ACTIVE JOB
TB7 READ REAL-TIME CLOCK
MX6 -18
SX3 B7
BX4 -X6*X4
BX6 -X6*X3
IX6 X6-X4 COMPUTE ACCOUNTING ADJUSTMENT
SX6 X6+80D ADJUST FOR NON-TIMED CODE
IX6 X5+X6 ADJUST START TIME
SA6 A5
JP B3 RETURN
SCB SPACE 4,10
** SCB - SET CURRENT BUFFER.
*
* ENTRY (A2) = *PUT* ENTRY ADDRESS.
* (A3) = CONTROL BUFFER ADDRESS.
* (B3) = RETURN ADDRESS.
*
* USES X - 2, 5, 6.
* A - 2, 6.
SCB SA2 A2 *PUT* ENTRY
MX6 48
TX5 A3,-CBT COMPUTE CONTROL BUFFER ORDINAL
LX6 12
LX5 12-CBTLS
BX6 X6*X2 CLEAR CURRENT
BX6 X5+X6 INSERT NEW CURRENT
SA6 A2
JP B3 RETURN
WRT SPACE 4,15
** WRT - WRITE DISK.
*
* ENTRY (A0) = CM BUFFER ADDRESS.
* (A1) = PARTNER XP ADDRESS.
* (A2) = *PUT* ENTRY ADDRESS.
* (A3) = CONTROL BUFFER ADDRESS.
* (X0) = LCM BUFFER ADDRESS.
* (X2) = *PUT* ENTRY.
*
* USES X - ALL.
* A - 0, 2, 3, 4, 5, 6, 7.
* B - 3, 5, 6, 7.
*
* CALLS /BUFIO/DLB, FNR, SAA, SCB, /BUFIO/SBR.
WRT SA4 A1+20B+2 SET UP PARTNER XP
MX6 42
SA3 A3 READ CONTROL BUFFER
ERRNZ PAD1 CODE DEPENDS ON VALUE
MX1 2
LX6 18
SA5 A4+B1
LX1 49-59
MX7 -48
BX4 X6*X4 CLEAR (A2)
BX1 X1*X3 UNIT NUMBER
BX7 -X7*X3 CLEAR FLAGS
LX1 -2
BX5 X6*X5 CLEAR (A3)
BX7 X1+X7 INSERT UNIT NUMBER
SX6 A2
SA7 A0 SET HEADER WORD IN SECTOR
LX6 18
SA0 A0+B1
SX7 A3
BX6 X6+X4 INSERT NEW (A2)
LX7 18
SA6 A4
BX7 X7+X5 INSERT NEW (A3)
SX3 377B
- RL 377B FILL CM BUFFER
SA7 A5
IX6 X0+X3
SA4 A1+20B+5
SA6 A1+20B+10B SET (X0)
MX5 42
SA0 A0-B1 RESET CM BUFFER ADDRESS
BX7 X5*X4 CLEAR (B5) = READ RECOVERY INDEX
SB3 IOL2 *SAA* RETURN ADDRESS
SA7 A4
RO B2 SIGNAL MASTER FLPP
EQ SAA SET ACCOUNTING ADJUSTMENT
WRTX MJ EXIT
* FIRST INTERRUPT.
WRT1 TB7 READ REAL-TIME CLOCK
SB3 WRT2 *SAA* RETURN ADDRESS
SX7 B7
SB6 200B ADDRESS INCREMENT
SA7 RTCI SAVE REAL-TIME CLOCK AT INTERRUPT
SX2 B6+
- RL 200B
IX0 X0+X2 INCREMENT LCM ADDRESS
SA0 A0+B6 INCREMENT CM ADDRESS
EQ SAA SET ACCOUNTING ADJUSTMENT
WRT2 MJ EXIT
* SECOND INTERRUPT.
TB7 READ REAL-TIME CLOCK
SB3 WRT3 *SAA* RETURN ADDRESS
SX7 B7
SA7 RTCI SAVE REAL-TIME CLOCK AT INTERRUPT
- RL 200B
IX0 X0+X2 INCREMENT LCM ADDRESS
SA0 A0-B6 RESET CM ADDRESS
EQ SAA SET ACCOUNTING ADJUSTMENT
WRT3 MJ EXIT
* THIRD INTERRUPT.
TB7 READ REAL-TIME CLOCK
RX6 X0 READ LAST WORD
SB3 PSLB-1
SX7 B7
SB5 B5+B1 INCREMENT SECTOR COUNT
SA7 RTCI SAVE REAL-TIME CLOCK AT INTERRUPT
SB7 B1 *FNR* CONTROL
SX7 B1
SA6 A0 LAST WORD OF SECTOR TO BUFFER
IX0 X0+X7
EQ B3,B5,WRT6 IF NEXT TO LAST SECTOR
SB3 B3+B1
BX7 X7-X7 *GO*
NE B3,B5,WRT7 IF NOT LAST SECTOR
SB3 WRT4 *DLB* RETURN ADDRESS
SA2 A2 *PUT* ENTRY
ERRNZ UNCT INDEX MUST BE ZERO
EQ /BUFIO/DLB DELETE BUFFER
WRT4 SB3 WRT5 *SRC* RETURN ADDRESS
SB6 200B RESET B6
SB7 20B SET OUTPUT XP
EQ /BUFIO/SBR SET BUFFER RECALL
WRT5 SA5 A2+WTST UPDATE WRITE STATISTICS
SX6 PSLB PHYSICAL SECTOR COUNT
SX7 B4 CHANNEL NUMBER
IX6 X5+X6 INCREMENT ACCUMULATOR
AX7 1
LX6 59-35
SA4 NRQT-1+X7 CHECK FOR CONTINUATION
SB5 B0+ CLEAR READ RECOVERY INDEX
NG X6,WRT5.1 IF ACCUMULATOR OVERFLOW
LX6 35-59
SA6 A5 UPDATE ACCUMULATOR
WRT5.1 NG X4,WRT10 IF END OF TRANSFER
SA3 X4
SX6 A1 SET NEW CONTROL BUFFER INDEX IN XP
SA5 X4+IOLK
MX7 54
MX2 -24
BX3 X7*X6
BX0 -X2*X5
BX7 X7-X7 PRESET *CONTINUE*
MX2 42
SA5 X3+40B+3
SB3 WRT7 *SCB* RETURN ADDRESS
SX3 A3
LX2 18
LX3 18
BX6 X2*X5 CLEAR (A3)
BX6 X6+X3 INSERT NEW (A3)
SA6 A5
EQ SCB SET CURRENT BUFFER
WRT6 SB3 WRT7 *FNR* RETURN ADDRESS
EQ FNR FIND NEXT REQUEST
WRT7 SA0 A0+1
SX2 177B
RE 177B
+ SB3 WRT8 *SAA* RETURN ADDRESS
IX0 X0+X2 INCREMENT LCM ADDRESS
SX2 B6
SA0 A0+177B INCREMENT CM ADDRESS
EQ SAA SET ACCOUNTING ADJUSTMENT
WRT8 MJ EXIT
* FOURTH INTERRUPT.
TB7 READ REAL-TIME CLOCK
MX1 2
SA5 A3+B5 GET HEADER FOR NEXT SECTOR
MX3 -48
LX1 -10
SX6 B7
- RL 200B
SA6 RTCI SAVE REAL-TIME CLOCK AT INTERRUPT
BX1 X1*X5 UNIT NUMBER
BX3 -X3*X5
LX1 -2
SA0 A0-B6 RESET CM ADDRESS
BX3 X1+X3 INSERT UNIT NUMBER
IX0 X0+X2
WRT9 OB3 B4
ZR B3,WRT9 IF LAST WORD STILL PRESENT
BX7 X7+X3
SA7 A0
RO B2 RESET I/O BUFFER POINTERS
SA4 A1+2 RESET PARTNER XP
SA5 A1+3
BX6 X0
SX2 A2
SA6 A1+10B SET (X0) IN PARTNER XP
LX2 18
MX1 42
SX3 A3
LX1 18
LX3 18
BX4 X1*X4 CLEAR (A2)
BX5 X1*X5 CLEAR (A3)
BX6 X4+X2 INSERT NEW (A2)
BX7 X5+X3 INSERT NEW (A3)
SA6 A4
SA7 A5
MX1 42
SA4 A1+5
SX6 B5
SB3 WRTX *SAA* RETURN ADDRESS
BX4 X1*X4 CLEAR (B5)
BX6 X4+X6 INSERT NEW (B5)
SA6 A4
EQ SAA SET ACCOUNTING ADJUSTMENT
WRT10 SB3 WRT11 *SAA* RETURN ADDRESS
EQ SAA SET ACCOUNTING ADJUSTMENT
WRT11 MJ EXIT
TB7 READ REAL-TIME CLOCK
RO B2 INDICATE TRANSFER COMPLETE TO *FLPP*
SX7 B7+
SB3 WRTX *SAA* RETURN ADDRESS
SA7 RTCI SAVE REAL-TIME CLOCK AT INTERRUPT
EQ SAA SET ACCOUNTING ADJUSTMENT
ENDBLK
BLOCK DCP,(DUAL CPU OPERATION.)
PCXF SPACE 4,15
** PCXF - PROCESS CPU EXCHANGE REQUEST.
*
* ENTRY
*T, X0 42/,18/ PCXF
* (X5) = MONITOR MODE ENTRY TIME IF 180 MACHINE.
*
* EXIT TO */MONITOR/PMN4*.
*
* USES X - 1, 2, 3, 4, 7.
* A - 1, 7.
* B - 3.
PCX SA1 CL+CACX+A0 READ REQUEST WORD
NX3,B3 X1 SET PPU NUMBER
SX4 B1
ZR X1,/MONITOR/MTRX IF NO REQUESTS PRESENT
LX4 47
SX2 B3 SET OUTPUT REGISTER OFFSET
AX3 X4,B3
BX7 X1-X3
LX2 3
SA7 A1
TX0 X2+1,FP SET OUTPUT REGISTER ADDRESS
EQ /MONITOR/PMN4 PROCESS FUNCTION
ACQ SPACE 4,10
** ACQ - *ACQ* PREPROCESSOR FOR DUAL CPU CACHE MACHINE.
*
* ENTRY JOB ACTIVE IN THIS CPU.
* (B7) = CONTROL POINT ADDRESS.
*
* USES X - 1.
* A - 1.
* B - 6.
*
* EXIT TO *ACQ* VIA *CCC*.
ACQ BSS 0 ENTRY
SA1 B7+CWQW
SB6 /BUFIO/ACQ SET EXIT ADDRESS
EQ CCC CHECK CACHE MACHINE CPU SELECTION
APQ SPACE 4,10
** APQ - *APQ* PREPROCESSOR FOR DUAL CPU CACHE MACHINE.
*
* ENTRY JOB ACTIVE IN THIS CPU.
* (B7) = CONTROL POINT ADDRESS.
*
* USES X - 1.
* A - 1.
* B - 6.
*
* EXIT TO *APQ* VIA *CCC*.
APQ BSS 0 ENTRY
SA1 B7+CWQW
SB6 /MONITOR/APQ SET EXIT ADDRESS
EQ CCC CHECK CACHE MACHINE CPU SELECTION
CCA SPACE 4,15
** CCA - DUAL CPU CACHE MACHINE *CCAM* PROCESSOR.
*
* ENTRY JOB ACTIVE IN THIS CPU IF CPU 1.
* (B3) = *JAV* RETURN ADDRESS.
* (B7) = OLD CONTROL POINT ADDRESS.
* (X6) = OLD CONTROL POINT *STSW*.
* (B6) = NEW CONTROL POINT ADDRESS.
* (X0) .GE. 0 IF OLD CP/PCP IS SYSTEM CP OR PCP.
*
* EXIT TO */MONITOR/JAV* IF OLD CP JOB ADVANCE TO BE CHECKED.
* TO *PPRX* IF OLD CP JOB ADVANCE NOT TO BE CHECKED.
* (B7) = OLD CONTROL POINT ADDRESS.
*
* USES X - 1, 2.
* A - 1.
* B - 4, 6.
CCA BSS 0 ENTRY
TX2 B6,-SCA
PL X0,CCA1 IF OLD CP/PCP IS SYSTEM CP OR PCP
SB4 CCA1 SET *CPA* RETURN ADDRESS
EQ CPA CHECK OLD CP ACTIVITY
CCA1 SA1 B6+CWQW
SB6 /MONITOR/JAV SET TO CHECK ADVANCE ON OLD CP
NG X0,CCA2 IF OLD CP/PCP IS NOT SYSTEM CP OR PCP
SB6 /MONITOR/PPRX SET TO NOT CHECK ADVANCE ON OLD CP
CCA2 PL X2,/MONITOR/RB6 IF NEW CP/PCP IS SYSTEM CP OR PCP
* EQ CCC CHECK NEW CP CPU SELECTION
CCC SPACE 4,15
** CCC - CHECK CPU SELECTION FOR DUAL CPU CACHE MACHINE.
*
* ENTRY JOB ACTIVE IN THIS CPU.
* (B6) = EXIT ADDRESS.
* (X1) = *CWQW*.
* (A1) = ADDRESS OF *CWQW*.
*
* EXIT ASSIGNMENT OF CPU 1 PROHIBITED.
* CPU SWITCH REQUESTED IF EXECUTING IN CPU 1.
*
* USES X - 1, 2, 7.
* A - 1, 7.
CCC BSS 0 ENTRY
SX7 B1
SX2 A0
LX7 24-0
BX7 X1+X7 DISALLOW ASSIGNMENT OF CPU 1
SA7 A1
ZR X2,/MONITOR/RB6 IF JOB IN CPU 0
MX7 1
SA1 CSWL+A0
BX7 X7+X1 SET CPU SWITCH REQUEST
SA7 A1
JP B6 EXIT TO SPECIFIED ROUTINE
CPA SPACE 4,15
** CPA - CHECK PP AND TAPE ACTIVITY FOR DUAL CPU CACHE MACHINE.
*
* ENTRY (B4) = RETURN ADDRESS.
* (X6) = *STSW*.
* (B7) = CONTROL POINT ADDRESS.
*
* EXIT CPU ASSIGNMENT FLAGS RESTORED FROM USER CPU SELECTION
* IF NO PP OR TAPE ACTIVITY.
* (X6) = *STSW*.
* (B7) = CONTROL POINT ADDRESS.
*
* USES X - 1, 3, 7.
* A - 1, 3, 7.
CPA BSS 0 ENTRY
TX1 B7,-SCA
PL X1,/MONITOR/RB4 IF SYSTEM CP OR PCP
SX7 360B
MX1 4
LX1 48-56
BX7 X7+X1
BX7 X7*X6
NZ X7,/MONITOR/RB4 IF REMAINING PP OR TAPE ACTIVITY
SA1 B7+JCIW
SA3 B7+CWQW
MX7 58
LX7 24
LX1 24-36
BX3 X7*X3 CLEAR CPU ASSIGNMENT FLAGS
BX1 -X7*X1 CPU SELECTION
BX7 X3+X1 RESET CPU ASSIGNMENT FLAGS
SA7 A3+
JP B4 RETURN
CPE SPACE 4,10
** CPE - CPU SELECTION.
*
* ENTRY (B6) = EXIT ADDRESS.
* (B7) = CONTROL POINT ADDRESS.
*
* USES A - 4.
* B - 4.
* X - 4, 6.
CPE BSS 0 ENTRY
SB4 A0-CPAL-1 CHECK IF JOB IS ACTIVE IN THE OPPOSITE CPU
TX6 B7,-SCA CHECK FOR SYSTEM CONTROL POINT
SA4 -B4
ZR X6,CPE1 IF SYSTEM CONTROL POINT
AX4 24
SB4 X4+
EQ B4,B7,SAX IF JOB ACTIVE IN OPPOSITE CPU
CPE1 JP B6 RETURN
CPS SPACE 4
** CPS - CPU SELECTION.
*
* ENTRY FROM PPR.
CPS BSS 0 ENTRY
SB4 A0-CPAL-1 CHECK IF JOB IS ACTIVE IN THE OPPOSITE CPU
TX6 B7,-SCA CHECK FOR SYSTEM CONTROL POINT
SA4 -B4
ZR X6,CPS1 IF SYSTEM CONTROL POINT
AX4 24
SB4 X4+
EQ B4,B7,SAX IF JOB ACTIVE ON OPPOSITE CPU
** EXIT TO PROCESSOR WITH -
* (X1) = BITS 0 - 47 OF OUTPUT REGISTER.
* (X2) = *ACPP*.
* (X3) = PROCESOR CONTROL WORD.
* (X5) = OUTPUT REGISTER.
* (X7) = 0.
* (A2) = *ACPP* ADDRESS.
* (B6) = PROCESSOR ADDRESS.
* (B7) = CONTROL POINT ADDRESS.
CPS1 TJP (/PROBE/PPR,PROBE,B6) PROCESS REQUEST
DCP SPACE 4,20
** DCP - DUAL CPU *DCPM* FUNCTION PROCESSOR.
*
* EXIT TO /MONITOR/DCP3.
*
* ENTRY (X3) = *CWQW*.
* (A3) = *CWQW* ADDRESS.
* (X4) = 42 BIT MASK LEFT JUSTIFIED.
*
* EXIT TO */MONITOR/DCP3*.
* (X3) = *CWQW*.
* (A3) = *CWQW* ADDRESS.
* (X4) = 42 BIT MASK LEFT JUSTIFIED.
*
* USES X - 2, 6.
* A - 2, 6.
* B - 4.
* CLEAR *WQ* POINTER FROM PENDING CPU SWITCH REQUEST.
DCP SA2 CSWL CPU 0 SWITCH REQUEST
LX2 -24
SB4 X2
SB4 A3-B4
ZR B4,DCP1 IF SWITCH REQUEST FOR THIS JOB
SA2 A2+B1 CPU 1 SWITCH REQUEST
LX2 -24
SB4 X2+
SB4 A3-B4
NZ B4,/MONITOR/DCP3 IF NOT SWITCH REQUEST FOR THIS JOB
DCP1 BX6 X4*X2 CLEAR *WQ* POINTER FROM SWITCH REQUEST
LX6 24
SA6 A2+
EQ /MONITOR/DCP3 REMOVE *WQ* ENTRY
SJC SPACE 4,20
** SJC - DUAL CPU CACHE MACHINE *SJCM* FUNCTION PROCESSOR.
*
* ENTRY (X6) = *CWQW* WITH NEW CPU SELECTION.
* (A2) = *JCIW* ADDRESS.
* (X2) = *JCIW*.
* (X5) = NEW CPU SELECTION LEFT SHIFTED 24 BITS.
* (X3) = CPU SELECTION MASK LEFT SHIFTED 24 BITS.
*
* EXIT TO /MONITOR/SJC3.
* (X6) = *CWQW* WITH NEW CPU SELECTION.
* (A2) = *JCIW* ADDRESS.
* (X2) = *JCIW*.
* (X5) = NEW CPU SELECTION LEFT SHIFTED 24 BITS.
* (X3) = CPU SELECTION MASK LEFT SHIFTED 24 BITS.
*
* USES X - 6, 7.
SJC BSS 0 ENTRY
* THE ASSIGNMENT OF CPU 1 IS PROHIBITED IN CASE THE PP ISSUING
* THE *SJCM* FUNCTION IS ASSIGNED TO A SUBSYSTEM WHILE OTHER
* PP-S ARE ASSIGNED. WHEN THE REQUESTING PP DROPS, THE *DPPM*
* PROCESSOR WILL RESET THE *CWQW* CPU ASSIGNMENT FLAGS FROM THE
* *JCIW* CPU SELECTION IF NO OTHER ACTIVITY IS PRESENT.
SJC BSS 0 ENTRY
SX7 1 DISALLOW ASSIGNMENT OF CPU 1
LX7 24-0
BX6 X6+X7
EQ /MONITOR/SJC3 RETURN TO MAIN *SJCM* PROCESSOR
BNJ SPACE 4,15
** BNJ - EXTENSION TO *BNJ* FOR DUAL CPU MACHINES.
*
* ENTRY (X6) = 42 BIT MASK LEFT JUSTIFIED.
*
* EXIT TO */MONITOR/BNJ16*.
* (X3) = *CWQW* OF NEW JOB (DELINKED FROM *WQ*).
* (A3) = *CWQW* ADDRESS OF NEW JOB.
* (B4) = PRIORITY WITH FLAGS OF NEW JOB.
*
* USES X - ALL.
* A - 1, 2, 3, 4, 7.
* B - 3, 4, 5, 6.
*
* CALLS /MONITOR/ACS.
BNJ BSS 0 ENTRY
* SEARCH *WQ* FOR JOB THAT CAN USE THIS CPU AND UPDATE *WQ*
* LINKAGE.
* SEARCH LOOP REPLICATED FOR PERFORMANCE.
SA1 WQRL GET *WQ* POINTER
SB6 A0+59-25 SET THIS CPU SELECTION BIT SHIFT COUNT
BNJ1 SA3 X1 GET NEXT ENTRY
LX7 B6,X3
PL X7,BNJ2 IF JOB CAN USE THIS CPU
SA1 X3 GET NEXT ENTRY
LX7 B6,X1
NG X7,BNJ1 IF JOB CANNOT USE THIS CPU
BX7 -X6*X1 EXTRACT *WQ* LINK
BX3 X6*X3
BX7 X3+X7 MERGE LINK IN PREVIOUS ENTRY
SA7 A3 UPDATE *WQ* LINKAGE
SA3 A1+ GET SELECTED ENTRY
EQ BNJ3 CLEAR *WQ* LINK IN SELECTED ENTRY
BNJ2 BX7 -X6*X3 EXTRACT *WQ* LINK
BX1 X6*X1
BX7 X1+X7 MERGE LINK IN PREVIOUS ENTRY
SA7 A1 UPDATE *WQ* LINKAGE
BNJ3 UX0,B4 X3 UNPACK PRIORITY
BX7 X6*X3 CLEAR *WQ* LINK IN SELECTED ENTRY
ZR B4,BNJ3 IF NOT VALID *WQ* ENTRY FOR SELECTION
SA7 A3+
BX3 X7
LX7 59-49
NG X7,BNJ11 IF ACTIVE CPU SLICE
* SEARCH *WQ* FOR FIRST ENTRY AT OR BELOW PRIORITY OF NEW JOB
* AND ADVANCE CPU SERVICE CYCLE.
* SEARCH LOOP REPLICATED FOR PERFORMANCE.
SA1 WQRL GET *WQ* POINTER
SX7 3
SB3 BNJ5 SET *ACS* RETURN ADDRESS
LX7 48
BX7 X3+X7 SET PRIORITY FLAGS FOR COMPARISON
SX5 A3 SET NEW JOB *CWQW* ADDRESS
UX0,B6 X7 UNPACK PRIORITY WITH FLAGS
BNJ4 SA4 X1 GET NEXT ENTRY
UX0,B5 X4 UNPACK *WQ* ENTRY PRIORITY
LE B5,B6,/MONITOR/ACS IF ENTRY .LE. NEW JOB
SA1 X4 GET NEXT ENTRY
UX0,B5 X1 UNPACK *WQ* ENTRY PRIORITY
GT B5,B6,BNJ4 IF ENTRY .GT. NEW JOB
SX0 X4
BX4 X1
SX1 X0+
EQ /MONITOR/ACS ADVANCE SERVICE CYCLE
* UPDATE SERVICE CYCLE OF JOB IN OTHER CPU IF SAME PRIORITY AS
* NEW JOB.
BNJ5 SB3 A0-CPAL-1
SA1 -B3 GET OTHER CPU *CPAL*
LX1 -24
SA2 X1+STSW
LX2 59-56
MX6 -58
NG X2,BNJ6 IF SUB-CP ACTIVE
LX1 24 SET EXCHANGE PACKAGE ADDRESS
BNJ6 SA1 X1+CWQW GET OTHER CPU JOB *CWQW*
LX6 48-58
BX1 -X6*X1 CLEAR PRIORITY FLAGS
UX0 B5,X1 UNPACK PRIORITY OF OTHER CPU JOB
NE B5,B6,BNJ7 IF NOT SAME PRIORITY
SA7 A1+B1 SET SERVICE CYCLE AND CLEAR ACCUMULATORS
ERRNZ CSAW-CWQW-1
* DETERMINE IF SETTING CPU SLICE ACTIVE HAS CHANGED THE ORDER
* OF *WQ*.
BNJ7 LX4 59-49
PL X4,BNJ11 IF ALL ENTRIES HAD INACTIVE SLICE
SA1 WQRL
SB5 1000B INITIALIZE PREVIOUS ENTRY PRIORITY
BNJ8 SX2 A1 SET PREVIOUS ENTRY ADDRESS
SA1 X1
SB3 B5 SET PREVIOUS ENTRY PRIORITY
UX0,B5 X1 UNPACK *WQ* ENTRY PRIORITY
LT B5,B6,BNJ11 IF PRIORITY .LT. NEW JOB PRIORITY
LE B5,B3,BNJ8 IF ENTRY IN ORDER WITH PREVIOUS
* FIND END OF *WQ* ENTRIES TO MOVE AND DELINK FROM QUEUE.
BNJ9 SX4 A1 SET PREVIOUS ENTRY ADDRESS
SA1 X1+
UX0,B3 X1 UNPACK *WQ* ENTRY PRIORITY
EQ B3,B5,BNJ9 IF SAME PRIORITY AS PREVIOUS
SA2 X2
MX6 42
BX7 X6*X2 CLEAR OLD LINK
SX0 A1+
BX7 X7+X0 MERGE NEW LINK
SA7 A2+
* FIND POSITION IN *WQ* TO INSERT ENTRIES AND RELINK INTO
* QUEUE.
SA1 WQRL
BNJ10 SX7 A1 SET PREVIOUS ENTRY ADDRESS
SA1 X1+
UX0,B3 X1 UNPACK *WQ* ENTRY PRIORITY
LE B5,B3,BNJ10 IF POSITION NOT FOUND
SA4 X4 GET LAST ENTRY TO MOVE
BX2 -X6*X2 ADDRESS OF FIRST ENTRY TO MOVE
SX0 A1
SA1 X7
BX4 X6*X4 CLEAR OLD LINK
BX7 X4+X0 MERGE NEW LINK
SA7 A4
BX7 X6*X1 CLEAR OLD LINK
BX7 X7+X2 MERGE NEW LINK
SA7 A1
* SEARCH *WQ* FOR JOB THAT CAN PREEMPT JOB IN OTHER CPU.
* SEARCH LOOP REPLICATED FOR PERFORMANCE.
BNJ11 SB3 A0-CSWL-1
SA4 -B3 GET OTHER CPU *CSWL*
SA2 A4+TSCL-CSWL GET OTHER CPU *TSCL*
NG X4,/MONITOR/BNJ16 IF SWITCH REQUEST FOR OTHER CPU
SA1 WQRL GET *WQ* POINTER
SB6 A0-59+24 SET OTHER CPU SELECTION BIT SHIFT COUNT
UX0,B3 X2 UNPACK PRIORITY OF JOB IN OTHER CPU
SB6 -B6 SET SELECTION BIT FOR OTHER CPU
BNJ12 SA2 X1+ GET NEXT ENTRY
UX0,B5 X2 UNPACK *WQ* ENTRY PRIORITY
LX7 B6,X2
LE B5,B3,/MONITOR/BNJ16 IF ENTRY .LE. OTHER CPU JOB
PL X7,BNJ13 IF JOB CAN USE OTHER CPU
SA1 X2+ GET NEXT ENTRY
UX0,B5 X1 UNPACK *WQ* ENTRY PRIORITY
LX7 B6,X1
LE B5,B3,/MONITOR/BNJ16 IF ENTRY .LE. OTHER CPU JOB
NG X7,BNJ12 IF JOB CANNOT USE OTHER CPU
BNJ13 MX7 1
BX7 X4+X7
SA7 A4+ REQUEST SWITCH OF OTHER CPU
EQ /MONITOR/BNJ16 SET ACTIVE CPU STATUS
RCC SPACE 4,30
** RCC - EXTENSION TO *RCC* FOR DUAL CPU MACHINES.
*
* ENTRY (X1) = THIS CPU RECALL SLICE EXPIRATION TIME.
* (X2) = CURRENT MILLISECOND CLOCK.
* (X3) = *CWQW* OF RECALLED JOB.
* (X4) = *CSWL* FOR THIS CPU.
* (X7) = 24 BIT MASK LEFT JUSTIFIED.
* (A3) = *CWQW* ADDRESS OF RECALLED JOB.
* (A4) = ADDRESS OF *CSWL* FOR THIS CPU.
* (B3) = EXIT ADDRESS.
* (B4) = RECALLED JOB PRIORITY AND FLAGS.
* (B5) = THIS CPU JOB PRIORITY AND FLAGS.
*
* EXIT TO */MONITOR/RCC12* TO CHECK RECALL SLICE EXPIRATION
* FOR THIS CPU.
* TO */MONITOR/RCC13* TO UPDATE *CWQW* AND REQUEST CPU
* SWITCH.
* TO */MONITOR/RCC14* TO UPDATE *CWQW* AND CLEAR *MTR*
* BYPASS FLAG.
* (X3) = *CWQW* OF RECALLED JOB.
* (X4) = *CSWL* OF CPU FOR SWITCH REQUEST IF EXIT TO
* *RCC13*.
* (A3) = *CWQW* ADDRESS OF RECALLED JOB.
* (A4) = *CSWL* ADDRESS OF CPU FOR SWITCH REQUEST IF
* EXIT TO *RCC13*.
* (B3) = EXIT ADDRESS.
*
* USES X - 0, 1, 4, 6.
* B - 6.
* A - 1, 4.
RCC SB6 A0-59+24 SET OTHER CPU SELECTION BIT SHIFT COUNT
SB6 -B6
LX0 X3,B6
PL X0,RCC1 IF JOB CAN USE OTHER CPU
SB6 A0+59-25 SET THIS CPU SELECTION BIT SHIFT COUNT
LX0 B6,X3
NO
NG X0,/MONITOR/RCC14 IF JOB CANNOT USE THIS CPU
* CHECK PRIORITY OF JOB WITH SELECTION FOR THIS CPU.
GT B4,B5,/MONITOR/RCC13 IF NEW JOB .GT. THIS CPU JOB
LT B4,B5,/MONITOR/RCC14 IF NEW JOB .LT. THIS CPU JOB
EQ /MONITOR/RCC12 CHECK RECALL SLICE EXPIRED
* GET PARAMETERS FOR JOB IN OTHER CPU.
RCC1 SB6 A0-TSCL-1
IX6 X2-X1 CHECK THIS CPU RECALL SLICE EXPIRED
SA1 -B6 GET OTHER CPU PARAMETERS
SB6 A0+59-25 SET THIS CPU SELECTION BIT SHIFT COUNT
LX0 B6,X3
UX1,B6 X1 GET PRIORITY OF JOB IN OTHER CPU
BX1 -X7*X1
IX1 X2-X1 CHECK OTHER CPU RECALL SLICE EXPIRED
PL X0,RCC2 IF JOB CAN USE THIS CPU
* CHECK PRIORITY OF JOB WITH SELECTION FOR OTHER CPU.
SA4 A1+CSWL-TSCL
NG X4,/MONITOR/RCC14 IF OTHER CPU SWITCH REQUEST PENDING
GT B4,B6,/MONITOR/RCC13 IF NEW JOB .GT. OTHER CPU JOB
LT B4,B6,/MONITOR/RCC14 IF NEW JOB .LT. OTHER CPU JOB
NG X1,/MONITOR/RCC14 IF CPU RECALL SLICE NOT EXPIRED
EQ /MONITOR/RCC13 SWITCH OTHER CPU
* CHECK PRIORITY OF JOB WITH NO CPU SELECTION.
RCC2 GT B4,B5,RCC4 IF NEW JOB .GT. THIS CPU JOB
GT B4,B6,RCC5 IF NEW JOB .GT. OTHER CPU JOB
LT B4,B5,RCC3 IF NEW JOB .LT. THIS CPU JOB
PL X6,/MONITOR/RCC13 IF THIS CPU RECALL SLICE EXPIRED
RCC3 LT B4,B6,/MONITOR/RCC14 IF NEW JOB .LT. OTHER CPU JOB
NG X1,/MONITOR/RCC14 IF CPU RECALL SLICE NOT EXPIRED
EQ RCC5 SWITCH OTHER CPU IF NO CURRENT REQUEST
RCC4 LE B4,B6,/MONITOR/RCC13 IF NEW JOB .LE. OTHER CPU JOB
GE B6,B5,/MONITOR/RCC13 IF OTHER CPU JOB .GE. THIS CPU
RCC5 SA4 A1+CSWL-TSCL
NG X4,/MONITOR/RCC14 IF OTHER CPU SWITCH REQUEST PENDING
EQ /MONITOR/RCC13 SWITCH OTHER CPU
SAX SPACE 4
** SAX - SET ALTERNATE CPU EXCHANGE.
*
* ENTRY (A5) = OUTPUT REGISTER ADDRESS.
*
* EXIT TO PPRX.
*
* CALLS SPB.
SAX TB3 A0-1,-CX SET ALTERNATE CPU
SX0 B1
SA1 -B3
SB3 /MONITOR/PPRX *SPB* EXIT ADDRESS
TJP (/PROBE/ACE,PROBE,/MONITOR/SPB) SET PPU REQUEST BIT
EXPACS SPACE 4,10
** IXP1 - CPU 1 IDLE EXCHANGE PACKAGE.
IXP1 EXP P=2,RA=IDL1,FL=5,MA=IXP1,X1=77777777777777777777B
* *STSW*.
VFD 3/BCPS *B* CPU STATUS
VFD 57/0
* *CWQW*.
VFD 2/1
VFD 7/IDCS CPU PRIORITY
VFD 1/0
VFD 1/1 CPU SLICE ACTIVE
VFD 1/0 RECALL FLAG
VFD 1/1 EXTENDED CPU SLICE INCOMPLETE
VFD 2/0
VFD 9/0 SERVICE CYCLE
VFD 9/SSSC*JCBE SERVICE PARAMETERS INDEX
VFD 1/0 *MTR* BYPASS FLAG
VFD 2/2 SELECT CPU 1
VFD 3/0
VFD 3/DIXT DUAL CPU EXCHANGE PACKAGE TYPE
VFD 18/0 *WQ* LINKAGE
* *CSAW*.
VFD 60/0
* *CTMW*.
VFD 60/0
** IDL1 - CPU 1 IDLE PROGRAM.
IDL1 CON 0 (RA) FOR IDLE PROGRAM
CON 0 (RA+1) FOR IDLE PROGRAM
+ CX2 X1 DELAY (60 BITS)
* EQ 2 LOOP WITHOUT DELAY (CACHE MACHINE)
CX2 X1 DELAY (60 BITS)
EQ 2 LOOP
SPACE 4
** SCX1 - SUB-CONTROL POINT EXCHANGE PACKAGE - CPU 1.
*
* NOTE - THIS EXCHANGE PACKAGE IS ALSO USED FOR THE CODE WHICH
* INITIATES THE CPU1 IDLE PACKAGE ON A CACHE MACHINE.
* THE VALUES PRESET FOR *A0* AND *B0* ARE REQUIRED BY
* MICROCODE ON A DUAL CPU CACHE MACHINE.
SCX1 EXP P=IIP,FL=(,MCM),A0=1,B0=210B
IIP SPACE 4,10
** IIP - INITIATE IDLE PACKAGE FOR DUAL CPU CACHE MACHINE.
*
* EXIT (X1) = ZERO (THIS IS REQUIRED BY *STL*).
IIP BSS 0 ENTRY
SA2 EIBP SET *MTR* EXCHANGE PACKAGE ADDRESS
MX7 42
LX7 32
BX2 X7*X2
SX6 /MONITOR/MXP
LX6 32
BX6 X2+X6
SA6 A2
SB2 IXP1
XJ B2 START CPU1 IDLE PACKAGE
SPACE 4,10
ENDBLK
BLOCK MMF,(MULTI-MAINFRAME PROCESSING ROUTINES.)
ARM SPACE 4
** ARMF - ADVANCE RUNNING TIME AND MULTI-MAINFRAME PROCESSING.
* *ARMF* IS CALLED ONCE EVERY SECOND BY *MTR* TO DO THE
* FOLLOWING.
* 1) STATUS FLAG REGISTER BITS.
* 2) WRITE REAL TIME CLOCK TO EXTENDED MEMORY.
* 3) DETERMINE STATUS OF OTHER MAINFRAMES BY INTERROGATING
* THEIR EXTENDED MEMORY CLOCKS (EVERY 2 SECONDS).
* 4) CHECK FOR INTER-MAINFRAME MESSAGE REQUEST.
*
* ENTRY
*T X0 24/,12/ S,6/,18/ ARMF
* (B7) = S = 0 IF MAINFRAMES TO BE STATUSED.
* EXITS TO *ART* IF NORMAL PROCESSING.
* EXITS TO *EPR* IF DOWN MACHINE OR MESSAGE PROCESSING TO BE
* DONE IN PROGRAM MODE.
ARM TSX2 (402B,ESM,6B) STATUS FLAG REGISTER
LX2 21
SX4 B1
SX6 TMMF
LX4 17 POSITION BIT TO STATUS
LX6 36
SB3 A0 SAVE CPU NUMBER
BX0 X2+X4
SX5 .COMI CHECK COMMUNICATION PROCESSING
ARM1 RE /ECS/FRWC
BX6 X4+X6
+ AX4 1
BX0 X2+X4
NZ X4,ARM1 IF MORE BITS TO STATUS
SA6 EFRL STORE FLAG REGISTER BITS
BX5 X5*X6
TX0 ECCM EXTENDED MEMORY CLOCK LOCATION
SA0 PDTL
SX3 A0
LX3 30
BX0 X0+X3
LX5 58-PMRF-COMI POSITION PROGRAM MODE REQUEST BIT (PMRF)
WE 1 WRITE EXTENDED MEMORY CLOCK
PER /ECS/ECH1,/ECS/PER HANG ON UNRECOVERED WRITE ERROR
NZ B7,ARM16 IF MAINFRAMES NOT TO BE STATUSED
TX0 ETLT*100B+SMET,ECLT
TX0 X0,TCNT
SA0 MBUF
SX3 A0+
LX3 30
BX0 X0+X3
SB7 MXMF
* CHECK STATUS OF OTHER MACHINES.
RE MXMF READ EXTENDED MEMORY CLOCKS
PER /MMF/ARM16,/ECS/PER PARITY ERROR PROCESSING
ARM2 ZR B7,ARM16 IF END OF MACHINES
SA3 TMMF-1+B7
SB7 B7-B1
SB4 X3
SA1 MBUF+B7 READ CURRENT CLOCK VALUE
SA2 ARMA+B7 LAST CLOCK VALUE
BX2 X1-X2
SX7 B1
ZR X2,ARM4 IF CLOCK NOT CHANGING
* PROCESS MACHINE WITH CLOCK CHANGING.
BX6 X1
SA6 A2 STORE NEW CLOCK VALUE
EQ B4,B1,ARM2 IF IN ACTIVE STATE
SB4 X3-MFDA-1
PL B4,ARM2 IF PROCESSING DOWN MACHINE
* SET MACHINE AS CURRENTLY BEING ACTIVE IN *MFST*.
SA0 A3+
SX3 A3+
TX0 B7+ETLT*100B+MFET,ECLT
TX0 X0,TCNT
LX3 30
BX0 X0+X3
RE 1
+ SA3 A0 SET STATE
MX2 42
BX3 X2*X3
BX7 X7+X3
SA7 A3
EQ ARM2 PROCESS NEXT MACHINE
* ADVANCE MACHINE STATE.
ARM3 IX7 X7+X3
SA7 A3
EQ ARM2 PROCESS NEXT MACHINE
* MACHINE CLOCK IS NOT CHANGING.
ARM4 ZR B4,ARM2 IF DOWN STATE
EQ B4,B1,ARM3 IF ACTIVE STATE - ADVANCE TO *MFD1*
SB4 X3-MFD1
ZR B4,ARM3 IF *MFD1* STATE - ADVANCE TO *MFD2*
EQ B4,B1,ARM6 IF *MFD2* STATE
SB4 X3-MFDA
ZR B4,ARM7 IF *MFDA* STATE
NE B4,B1,ARM2 IF WAITING FOR *1MR* COMPLETE
* *MFCD* - CALL *1MR* TO RELEASE TRACK INTERLOCKS.
SA1 ARMB SET PP CALL
SX0 B7
IX6 X1+X0
TB7 SCA SET SYSTEM CONTROL POINT
PX0 X0,B3 SAVE CPU NUMBER
SB4 B0 SET LIBRARY SEARCH NEEDED
SB3 ARM5 SET EXIT ADDRESS
EQ /MONITOR/APQ ASSIGN PP
ARM5 SB7 X0 RESTORE MACHINE INDEX
UX0,B3 X0
SX7 B1+
ZR X1,ARM2 IF PP NOT ASSIGNED - PROCESS NEXT MACHINE
SA3 TMMF+B7 RESTORE (X3)
EQ ARM3 ADVANCE STATE
* *MFD2* - MACHINE IS DOWN FOR TWO STATUSES.
ARM6 BX1 X3
LX1 59-46
PL X1,ARM3 IF NOT LOW SPEED PORT MACHINE
MX7 12
SA1 ARMD SET MESSAGE
BX4 X7*X3
LX4 -18
BX7 X1+X4
TA7 MS2W,SCA
SA1 A1+B1
BX7 X1
SA7 A7+B1
SA1 A1+B1
LX4 -24
BX7 X1+X4
SA7 A7+1
EQ ARM2 PROCESS NEXT MACHINE
* *MFDA* - DOWN ACKNOWLEGED STATE PROCESSOR.
ARM7 SA1 ARMC SET MESSAGE *MACHINE XX DOWN.*
MX7 12
BX4 X7*X3
LX4 12
BX7 X1+X4
TA7 MS2W,SCA
SA1 A1+B1
BX7 X1
SA7 A7+B1
SX4 B1
LX4 B7
SX5 B7+B1 SET MACHINE MASK FIELD BEING PROCESSED
SB4 CIRI
** SET *CIRI* INTERLOCK WHICK CONTROLS THE RELEASEING OF
* A DOWN MACHINES FLAG REGISTER AND DEVICE INTERLOCKS.
* IF THE *CIRI* INTERLOCK IS HELD BY THE DOWN MACHINE
* THE INTERLOCK WILL BE RELEASED AND ANOTHER ATTEMPT
* WILL BE MADE TO OBTAIN THE INTERLOCK.
ARM8 SB6 ARM9 SET *SFR* RETURN
EQ /ECS/SFR SET *CIRI* FLAG BIT
ARM9 SA0 MBUF
TX0 ETLT*100B+FRET,ECLT SET ADDRESS OF FLAG WORDS
TX0 X0,TCNT
SX3 A0+
LX3 30
BX0 X3+X0
RE 18
PER /MMF/ARM16,/ECS/PER PARITY ERROR PROCESSING
TSX0 (402B,ESM,6B) STATUS FLAG REGISTER
LX0 21
BX0 X0+X4
ZR X7,ARM11 IF INTERLOCK OBTAINED
* CHECK *CIRI* INTERLOCK HELD BY DOWN MACHINE.
SA2 A0+B4 READ FLAG WORD
AX2 12
BX2 X4*X2
ZR X2,ARM15 IF HELD BY RUNNING MACHINE
SB6 ARM8 SET *CFR* RETURN
EQ /ECS/CFR CLEAR *CIRI* INTERLOCK
* CLEAR *TRTI* INTERLOCK IF HELD BY DOWN MACHINE.
ARM10 SX2 X4+.TRTI CLEAR MACHINE MASK AND *TRTI* FLAG BITS
TSX0 (403B,ESM,7B)
LX0 21
BX0 X0+X2
ARM11 RE /ECS/FRWC
EQ ARM10 IF *TRTI* HELD BY DOWN MACHINE
SB4 18
SB7 -B1 SET FIRST CALL TO *SSD*
MX7 -12
SB6 ARM12 SET *CFR* RETURN
SB5 ARM13 SET *SSD* RETURN
* CLEAR FLAG REGISTER BITS.
ARM12 SB4 B4-B1
SA0 MBUF
SA3 A0+B4 READ FLAG WORD
NG B4,/PROGRAM/SSD IF END OF FLAG BITS
BX3 X3-X5
BX3 -X7*X3
ZR X3,/ECS/CFR IF INTERLOCK HELD BY DOWN MACHINE
EQ ARM12 CLEAR BITS
* CLEAR DEVICE INTERLOCKS HELD BY DOWN MACHINES.
ARM13 SX2 A0 SET BUFFER ADDRESS
SX4 X4+SDGL
LX2 30
BX0 X2+X4 FORM EXTENDED MEMORY ADDRESS
MX4 -6
NG B7,ARM14 IF END OF SHARED DEVICES
RE 1
PER /PROGRAM/SSD,/ECS/PER PARITY ERROR PROCESSING
SA2 A0 READ *SDGL*
BX7 -X4*X2
AX7 1
BX3 X7-X5
NZ X3,/PROGRAM/SSD IF NOT INTERLOCKED BY DOWN MACHINE
BX7 X4*X2
SA7 A2 CLEAR INTERLOCK
WE 1
PER /ECS/ECH1,/ECS/PER HANG ON UNRECOVERED WRITE ERROR
EQ /PROGRAM/SSD SEARCH FOR SHARED DEVICE
ARM14 SB7 X5-1 RESTORE (B7)
SX0 B1+
SA3 TMMF+B7 ADVANCE STATE
IX7 X3+X0
SA7 A3
ARM15 SA1 EFRL RESTORE (X5)
SX5 .COMI
BX5 X5*X1
LX5 58-PMRF-COMI
SB4 CIRI
SB6 ARM2
EQ /ECS/CFR CLEAR FLAG BIT AND ADVANCE MACHINE
ARM16 SA0 B3 RESTORE CPU NUMBER
BX0 X5
NZ X5,/MONITOR/EPR IF PROGRAM MODE PROCESSING TO PERFORM
EQ /MONITOR/.ARTF ADVANCE RUNNING TIME
ARMA BSS MXMF MACHINE CLOCK TEMPORARIES
ARMB VFD 18/0L1MR,6/0,12/0,6/CDV,18/1
ARMC CON 10HMACHINE XX-2RXX
CON 6L DOWN.
ARMD CON 10HIF XX DOWN-2RXX*1BS30
CON 10H ENTER *DO
CON 10HWN,MID=XX*-2RXX*1BS6
TMMF BSS 0 MAINFRAME STATE TABLE
DUP MXMF,1
DATA 0
TITLE PPU REQUEST PROCESSOR.
SFI SPACE 4,15
** SFI - SET *FATI* INTERLOCK.
*
* *AFAM* EXTENSION TO SET *FATI* FLAG REGISTER INTERLOCK AND
* READ *FAT* ENTRY FROM EXTENDED MEMORY.
*
* ENTRY (X2) = *FAT* INDEX.
*
* EXIT (X1) = GLOBAL COUNT WORD FROM *FAT*.
* (B3) = CPU NUMBER.
* TO *REJ*, IF UNABLE TO SET *FATI* INTERLOCK.
* TO *AFA1*, IF SUCCESSFUL READ OF *FAT* ENTRY.
* TO *PMR*, IF PARITY ERROR IN READING *FAT*.
SFI TSX0 (400B,ESM,4B) SELECT
SX1 .FATI
LX0 21
SB3 A0
BX0 X0+X1
LX2 FATS POSITION *FAT* INDEX
RE /ECS/FRWC SET *FATI* INTERLOCK
EQ /PROGRAM/REJ
* THIS WORD IS CHANGED BY *AFAM* PRESET.
SFIA SA0 MBUF SET CM ADDRESS FOR READ
TX0 X2+FAST*100B,TCNT SET FAST ATTACH TABLE ADDRESS
SX1 A0+
LX1 30
BX0 X0+X1
RE 2+MXMF
PER /MMF/SFI1,/ECS/PER PARITY ERROR PROCESSING
SA0 A0+B1 ADJUST ADDRESS TO GLOBAL COUNT WORD
SX1 B1
IX0 X0+X1
LX1 30
IX0 X0+X1
SA1 A0 READ GLOBAL WORD FROM EXTENDED MEMORY
EQ /MONITOR/AFA1 CONTINUE
* PARITY ERROR PROCESSOR.
SFI1 SB6 /PROGRAM/REJ SET *SFR* RETURN
SB5 /MONITOR/PPRX SET *REJ* RETURN
SB4 COMI SET PARITY ERROR RECOVERY NEEDED
JP /ECS/SFR SET FLAG BIT
CFI SPACE 4,10
** CFI - CLEAR *FATI* INTERLOCK.
*
* *AFAM* EXTENSION TO UPDATE LOCAL MACHINE COUNTS, CLEAR
* *FATI* FLAG REGISTER INTERLOCK AND WRITE *FAT* ENTRY TO
* EXTENDED MEMORY.
*
* ENTRY (XO) = *FAT* ADDRESS IN EXTENDED MEMORY.
* (X7) = 1/1, 59/0
* (B3) = CPU NUMBER.
*
* EXIT (X7) = 0.
* TO *ECH*, IF UNRECOVERED WRITE ERROR OR REJECT IN
* CLEARING FLAG INTERLOCK.
* TO *AFA6*, IF SUCCESSFUL WRITE OF *FAT* ENTRY.
CFI LX7 1-59 GET NON-ROLLABLE BIT
BX5 X7*X6
SA3 B4+ READ LOCAL WORD FROM CM
TA2 A6,MIN READ LOCAL WORD FROM ECS
IX6 X3-X4
BX3 -X7*X6
IX6 X3+X5
SA6 A3
IX6 X2-X4
* WRITE UPDATED ENTRY BACK TO ECS.
BX2 -X7*X6
IX6 X2+X5
BX7 X7-X7
SA6 A2+ STORE LOCAL WORD TO BE WRITTEN TO ECS
WE 1+MXMF
PER /ECS/ECH1,/ECS/PER HANG ON UNRECOVERED WRITE ERROR
* RELEASE FLAG REGISTER INTERLOCK.
CFI1 TSX0 (403B,ESM,7B)
LX0 21
SX2 .FATI
BX0 X0+X2 SET FLAG REGISTER FUNCTION
SA0 B3 RESTORE CPU NUMBER
RE /ECS/FRWC CLEAR *FATI* INTERLOCK
RJ /ECS/ECH HANG ON HALF EXIT
EQ /MONITOR/AFA6 RETURN
AFAP SPACE 4,10
** AFAP - *AFAM* PRESET.
*
* *AFAM* PRESET IS EXECUTED ON THE FIRST *AFAM* CALL.
* THIS IS REQUIRED SINCE THE *FAT* TRACK IS NOT KNOWN UNTIL
* AFTER *0MF* HAS EXECUTED TO ALLOCATE IT.
AFAP MX6 -18 RESET MONITOR MODE ADDRESS
BX3 X6*X3
SX6 /MONITOR/.AFAM
IX6 X6+X3
MX4 -11
SA6 TPPR+AFAM-CPUM
TA3 ALGL,EMS SET FAST ATTACH TABLE ADDRESS
SX6 2020B
TLX6 0,TNSC
BX4 -X4*X3
IX6 X6*X4
SA3 SFIA READ INSTRUCTION WORD
IX6 X3+X6
SA6 A3
EQ /MONITOR/.AFAM ENTER PROCESSOR
SPACE 4
** MBUF - SCRATCH BUFFER FOR USE IN MONITOR MODE.
MBUF BSS 18
TITLE MMF PROGRAM MODE PROCESSING ROUTINES.
QUAL PROGRAM
CLM SPACE 4
** CLM - CHECKPOINT LOCAL MST TO ECS.
*
* ENTRY (A3) = MST ADDRESS OF SHARED DEVICE.
* (B5) = EXIT ADDRESS.
*
* EXIT ENTIRE LOCAL AREA OF MST WRITTEN TO ECS.
*
* USES X - 0, 4.
* B - 3.
* A - 4.
CLM SA4 A3+SDGL READ ECS ADDRESS OF MST
SB3 A0 SAVE CPU NUMBER
AX4 36
* ENTER HERE FROM *CDI*.
CLM0 SA0 A3+GLGL START OF LOCAL MST
TX0 X4+GLGL-LLLL,MSL ECS ADDRESS OF LOCAL AREA
MX4 -24
BX0 -X4*X0
SX4 A0+
LX4 30
BX0 X4+X0
WE LLLL
PER /PROGRAM/CLM1,/ECS/PER IGNORE UNRECOVERED MRT ERROR
CLM1 SA0 B3 RESTORE CPU NUMBER
JP B5 EXIT
CDI SPACE 4,15
** CDI - CLEAR DEVICE INTERLOCK.
*
* ENTRY (X1) = FIRST WORD OF TRT TO UPDATE IN ECS.
* (X3) = 1.
* (X4) = ADDRESS OF MST IN ECS.
* (X5) = LAST WORD + 1 OF TRT TO UPDATE IN ECS.
* (X6) = SDGL WORD OF MST.
* (X7) = STATUS TO RETURN O OUTPUT REGISTER.
* (B4) = TRT LINK WORD TO UPDATE.
* (B5) = EXIT ADDRESS.
* (B6) = FIRST WORD ADDRESS OF TRT IN CM.
* (A4) = ADDRESS OF SDGL WORD OF MST.
*
* EXIT (OR) = (X7)
CDI1 MX2 -6 CLEAR DEVICE INTERLOCK
SB3 A0 SAVE CPU NUMBER
LX3 6
BX6 X2*X6
MX2 -24
BX4 -X2*X4
NG X5,CDI3 IF NO UPDATE OF TRT
SA0 X1+B6 SET FIRST WORD TO WRITE TO ECS
IX0 X3+X4
LT B4,B6,CDI2 IF NO LINK WORD
SX2 A0-B4
NG X2,CDI2 IF LINK WORD IN UPDATING REGION
SA0 B4 START UPDATE AT LINK WORD
CDI2 SX1 A0-B6 FIRST WORD TO UPDATE
IX5 X5-X1 LAST - FIRST
IX0 X0+X1
SB4 X5 SET WORD COUNT
SX2 A0
LX2 30
BX0 X2+X0
MX2 -10
BX2 -X2*X5
SX2 X2-1000B-1
+ PL X2,* IF WORD COUNT .GT. 1000
WE B4 UPDATE TRT IN ECS
RJ /ECS/ECH HANG ON WRITE ERROR
CDI3 IX6 X3+X6 SET UP-TO-DATE COPY FOR THIS MACHINE
SA0 A3
SA6 A4
SX6 A0
LX6 30
BX0 X4+X6
WE SDGL+1
RJ /ECS/ECH HANG ON WRITE ERROR
SA7 A5 STORE OUTPUT REGISTER
EQ CLM0 WRITE LOCAL MST
SDI SPACE 4,25
** SDI - SET DEVICE INTERLOCKED.
* THE DEVICE INTERLOCK CONTROLS THE UPDATING OF THE TRT AND
* MST WORDS TDGL, ACGL AND SDGL.
*
* ENTRY (X3) = (TDGL).
* (X4) = ECS ADDRESS OF MST.
* (X6) = DEVICE INTERLOCK BITS FROM *SDGL*.
* (B3) = CTR EXIT ADDRESS. NOTE - EXIT IS TO CTR2.
* (B5) = PRG IF IN PROGRAM MODE.
* (B6) = 0 IF NO INTERLOCKING TO PERFORM.
* (B6) .GT. 0 IF TO INTERLOCK AND UPDATE MST/TRT.
* (A3) = CM ADDRESS OF MST.
* (A4) = ADDRESS OF *ACGL* WORD IN MST.
*
* EXIT (X0) = 12/TRT LENGTH + 2000B, 48/ECS ADDRESS OF MRT.
* (X5) = -7777B
* (B4) = TRT LENGTH.
*
* USES X - 0, 1, 2, 4, 5, 6, 7.
* A - 1, 2, 4, 6.
* B - 3, 4, 5, 6.
*
* NOTE - (A0) IS SET TO 2 FOR PROGRAM MODE MONITOR.
SDI AX3 24
MX2 -24
BX4 -X2*X4
TSX2 (400B,ESM,4B)
LX2 21
BX3 -X5*X3 TRT LENGTH
MX7 -FRRC FLAG REGISTER RETRY COUNT
ZR B6,SDI8 IF NO READ OF MST/TRT
SB6 PRG ZERO IF CALLED FOR PROGRAM MODE
SX5 A0+ SAVE CPU NUMBER
SA0 SDIA ENSURE (A0) .LT. FL FOR FLAG OPERATION
NZ X6,SDI10 IF DEVICE INTERLOCKED BY THIS MACHINE
TX6 .TRTI,MMK
* SET *TRTI* FLAG REGISTER INTERLOCK.
SDI1 LX7 -1 DECREMENT RETRY COUNT
BX0 X2+X6 SET FLAG REGISTER FUNCTION
NG X7,SDI10 IF FAILED TO INTERLOCK FLAG REGISTER
RE /ECS/FRWC
EQ SDI1 RETRY
* READ MST FROM ECS.
SX0 A0+
LX0 30
BX0 X4+X0 SET ADDRESS OF MST IN ECS
NE B5,B6,SDI2 IF MONITOR MODE
SX5 B1+B1 SET (A0) FOR PROGRAM MODE
RE SDGL+1 READ MST (PROGRAM MODE)
PER /PROGRAM/SDI11,/PROGRAM/PER PARITY ERROR PROCESSING
EQ SDI3
SDI2 RE SDGL+1 READ MST (MONITOR MODE)
PER /PROGRAM/SDI9,/ECS/PER PARITY ERROR PROCESSING
* SWITCH REQUEST TO PROGRAM MODE ON ERROR
* CHECK DEVICE INTERLOCK.
SDI3 SA2 SDIA+SDGL
MX7 -6
BX4 -X7*X2
NZ X4,SDI9 IF MST/TRT INTERLOCK SET
SA4 A4 READ SDGL WORD FROM CM MST
BX7 X2-X4
ZR X7,SDI7 IF NO UPDATE OF MST/TRT NEEDED
AX7 36
BX2 X1
+ NE B5,B6,SDI9 IF MONITOR MODE - CANNOT READ TRT
NZ X7,* IF BAD ECS ADDRESS
SB6 SDI4 *CMP* *MSR* RETURN ADDRESS
SA0 PBUF SET CM ADDRESS OF TRANSFER
SX5 B3 SAVE RETURN ADDRESS
SB7 X3 TRT LENGTH
SA1 A3+TRLL GET FWA OF TRT
SB3 X1-MECB
SX3 X0+TRST*100B START OF TRT IN ECS
SB3 A0-B3
* TRT READ LOOP.
SDI4 SB4 MECB MAXIMUM ECS TRANSFER SIZE
SX1 A0
LX1 30
BX0 X3+X1 ECS ADDRESS OF TRT READ
SB7 B7-B4 DECREMENT WORD COUNT
SX3 X3+B4 INCREMENT ECS ADDRESS OF TRT
SB3 B3-B4 INCREMENT FOR *CMP* *MSR*
PL B7,SDI5 IF NOT LAST SHORT BLOCK TO READ
SB4 B7+B4 SET SHORT BLOCK WORD COUNT
BX1 X2 RESTORE (X1)
LT B4,B1,SDI6 IF END OF TRANSFER
SDI5 RE B4 READ TRT BLOCK
PER /PROGRAM/SDI11,/PROGRAM/PER PARITY ERROR PROCESSING
SX0 A0 STARTING ADDRESS OF MOVE
SX1 B3 DIFFERENCE
TJP (/CME/MSR,CME,/PROGRAM/CMP,CMU,/MONITOR/MSR)
SDI6 SB5 PRG RESET (B5)
SA2 SDIA+ACGL COPY MST FROM BUFFER
SA4 SDIA+SDGL
BX6 X2
SA2 A2-B1
SA6 A3+B1
ERRNZ ACGL-1
SB3 X5 RESTORE RETURN ADDRESS
LX3 X2
BX7 X2
LX3 24
SX5 B1+B1 SET (A0) TO 2 FOR PROGRAM MODE
SA7 A3
AX3 48 SET LENGTH OF TRT
* WRITE INTERLOCKED MST TO ECS.
SDI7 TX6 MIL SET MST INTERLOCKS
BX7 X4+X6
AX4 36
SA7 A3+SDGL
MX7 -24
BX4 -X7*X4
SX7 A3
LX7 30
BX0 X4+X7
SA0 A3
WE SDGL+1
RJ /ECS/ECH HANG ON WRITE ERROR
* CLEAR TRTI INTERLOCK.
TSX2 (402B,ESM,6B) STATUS FLAG REGISTER TO INSURE SET
TX6 MMK
LX2 21
BX0 X2+X6
SX6 X6+.TRTI
RE /ECS/FRWC STATUS FLAG BIT (HALF EXIT EXPECTED)
SA0 X5 RESTORE CPU NUMBER
MX5 -12
PL X5,* IF FLAG BIT NOT SET
TSX2 (403B,ESM,7B)
LX2 21
BX0 X2+X6
RE /ECS/FRWC CLEAR FLAG REGISTER INTERLOCK
RJ /ECS/ECH HANG ON HALF EXIT
SDI8 TX0 1000B,MRT
SB4 X3
IX0 X0+X4 SET MRT ADDRESS
PX0 X0,B4 PACK TRT LENGTH IN (X0)
EQ CTR2 RETURN
* CLEAR FLAG REGISTER AND EXIT.
SDI9 TSX0 (403B,ESM,7B)
LX0 21
BX0 X0+X6
RE /ECS/FRWC CLEAR FLAG REGISTER INTERLOCK
RJ /ECS/ECH HANG ON HALF EXIT
SDI10 SA0 X5 RESTORE (A0)
EQ B5,B6,REJ IF PROGRAM MODE - REJECT REQUEST
SA5 A5
BX7 X5
EQ /MONITOR/PMR SWITCH REQUEST TO PROGRAM MODE
* PARITY ERROR PROCESSING - EXECUTED ONLY IN PROGRAM MODE.
SDI11 TSX2 (403B,ESM,7B) CLEAR TRTI INTERLOCK
TX6 .TRTI,MMK
LX2 21
BX0 X2+X6
SB3 X5 CPU NUMBER FOR *SFR* TO RESTORE
RE /ECS/FRWC CLEAR FLAG BIT
+ SB6 REJ SET *SFR* RETURN
SB5 PRG SET *REJ* RETURN
SB4 COMI FLAG BIT TO SET
EQ /ECS/SFR SET BIT TO REQUEST PARITY ERROR PROCESSING
FRRC EQU 10 FLAG REGISTER RETRY COUNT
SDIA BSS SDGL+1 MST READ BUFFER
SMU SPACE 4,20
** SMU - STORE MRT UPDATE.
*
* THIS ROUTINE IS CALLED WHEN CHANGING AN MRT BIT. IT WRITES
* THE CHANGED MRT WORD TO EXTENDED MEMORY.
*
* ENTRY (X0) = 12/ TRT LENGTH +2000B, 48/ MRT ADDRESS IN EM.
* (X4) = CALLER FLAG.
* .LT. 0, IF CALLED BY *DTC*.
* .EQ. 0, IF CALLED BY *STBM*.
* .GT. 0, IF CALLED BY *RTC*.
* (A3) = MST ADDRESS (*TDGL*).
* (A6) = MRT WORD.
* (B3) = MRT FWA.
*
* EXIT (X6) = 0.
* (X1) = FWA OF TRT TO UPDATE, IF *STBM* CALL.
* (X5) = LWA + 1 OF TRT TO UPDATE, IF *STBM* CALL.
*
* USES X - 0, 1, 2, 6.
* A - 1.
SMU SX1 A6-B3 MRT OFFSET
UX0 X0
SX6 A0 SAVE CPU NUMBER
IX0 X0+X1 ADD MRT OFFSET
SX1 A6+
LX1 30
BX0 X1+X0
SA0 A6+
SX1 A2+ SAVE (A2) IF PARITY ERROR
WE 1 WRITE MRT WORD
PER /PROGRAM/SMU1 PARITY ERROR PROCESSOR
SMU1 SA2 X1 RESTORE (A2)
SA0 X6+ RESTORE (A0)
BX6 X6-X6
NG X4,DTC5 IF CALLED BY *DTC*
NZ X4,RTC13 IF CALLED BY *RTC*
SX1 A4-B6 SET ONE WORD UPDATE FOR *CDI*
SX5 X1+B1
EQ CCP1 CHECK FOR CHECKPOINT REQUESTED
SSD SPACE 4,16
** SSD - SEARCH FOR SHARED DEVICE.
*
* ENTRY (B5) = EXIT ADDRESS.
* (B7) .LT. 0 IF FIRST CALL TO INITIALIZE SHARED SEARCH.
* (B7) = LAST SHARED DEVICE FOUND IF NOT INITIAL CALL.
*
* EXIT (X3) = TDGL WORD OF MST.
* (X4) = ECS ADDRESS OF MST/TRT.
* (B7) = EST ORDINAL OF SHARED DEVICE.
* (B7) .LT. 0 IF SHARED DEVICE NOT FOUND.
* (A3) = ADDRESS OF TDGL WORD OF MST.
* (A4) = ADDRESS OF SDGL WORD OF MST.
*
* USES X - 3, 4.
* B - 7.
* A - 3, 4.
SSD PL B7,SSD1 IF NOT INITIAL CALL TO SSD
TB7 ESTL
SSD1 SB7 B7-B1
NG B7,SSD2 IF END OF EST - SHARED DEVICE NOT FOUND
SX4 B7
CX3 X4,EST CONVERT EST ORDINAL TO OFFSET
TA3 X3+EQDE,EST READ EST ENTRY
MX4 -12
PL X3,SSD1 IF NOT MASS STORAGE
BX3 -X4*X3
LX3 3 MST ADDRESS
SA4 X3+SDGL
SA3 X3
ERRNZ TDGL
AX4 36
ZR X4,SSD1 IF NOT SHARED DEVICE
NG X4,SSD1 IF ISD
SSD2 JP B5 RETURN
TITLE EXTENDED MEMORY ERROR RECOVERY PROCESSING.
PMR SPACE 4,10
** PMR - PROCESS EXTENDED MEMORY ERROR RECOVERY.
PMR SA1 /ECS/MC ASSIGN *1MC* TO PROCESS ERROR DATA
SB3 PMR1 *APS* RETURN ADDRESS
EQ APS ASSIGN *1MC*
PMR1 BX7 X7-X7 INITIALIZE *1MC* BUFFER
SB3 B0
SA7 PMRA CLEAR ERROR ENCOUNTERED
ZR X1,DPE IF *1MC* NOT ASSIGNED ENTER PROCESSOR
SA7 X1+1
EQ DPE PROCESS MST/TRT PARITY ERRORS
* RELEASE *1MC* UPON COMPLETION OF ERROR RECOVERY.
PMRX SB4 COMI CLEAR EM ERROR PROCESSING REQUEST
ZR X1,PMR2 IF NO *1MC* BUFFER
SA1 X1 SET BUFFER COMPLETE
MX6 1
BX6 X6+X1
SA6 A1
PMR2 SB6 PRG *CFR* EXIT ADDRESS
SA1 PMRA
ZR X1,/ECS/CFR IF NO ERRORS LEFT, CLEAR FLAG BIT
EQ PRG EXIT
PMRA CON 0
DPE SPACE 4,10
** DPE - SHARED DEVICE ERROR PROCESSING.
*
* THIS ROUTINE SCANS ALL SHARED DEVICES CHECKING TO SEE IF
* THE UP-TO-DATE COPY OF THE MST/TRT ARE HELD BY THIS MACHINE.
* IF THEY ARE THE CM TABLES ARE COMPARED WITH THE EXTENDED
* MEMORY COPY. ANY DIFFERENCES ARE REPORTED VIA *1MC* AND THE
* CORRECT DATA IS WRITTEN TO EXTENDED MEMORY.
*
* ENTRY (X1) = *1MC* BUFFER ADDRESS.
* TRTI FLAG BIT SET.
DPE SB6 DPE1 *SFR* RETURN ADDRESS
SB4 TRTI
JP /ECS/SFR SET *TRTI* FLAG BIT
DPE1 NZ X7,PMRX IF UNABLE TO SET INTERLOCK
SB7 -1 INITIALIZE DEVICE SEARCH
SB5 DPE2 SET *SSD* RETURN
EQ SSD SEARCH FOR SHARED DEVICE
DPE2 NG B7,DPE7 IF END OF SHARED DEVICES
SA0 PBUF READ *SDGL* WORD
SX0 X4+SDGL
SX7 A0
LX7 30
SA4 A4
BX0 X0+X7
AX3 24
MX6 -12
RE 1
EQ DPE6 ERROR IN READING *SDGL*
* PROCESS TRT ERRORS.
+ SA2 A3+TRLL SET FWA OF TRT
SB6 X2
BX3 -X6*X3
SB4 B6+X3 SET LWA OF TRT
SA2 A0
IX2 X2-X4 COMPARE *SDGL* WORDS
AX4 36
NZ X2,DPE5 IF NOT UP-TO-DATE TABLES FOR THIS DEVICE
SX0 X4+TRST*100B SET TRT ADDRESS FOR THIS MACHINE
SB5 DPE3 *DRE* RETURN ADDRESS
JP DRE1 DETECT ERROR IN TRT
* PROCESS MST ERRORS.
DPE3 SX0 X4
SB6 A3 FWA OF MST
SB4 A3+GLGL LWA+1 OF MST TO BE PROCESSED
SB5 DPE4 *DRE* RETURN ADDRESS
EQ DRE1 PROCESS MST ERRORS
* SET CHECKPOINT BIT.
DPE4 SX6 B1
SB5 DPE2 SET *SSD* RETURN
LX6 50
+ SA2 A3+STLL **** PERFORM IN ONE WORD ****
BX6 X6+X2 **** PERFORM IN ONE WORD ****
SA6 A2 **** PERFORM IN ONE WORD ****
JP SSD CHECK NEXT DEVICE
* CHECK FOR ERROR IN MST/TRT.
DPE5 BX0 X4+X7 SET MST ADDRESS
RE SDGL
SA6 PMRA NOTE ERROR IN MST READ
+ SX2 TRST*100B ADVANCE TO TRT
IX0 X0+X2
RE MECB READ FIRST PART OF TRT
SA6 PMRA NOTE ERROR IN TRT READ
SX2 MECB
IX0 X0+X2
RE MECB READ SECOND PART OF TRT
SA6 PMRA NOTE ERROR IN TRT READ
+ EQ SSD SEARCH FOR NEXT SHARED DEVICE
DPE6 SA6 PMRA SET ERROR ENCOUNTERED
EQ SSD SEARCH FOR NEXT SHARED DEVICE
DPE7 SB6 FPE *CFR* RETURN ADDRESS
SB4 TRTI
JP /ECS/CFR CLEAR *TRTI* FLAG BIT
FPE SPACE 4
** FPE - FAST ATTACH TRACK PARITY ERROR PROCESSING.
*
* THIS ROUTINE RECOVERS FROM PARITY ERRORS IN THE FAT BY
* REGENERATING THE DATA FOR GLOBAL FAST ATTACH FILES.
* EACH MACHINE MUST PERFORM THE REGENERATION, SINCE THE
* LOCAL COUNT WORD OF THE FAT IS KNOWN ONLY TO INDIVIDUAL
* MACHINES.
FPE SB6 FPE1 *SFR* RETURN ADDRESS
SB4 FATI
JP /ECS/SFR SET *FATI* FLAG BIT
FPE1 NZ X7,PMRX IF UNABLE TO INTERLOCK
TA3 -FNTE,FNT INITIALIZE SYSTEM FNT SEARCH
* SEARCH FNT FOR GLOBAL FAST ATTACH ENTRY.
FPE2 TX6 A3+FNTE,-FNTLWA
SA3 A3+FNTE GET NEXT FNT ENTRY
ZR X6,FPE10 IF END OF FNT
MX4 -6
AX3 6
BX2 -X4*X3 FILE TYPE
SB4 X2-FAFT
AX3 6
NZ B4,FPE2 IF NOT FAST ATTACH FILE
BX7 -X4*X3
LX7 FATS
ZR X7,FPE2 IF NO FAT INDEX
* READ FAT ENTRY TO CHECK FOR ERRORS.
TA2 ALGL,EMS COMPUTE FAT ADDRESS
MX0 -11
BX2 -X0*X2
ZR X2,FPE10 IF FAT TRACK NOT YET ALLOCATED
SX6 2020B PRESERVE LINKAGE WITHIN TRACK
TLX6 0,TNSC
IX0 X6*X2
IX0 X0+X7 ADD FAT INDEX
TX0 X0+FAST*100B,TCNT
SA0 PBUF
SX2 A0
LX2 30
BX0 X0+X2
BX6 X4*X3
RE 2+MXMF
SA6 PMRA NOTE ERROR IN READ
* PROCESS FILE NAME WORD OF FAT.
+ LX6 12
SA6 A0 STORE CORRECT FILE NAME
SA0 A0+1 SET SCRATCH CELL ADDRESS
SX5 -B1 INITIALIZE MACHINE INDEX
SB6 A6 FWA OF BUFFER TO COMPARE
SB4 B6+B1 LWA OF BUFFER TO COMPARE
SB5 FPE3 *DRE* RETURN ADDRESS
EQ DRE1 DETECT ERRORS IN FILE NAME
* PROCESS LOCAL COUNT WORDS.
FPE3 SX6 B1 ADVANCE FAT ADDRESS
IX0 X0+X6
FPE4 SX5 X5+1
SX3 X5-MXMF
PL X3,FPE6 IF END OF LOCAL COUNT WORDS
SA2 /MMF/TMMF+X5 READ MACHINE STATE
BX6 X6-X6
SX2 X2
ZR X2,FPE5 IF MACHINE NOT PRESENT
TX3 X5+1,-MIN
NZ X3,FPE3 IF NOT THIS MACHINE
SA2 A3+B1 GET FST ENTRY
ERRNZ FSTG-FNTG-1 CODE DEPENDS ON VALUE
MX3 -36
BX6 -X3*X2 FORM ENTRY FOR THIS MACHINE
TX4 MID MERGE MACHINE ID IN ENTRY
LX4 -12
BX6 X6+X4
FPE5 SA6 PBUF
SB6 A6 FWA TO CHECK
SB4 A6+B1 LWA + 1 TO CHECK
SB5 FPE4 *DRE* RETURN ADDRESS
EQ DRE1 CHECK LOCAL COUNT WORD
* CHECK FAMILY NAME WORD.
FPE6 SA2 A3+B1
LX2 12
MX4 -9
BX3 -X4*X2 EST ORDINAL
CX4 X3,EST CONVERT EST ORDINAL TO OFFSET
TA4 X4+EQDE,EST READ EST ENTRY
MX3 -12
BX4 -X3*X4
SB5 FPE7 *DRE* RETURN ADDRESS
LX4 3
SA4 X4+PFGL
BX6 X3*X4
SA6 PBUF STORE FAMILY NAME + DEVICE NUMBER
SB6 A6 FWA TO CHECK
SB4 A6+B1 LWA + 1 TO CHECK
EQ DRE1 CHECK FAMILY NAME WORD
FPE7 SX4 B1 ACCUMULATE GLOBAL COUNTS
SA2 A3+B1 READ FST
MX6 12
LX6 -12
BX6 X6*X2 EXTRACT FIRST TRACK
MX3 -36
IX0 X0-X4
MX5 MXMF
FPE8 IX0 X0-X4
PL X5,FPE9 IF END OF LOCAL WORDS
LX5 1
RE 1
EQ FPE2 QUIT ON ERROR
SA2 A0+
BX2 -X3*X2
IX6 X6+X2
EQ FPE8 LOOP
FPE9 SA6 PBUF STORE COMPUTED ENTRY
SB6 A6 FWA TO CHECK
SB4 A6+B1 LWA + 1 TO CHECK
SB5 FPE2 *DRE* RETURN ADDRESS
EQ DRE1 CHECK GLOBAL COUNT WORD
* CLEAR FAT ENTRY AND EXIT.
FPE10 SB6 PMRX *CFR* RETURN ADDRESS
SB4 FATI
JP /ECS/CFR CLEAR FLAG BIT
TITLE SUBROUTINES.
DRE SPACE 4
** DRE - DETECT / REPORT AND RECOVER EXTENDED MEMORY ERRORS.
*
* ENTRY (X0) = FWA OF ECS WORDS TO CHECK.
* (X1) = COMMUNICATION BUFFER ADDRESS.
* (B4) = LWA OF CM BUFFER TO COMPARE WITH ECS.
* (B5) = EXIT ADDRESS.
* (B6) = FWA OF CM BUFFER TO COMPARE WITH ECS.
* (A0) = SCRATCH WORD FOR EXTENDED MEMORY READ.
DRE SB3 B0 REPORTED INDEX
ZR X1,DRE1 IF NO BUFFER ASSIGNED
BX7 X7-X7 INITIALIZE BUFFER
SA7 X1+1
DRE1 SA2 B6+ READ GOOD DATA
MX7 -24
BX0 -X7*X0
SX7 A0+
LX7 30
BX0 X7+X0
BX6 X2 GOOD DATA
SX3 701B UNRECOVERED WITH GOOD AND BAD DATA
RE 1
EQ DRE2 IF ERROR DETECTED
SX3 301B RECOVERED WITH GOOD AND BAD DATA
SA2 A0+ READ POSSIBLE BAD DATA
BX2 X2-X6
CX2 X2
ZR X2,DRE3 IF DATA VERIFIES
DRE2 MX7 -24
BX0 -X7*X0 ECS ADDRESS
SX7 B6 CM ADDRESS OF GOOD DATA
LX7 30
BX0 X7+X0
SX7 A0 SAVE (A0)
SA0 B6+ ADDRESS OF GOOD DATA
WE 1 RESTORE GOOD DATA
PER /ECS/ECH1 HANG ON UNRECOVERED WRITE ERROR
SA0 X7+ RESTORE (A0)
ZR X1,DRE3 IF NO BUFFER ASSIGNED
GT B3,B1,DRE3 IF TWO ERRORS REPORTED
SB3 B3+B1 INCREMENT ERROR INDEX
SA2 X7 BAD DATA
LX3 -18 STATUS
LX7 24 CM ADDRESS
BX7 X7+X3
MX3 -24
BX0 -X3*X0 ECS ADDRESS
BX7 X7+X0
SA7 A7
BX7 X2
SA7 A7+B1 BAD DATA
SA6 A7+B1 GOOD DATA
BX7 X7-X7
SA7 A6+B1
DRE3 SX6 B1+ ADVANCE ADDRESSES
SB6 B6+B1
IX0 X0+X6
LT B6,B4,DRE1 IF NOT END OF WORDS TO CHECK
JP B5 RETURN
STE SPACE 4
** STE - ECS SYSTEM TABLE ERROR.
*
* ENTRY (B5) = EXIT ADDRESS IF ENTERED AT STE1.
*
* EXIT NONE.
*
* USES X - 1, 6.
* B - NONE.
* A - 1, 6.
STE SB5 PRG SET EXIT ADDRESS
STE1 SX1 STEM *SYSTEM ECS TABLE ERROR.*
JP /MONITOR/MSC SEND MESSAGE TO SYSTEM CONTROL POINT
STEM DATA C*SYSTEM ECS TABLE ERROR.*
ENDBLK
BLOCK LSPMMF,(MULTI-MAINFRAME VIA LOW SPEED PORT TO EM.)
AFA SPACE 4,10
** AFA - PASS *AFAM* FUNCTION TO *MTE*.
*
* ENTRY (A2) = FNT ADDRESS, FNT IS NOT BUSY.
* (A5) = OUTPUT REGISTER ADDRESS.
AFA SA2 A2 SET FILE BUSY
SX6 B1
BX6 X2+X6
SA6 A2
EQ QPR QUEUE PP REQUEST TO *MTE*
CDI SPACE 4,20
** CDI - CLEAR DEVICE INTERLOCK.
*
* CHECK FOR ALL QUEUED DEVICE REQUESTS BEING COMPLETE, AND
* REQUEST *MTE* TO WRITE THE MST/TRT/MRT TO EXTENDED MEMORY.
*
* ENTRY (X1) = FIRST WORD OF TRT TO UPDATE.
* (X5) = LAST WORD + 1 OF TRT TO UPDATE.
* (X6) = *SDGL* MST WORD WITH BIT 0 CLEARED.
* (X7) = WORD TO BE STORED IN OUTPUT REGISTER.
* (B4) = TRT LINK WORD TO UPDATE.
* (B5) = EXIT ADDRESS.
* (B6) = START OF TRT.
* (A3) = ADDRESS OF MST IN CM.
* (A5) = OUTPUT REGISTER ADDRESS.
CDI BSS 0 ENTRY
BX2 X2-X2
NG X5,CDI3 IF NO UPDATE OF TRT TO EXTENDED MEMORY
* SET FIRST WORD OF TRT TO WRITE TO EXTENDED MEMORY.
SB4 B4-B6
SB6 X1
NG B4,CDI2 IF NO LINK WORD
SB3 X5
GE B4,B6,CDI1 IF LINK WORD IS NOT FIRST WORD TO WRITE
SX1 B4+ SET FIRST WORD
CDI1 GE B3,B4,CDI2 IF LINK WORD IS NOT LAST WORD TO WRITE
SX5 B4+1
* UPDATE LAST WORD OF TRT TO WRITE TO EXTENDED MEMORY.
CDI2 LX5 36
LX1 48
BX2 X5+X1
CDI3 MX1 1 SET PROGRAM MODE BIT IN OUTPUT REGISTER
LX1 -1
BX7 X7+X1
SA7 A5
* CLEAR MST/TRT CURRENT FLAG AND REQUEST *CDIF* OF *MTE*.
SA4 A3+MCLL READ *MCLL*
LX4 47-35 POSITION MRT WRITE FLAG
SX1 B1
LX1 47-0
BX4 X1*X4
BX2 X2+X4
SX1 A5 ADD OUTPUT REGISTER ADDRESS
LX1 24
BX2 X1+X2
MX7 54 CLEAR MST/TRT CURRENT IN CM
BX6 X7*X6
SA6 A3+SDGL
SX0 A3+ SET MST ADDRESS
SX6 CDIF CLEAR DEVICE INTERLOCK FUNCTION FOR *MTE*
LX0 12-3
BX2 X2+X6 MERGE *MCLL* INFORMATION
BX6 X0+X2
SB4 B5 SAVE RETURN ADDRESS
SB5 CDI4 *QPR* RETURN ADDRESS
EQ QPR3 QUEUE REQUEST
CDI4 SX7 B0+ CLEAR *MCLL*
SA7 A3+MCLL
JP B4 RETURN
CME SPACE 4,15
** CME - CHECK FOR *MTE* DEVICE INTERLOCK REQUEST NEEDED.
*
* THIS ROUTINE IS CALLED BY MST/TRT MANIPULATION FUNCTIONS
* WHICH EXECUTE IN PROGRAM MODE. IF THE REQUEST IS FOR A
* LSPMMF DEVICE AND THE MST/TRT NEED TO BE INTERLOCKED IN
* EM, THEN THE FUNCTION IS QUEUED TO *MTE* FOR PROCESSING.
* IF THE MST/TRT ARE INTERLOCKED IN EM, THEN THE FUNCTION IS
* PASSED TO PROGRAM MODE TO EXECUTION. THIS AVOIDS GOING TO
* PROGRAM MODE TO PASS REQUESTS TO *MTE*.
* ENTRY FOR *VMSM*.
CME0 SX3 X1
AX3 12
NZ X3,/MONITOR/PMR IF NOT SUBFUNCTION *VEIS*
ERRNZ VEIS CODE DEPENDS ON VALUE
* ENTRY FOR *DLKM* AND *RTCM*.
CME LX1 24 POSITION EQUIPMENT FIELD
MX3 -9
BX3 -X3*X1 EST ORDINAL
CX4 X3,EST CONVERT EST ORDINAL TO OFFSET
TA4 X4+EQDE,EST READ EST ENTRY
LX4 59-57
PL X4,/MONITOR/PMR IF NOT SHARED
LX4 -59+57
MX6 -5
TX0 X3,-ESTL
MX3 -12
BX3 -X3*X4 MST ADDRESS / 10B
BX0 X4*X0
LX3 3
PL X0,/MONITOR/HNG1 IF NOT MASS STORAGE OR OUT OF EST
SA4 X3+SDGL CHECK SHARED STATUS
AX4 1
BX6 -X6*X4
NZ X6,/MONITOR/PMR IF INTERLOCKED IN EXTENDED MEMORY
ZR X4,/MONITOR/PMR IF NO EXTENDED MEMORY ADDRESS PRESENT
* ENTRY FOR *DTKM* (QUEUE *MTE* REQUEST).
CME1 TX2 A5-1,-FP COMPUTE PP REQUEST BIT
SX3 B1
AX2 3
SB6 X2
LX6 X3,B6
SB5 /MONITOR/PPRX SET RETURN ADDRESS
SX2 A4+MCLL-SDGL
* SET INTERLOCK BIT FOR THIS PP IF NO REQUESTS PENDING.
+ SA2 X2 **** PERFORM IN ONE WORD ****
NZ X2,/PROGRAM/REJ IF SET **** PERFORM IN ONE WORD ****
SA6 A2 **** PERFORM IN ONE WORD ****
EQ QPR2 PASS REQUEST TO *MTE*
ECS SPACE 4,10
** ECS - *ECSM* EXTENSION FOR LOW SPEED PORT MMF MODE.
*
* *ECSM* SUBFUNCTIONS ARE PROCESSED EITHER BY *CPUMTR* OR BY
* *MTE* AS SHOWN BY THE FOLLOWING TABLE.
*
* *MTE* *CPUMTR*
*
* RRES READ RELATIVE USER EXTENDED MEMORY
* WRES WRITE RELATIVE USER EXTENDED MEMORY
* RECS READ SYSTEM EM (LINK DEVICE).
* WECS WRITE SYSTEM EM (LINK DEVICE).
* SFRS SET FLAG REGISTER BIT (LINK DEVICE).
* CFRS CLEAR FLAG REGISTER BIT (LINK DEVICE).
* PELS PROCESS EM LIST FUNCTION ABSOLUTE.
* PELS PROCESS EM LIST FUNCTION RELATIVE.
* BIT 20 OF OR INDICATES RELATIVE LIST.
ECS MX2 -24
BX2 -X2*X1
AX2 21
SB3 X2
LE B3,B1,/ECS/ECS IF READ/WRITE RELATIVE EM
SB4 PELS
LT B3,B4,QPR IF LINK DEVICE FUNCTION - PASS TO *MTE*
NE B3,B4,/ECS/ECS IF INVALID FUNCTION
LX1 59-19
PL X1,QPR IF NOT RELATIVE ADDRESS LIST
LX1 19-59
EQ /ECS/ECS PROCESS RELATIVE LIST
SDI SPACE 4,10
** SDI - SET DEVICE INTERLOCK.
*
* ENTRY (X3) = *TDGL* WORD OF MST.
* (X5) = -7777B.
* (X6) = INTERLOCK FIELD (LOWER 6 BITS) OF *SDGL*.
* (B5) = EXIT ADDRESS, IF NEED TO READ MST/TRT.
* (B6) = 0, IF NOT TO INTERLOCK MST/TRT.
* (A4) = ADDRESS OF *SDGL* WORD OF MST.
*
* EXIT (B4) = TRT LENGTH.
SDI LX3 24
SX0 B1
LX0 58
BX0 X0+X3
LX3 12 SET TRT LENGTH
BX3 -X5*X3
SB4 X3
ZR B6,/PROGRAM/CTR2 IF NOT TO INTERLOCK DEVICE
TX2 A5-1,-FP COMPUTE PP REQUEST BIT
SX3 B1
AX2 3
SB6 X2
LX6 X3,B6
SX2 A4+MCLL-SDGL
* SET INTERLOCK BIT FOR THIS PP IF NO REQUEST PENDING.
+ SA2 X2 **** PERFORM IN ONE WORD ****
NZ X2,SDI1 IF SET **** PERFORM IN ONE WORD ****
SA6 A2 **** PERFORM IN ONE WORD ****
EQ SDI2 REREAD *SDGL*
SDI1 BX2 X6-X2
NZ X2,/PROGRAM/REJ IF INTERLOCK OWNED BY ANOTHER PP
SDI2 SA4 A4 REREAD MST/TRT CURRENT FLAG
MX7 -6
BX7 -X7*X4
LX7 59-0
NG X7,/PROGRAM/REJ IF INTERLOCK SET
ZR X7,QPR1 IF MST/TRT NOT VALID IN CM
* SET MST INTERLOCK.
+ SA4 A4 **** PERFORM IN ONE WORD ****
BX6 X3+X4 **** PERFORM IN ONE WORD ****
SA6 A4 **** PERFORM IN ONE WORD ****
BX6 X6-X4
NZ X6,/PROGRAM/CTR2 IF INTERLOCK OBTAINED
EQ /PROGRAM/REJ REJECT REQUEST
QPR SPACE 4,15
** QPR - QUEUE PP REQUEST TO *MTE*.
*
* THIS ROUTINE PASSES REQUESTS TO *MTE* FOR PROCESSING.
*
* NOTE - THIS ROUTINE MUST BE INTERRUPTABLE ON EACH WORD
* BOUNDARY SINCE IT MAY BE ENTERED FROM BOTH MONITOR AND
* PROGRAM MODE.
*
* ENTRY (A5) = PP OUTPUT REGISTER ADDRESS.
* (B5) = EXIT ADDRESS, IF ENTERED AT *QPR1*.
* (X6) = 36/,12/ PM,12/ FN, IF ENTERED AT *QPR3*.
* PM = FUNCTION PARAMETER.
* OUTPUT REGISTER ADDRESS FOR *SDIF*/*AFAF*.
* MST ADDRESS / 10B FOR *CDIF*.
* FN = *MTE* FUNCTION CODE.
QPR SB5 /MONITOR/PPRX SET RETURN ADDRESS
EQ QPR2 SKIP CLEARING PROGRAM MODE BIT
QPR1 SA5 A5 CLEAR PROGRAM MODE
MX7 5
BX7 -X7*X5
SA7 A5
QPR2 SX6 A5 SET FUNCTION FOR *MTE*
R= X1,PPRF
LX6 12
BX6 X6+X1
* ENTER HERE IF (B5) SET AND NOT TO CLEAR PROGRAM MODE BIT.
QPR3 SX1 QE
SX5 77B
ERRNZ MXQP-100B CODE DEPENDS ON LENGTH OF TABLE
+ SA1 X1 **** PERFORM IN ONE WORD ****
IX7 X1+X5 **** PERFORM IN ONE WORD ****
BX7 X5*X7 **** PERFORM IN ONE WORD ****
SA7 A1 **** PERFORM IN ONE WORD ****
SA6 MTET+X1
JP B5 RETURN
VMS SPACE 4,15
** VMS - VALIDATE MASS STORAGE.
*
* WHEN *VMSM* DETERMINES THAT A DEVICE VALIDATION ERROR EXISTS
* IT LEAVES THE DEVICE INTERLOCKED. IT MUST NOT LEAVE THE
* PP MASK BIT SET IN *MCLL*. THIS BIT BEING SET WOULD PREVENT
* THE MST/TRT FROM BEING WRITTEN BACK TO EXTENDED MEMORY WHEN
* *DSD* ISSUES A *VMSM* IN RESPONSE TO A *VALIDATE* COMMAND.
*
* ENTRY (A3) = ADDRESS OF *TDGL* MST WORD.
*
* EXIT TO /PROGRAM/PRG.
VMS SA2 A3+MCLL-TDGL CLEAR BITS FOR ALL PP-S
MX6 -20
BX6 X6*X2
SA6 A2
EQ /PROGRAM/CSM1 CHECK FOR STORAGE MOVE
TMMF SPACE 4,10
TMMF BSS 0 MAINFRAME STATE TABLE
DUP MXMF,1
DATA 0
MTET BSS 0 PP REQUEST LIST
DUP MXQP,1
DATA 0
QE CON MXQP-1 END OF QUEUE POINTER (PP NUMBER)
MTIN DATA 0 SHARED DEVICE REQUEST QUEUE *IN* POINTER
MTOT DATA 0 SHARED DEVICE REQUEST QUEUE *OUT* POINTER
MTBT BSS 0 SHARED DEVICE REQUEST QUEUE
DUP MXQP,1
DATA 0
SMU SPACE 4,25
** SMU - FLAG MRT UPDATE TO *MTE*.
*
* THIS ROUTINE IS CALLED WHEN CHANGING AN MRT BIT. IT SETS
* THE MRT UPDATED FLAG IN *MCLL* WHICH CAUSES *MTE* TO WRITE
* THE MRT TO EXTENDED MEMORY.
*
* ENTRY (X0) = 12/ TRT LENGTH +2000B, 48/ MRT ADDRESS IN EM.
* (X4) = CALLER FLAG.
* .LT. 0, IF CALLED BY *DTC*.
* .EQ. 0, IF CALLED BY *STBM*.
* .GT. 0, IF CALLED BY *RTC*.
* (A3) = MST ADDRESS (*TDGL*).
* (A6) = MRT WORD.
* (B3) = MRT FWA.
*
* EXIT (X6) = 0.
* (X1) = FWA OF TRT TO UPDATE, IF *STBM* CALL.
* (X5) = LWA + 1 OF TRT TO UPDATE, IF *STBM* CALL.
*
* USES X - 1, 6.
* A - 1, 6.
SMU SA1 A3+MCLL-TDGL UPDATE *MCLL*
SX6 B1
LX6 35
BX6 X1+X6
SA6 A1+
BX6 X6-X6
NG X4,/PROGRAM/DTC5 IF CALLED BY *DTC*
NZ X4,/PROGRAM/RTC13 IF CALLED BY *RTC*
SX1 A4-B6 SET ONE WORD UPDATE FOR *CDI*
SX5 X1+B1
EQ /PROGRAM/CCP1 CHECK FOR CHECKPOINT REQUESTED
ENDBLK
BLOCK ISD,(INDEPENDENT SHARED DEVICE PROCESSING.)
CHR SPACE 4,40
** CHR - CHECK FOR HELPER PP REQUIRED.
*
* *CHR* WILL EXIT TO A FUNCTION PROCESSOR, REJECT THE FUNCTION,
* QUEUE IT, OR ISSUE A *BOTM* FUNCTION TO INITIATE A HELPER,
* DEPENDING ON THE DEVICE STATUS AND THE REQUEST.
*
* - IF THE DEVICE IS NOT ISHARED OR THE CENTRAL MEMORY COPY OF
* THE TABLES ARE CURRENT, THE FUNCTION WILL BE PROCESSED.
*
* - IF THE DEVICE IS NOT REMOVABLE, IS INACCESSIBLE, AND THE
* FUNCTION BEING PROCESSED IS *DTKM*, THE *DTKM* FUNCTION
* WILL BE QUEUED FOR LATER PROCESSING AND FUNCTION COMPLETE
* STATUS WILL BE RETURNED TO THE CALLER.
*
* - IF THE DEVICE IS INACCESSIBLE, THE FUNCTION BEING PROCESSED
* CANNOT BE QUEUED FOR LATER PROCESSING (NOT *DTKM* OR *DTKM*
* ON A REMOVABLE DEVICE), AND RETURN ON INACCESSIBLE IS
* SELECTED, THE INACCESSIBLE STATUS WILL BE RETURNED TO THE
* CALLER.
*
* - IF *1RU* IS ACTIVE AND OTHER FUNCTIONS ARE PENDING, THE
* REQUEST WILL BE QUEUED.
*
* - IF *1RU* IS ACTIVE AND NO OTHER FUNCTIONS ARE PENDING, THE
* FUNCTION WILL BE REJECTED.
*
* ENTRY (X5) = REQUEST.
*
* EXIT (X1) = UNPACKED REQUEST.
*
* USES X - ALL.
* A - 1, 2, 3, 4, 5, 6.
* B - 3, 4, 5 (SEE NOTE).
*
* NOTE - *B5* IS ONLY USED WHEN A FUNCTION IS REJECTED.
* OTHERWISE, IT MUST BE PRESERVED AS AN ENTRY CONDITION
* FOR *CTR1*.
CHR BSS 0 ENTRY
SA3 CHRA GET FUNCTION INDEX
UX1,B4 X5 GET THE FUNCTION NUMBER
MX6 -9
LX1 -36 GET THE EST ORDINAL
SB4 B4+1777B-CPUM
BX6 -X6*X1
AX3 B4
CX7 X6,EST CONVERT EST ORDINAL TO OFFSET
TX6 X6,-ESTL
TA4 X7+EQDE,EST
CX3 X3
MX7 -12
SB4 X3+
SA3 A3-B4 GET FUNCTION PARAMETERS
SX0 1
LX0 56-0
BX0 X0*X4 REMOVABLE DEVICE FLAG
LX0 58-56
BX3 -X0*X3 CLEAR *DTKM* FLAG IF REMOVABLE DEVICE
BX7 -X7*X4 GET THE MST ADDRESS
BX6 X6*X4
LX4 59-52
LX7 3
NG X4,CHR2 IF *ISHARED* DEVICE
CHR1 SB4 X3 GET FUNCTION PROCESSOR ADDRESS
UX1 X5 RESTORE PARAMETERS
JP B4 PROCESS THE REQUEST
CHR2 PL X6,CHR13 IF NOT MASS STORAGE OR OUT OF EST
SA2 X7+STLL GET PROHIBIT TRT UPDATE BIT
SA4 X7+SDGL GET TABLES-CURRENT BIT
LX2 59-LPTU
BX6 X3*X2 *1RU* HELPER .AND. PROHIBIT TRT UPDATE
SA2 X7+DALL GET SUSPECT BIT
NG X6,CHR1 IF *1RU* NOT NEEDED
LX2 59-55
LX1 59-45+36
NG X2,CHR10 IF DEVICE IS SUSPECT
* INITIATE PP HELPER PROGRAM.
CHR3 AX3 30 POSITION *BOTM* PARAMETERS
SX1 B1
SA2 A2+MCLL-DALL
PL X3,CHR8 IF HELPER IS NOT *1RU*
TX7 A5-1+10B,-FP GET PP BIT
SX6 A2
AX7 3
SA6 CHRB
SA3 A3 RESTORE PROCESSOR ADDRESS
SB4 X7
MX7 12+1 GET OR ADDRESS AND LONG-TERM INTERLOCK
LX1 B4
BX7 X7*X2
BX6 X2+X1 SET REQUEST-IN-PROGRESS
LX1 21
BX6 -X1*X6 CLEAR SET-REISSUE
NZ X7,CHR9 IF *1RU* ACTIVE OR *SDIS* IN EFFECT
SX2 B1 SET LATENCY ACTIVITY BIT
AX5 36 GET EST ORDINAL
BX6 X6+X2
SX2 3R1RU BUILD *1RU* CALL
SA6 A2
MX6 -9
SB3 CHR4 *APQ* RETURN ADDRESS
BX6 -X6*X5
LX2 -18
SB4 -B1 RETURN IF UNASSIGNABLE
TB7 0,SCA
BX6 X2+X6
EQ /MONITOR/APQ ATTEMPT TO ASSIGN *1RU*
CHR4 SA2 CHRB GET *MCLL* ADDRESS
SX3 /MONITOR/LA1RU*100B+/MONITOR/LA1BP SET *BOTM* PARAMS
SA2 X2
ZR X1,CHR6 IF NOT ASSIGNED
SX1 X1+B1 GET *1RU-S* OUTPUT REGISTER ADDRESS
TX7 A5-1+22*10B,-FP GET CALLER-S BIT
LX1 48
AX7 3
BX6 X2+X1
SX1 B1
SB4 X7
LX1 B4
CHR5 SA5 A5 SET STORAGE MOVABLE BIT
MX7 1
BX6 X6+X1 SET SET-REISSUE
LX7 56-59
SA6 A2
BX7 X5+X7
JP PPR1 LEAVE REQUEST PENDING
CHR6 SX7 A5 SET PP OUTPUT REGISTER ADDRESS
SB5 CHR7 *IBF* REJECT RETURN ADDRESS
LX7 48
BX6 X2+X7
SA6 A2
JP /MONITOR/IBF ISSUE *BOTM* FUNCTION
CHR7 SA1 CHRB GET *MCLL* ADDRESS
SA1 X1 GET *MCLL*
MX2 22+12
LX2 22 CLEAR REQUESTS-IN-PROGRESS/LATENCY BITS
BX6 -X2*X1
SA6 A1+
EQ PPRX EXIT
CHR8 SB5 PPRX SET *IBF* REJECT RETURN ADDRESS
EQ /MONITOR/IBF ISSUE *BOTM* FUNCTION
CHR9 SA4 A2+SDGL-MCLL GET TABLES-CURRENT BIT
MX7 -42 GET ACTIVITY BITS
BX7 -X7*X2
ZR X7,CHR12 IF TABLES ARE BEING REWRITTEN
LX4 59-58
SA6 A2 SET REQUEST IN PROGRESS BIT
PL X4,CHR5 IF TABLES ARE NOT CURRENT
EQ CHR1 PROCESS REQUEST
* CHECK CALLER FOR ACCESSIBILITY TO SUSPECT DEVICE.
CHR10 TX4 A5-1,-FP
LX4 PPXES-PPCES
LX7 X3,B1 POSITION *DTKM* BIT
TA4 X4+ACPP,FPX
MX6 -36
SB7 X4 CP ADDRESS
NG X7,QDT IF *DTKM* FUNCTION
SA4 B7+JCIW GET SUBSYSTEM ID
BX6 -X6*X4
SA4 B7+SEPW GET *UTL=* BIT
SX2 X2+B1 CHECK FOR *DOWN* STATE
AX6 24
LX2 59-2
SX6 X6-LSSI-1
LX4 59-56
BX7 -X6+X4
SA4 A2+SDGL-DALL
NG X2,CHR11 IF DEVICE IS DOWN
NG X7,CHR3 IF SUBSYSTEM OR *UTL=* ENTRY POINT IS SET
CHR11 NG X1,CHR14 IF RETURN-ON-INACCESSIBLE REQUESTED
SB5 CHR12
SX6 B1 PRESERVE PROGRAM/MONITOR MODE INTERLOCK
BX7 X5 RESTORE REQUEST
EQ /ISD/CDI CLEAR *MCLL* BITS AND RETURN
CHR12 SB5 PPRX SET *REJ* RETURN ADDRESS
EQ /PROGRAM/REJ REJECT REQUEST
CHR13 SB5 PPRX SET *HNG* RETURN ADDRESS
EQ HNG1 HANG PP
CHR14 SA3 /MONITOR/TFPL-1+/MONITOR/LA3RX GET *3RX* PLD POINTER
SX6 B1 PRESERVE PROGRAM/MONITOR MODE INTERLOCK
SB5 B0 SET DIRECT RETURN FROM *CDI*
SB4 X3+ *3RX* PLD ADDRESS
SB3 CHR15 SET *CDI* RETURN ADDRESS
NZ B4,/ISD/CDI IF PLD NOT BEING MODIFIED
EQ CHR12 REJECT REQUEST
CHR15 SA5 A5+ GET ORIGINAL OUTPUT REGISTER
MX6 1
BX7 X6*X7
BX7 X6-X7 SET *MSD* SUBSYSTEM STATUS
SB3 PPRX SET *EFP* RETURN ADDRESS
UX5 X5 SET OUTPUT REGISTER PARAMETERS
EQ /MONITOR/EFP CALL *3RX* AND EXIT
CHR SPACE 4,10
** IFT - ISHARED FUNCTION TABLE GENERATOR.
*
* *IFT* DEFINES THE FUNCTION PROCESSOR, PP HELPER, AND
* BOOTSTRAP PROGRAM FOR EACH ISHARED FUNCTION. IT ALSO BUILDS
* A MICRO WHICH WILL CREATE A BIT MAP OF THE ISHARED FUNCTIONS.
*
* FUNC IFT BOOT,HELPER,PROCR
*
* ENTRY *BOOT* = BOOTSTRAP PROGRAM NAME.
* *HELPER* = HELPER PP NAME.
* *PROCR* = *CPUMTR* PROCESSOR FOR FUNCTION.
PURGMAC IFT
MACRO IFT,FUNC,BOOT,HELPER,PROCR
P ERRPL .1-FUNC FUNCTIONS MUST BE IN ASCENDING ORDER
P ERRNG LA1RU-LA_HELPER ASSUMED BY *PROHIBIT TRT UPDATE* TEST
LOC FUNC
.1 SET FUNC
.A IFC EQ,$HELPER$1RU$
.B IFC EQ,$FUNC$DTKM$
VFD 1/1,1/1,10/,6/0,6/LA_HELPER,6/LA_BOOT,1/1,11/,18/PROCR
.B ELSE
VFD 1/1,1/0,10/,6/0,6/LA_HELPER,6/LA_BOOT,1/1,11/,18/PROCR
.B ENDIF
.A ELSE
VFD 1/0,11/,6/0,6/LA_HELPER,6/LA_BOOT,1/0,11/,18/PROCR
.A ENDIF
LOC *O
.1 DECMIC FUNC-CPUM
.M MICRO 1,,$1S".1"+".M"$
IFT ENDM
QUAL MONITOR
.M MICRO 0,,
.1 SET 0
** TABLE OF ISHARED MONITOR FUNCTIONS.
*
*T 1/R, 1/D, 10/ ,18/ *IBF* PARAMETERS ,1/R, 11/ ,18/ PROCESSOR.
*
* R 1 = HELPER PP IS *1RU*.
* D 1 = FUNCTION IS *DTKM*.
AFAM IFT 1BP,1FA,.AFAM
DLKM IFT 1BP,1RU,PMR
DTKM IFT 1BP,1RU,.DTKM
RTCM IFT 1BP,1RU,PMR
STBM IFT 1BP,1RU,/PROGRAM/CTR1
VMSM IFT 1BP,1RU,PMR
QUAL *
CHRA CON ".M" ISHARED FUNCTION BIT MAP
CHRB CON ** CURRENT MST *MCLL* ADDRESS
AMM SPACE 4,10
** AMM - ACTIVATE MONITOR MODE (PROGRAM MODE).
*
* ENTRY (X0) = PP REQUEST.
* (B3) = EXIT ADDRESS.
*
* USES X - 6.
* A - 6.
QUAL PROGRAM
AMM SX6 -2 SET *MTR*-LIKE REQUEST TO MONITOR MODE
SA6 PX
MJ EXCHANGE TO MONITOR MODE
JP B3 RETURN
QUAL *
CDI SPACE 4,35
** CDI - CLEAR DEVICE INTERLOCK EXTENSION FOR ISHARED DEVICES.
*
* *CDI* CLEARS THE PP-S REQUEST-IN-PROGRESS AND SET-REISSUE-BIT
* BITS. IF THE REQUEST ORIGINATED FROM THE PP THAT IS RUNNING
* *1RU*, *CDI* ALSO CLEARS THE LATENCY ACTIVITY BIT. IF ALL
* THE ACTIVITY BITS IN *MCLL* ARE CLEARED, *CDI* CLEARS THE
* TABLES-CURRENT FLAG IN *SDGL*. SINCE CLEARING TABLES-CURRENT
* CAN BE DONE IN MONITOR MODE, WITH OR WITHOUT THE *CPUMTR*
* INTERLOCK SET, AND CAN ALSO BE DONE IN PROGRAM MODE, INSURING
* THE INTEGRITY OF *SDGL* REQUIRES RESTRICTIONS ON THE CHANGES
* THAT CAN BE MADE TO *SDGL* FROM THE TIME IT IS FETCHED BY
* *CDI* IN THE *PROGRAM* BLOCK AND STORED BY *CDI* IN THE *ISD*
* BLOCK.
* THE CODE AT *CDI2* ASSUMES THAT THE ONLY CHANGES THAT WILL BE
* MADE ARE THE CLEARING OF BITS, NAMELY THE *CPUMTR* INTERLOCK
* AND THE TABLES-CURRENT BITS.
*
* ENTRY (A4) = *SDGL* ADDRESS.
* (A5) = OUTPUT REGISTER ADDRESS.
* (X6) = BIT 0 OF *SDGL* MASK.
* 0, IF CLEARING PROGRAM/MONITOR MODE INTERLOCK.
* 1, IF PRESERVING INTERLOCK.
* (X7) = OUTPUT REGISTER IF TO EXIT TO *CSM*.
* (B5) = *CSM* RETURN ADDRESS IF .NE. 0.
* (B3) = RETURN ADDRESS IF (B5) .EQ. 0.
*
* EXIT TO *CSM* IF (B5) .NE. 0 ON ENTRY.
* TO (B3) RETURN ADDRESS IF (B5) .EQ. 0 ON ENTRY.
*
* USES X - 1, 2, 3, 4, 5, 6.
* A - 3, 4, 6.
* B - 6.
CDI BSS 0
SA3 A4+MCLL-SDGL CLEAR ACTIVITY BITS
TX2 A5-1+10B,-FP GET PP BIT
MX5 59 SAVE PROGRAM/MONITOR MODE INTERLOCK
AX2 3
BX4 X5+X6
MX1 12 CHECK FOR CALL FROM *1RU*
BX1 X1*X3
SB6 X2+
LX1 12
SX3 A5
LX2 X5,B6
BX3 X1-X3
LX6 X5,B6 CLEAR SET-REISSUE
LX2 21
NZ X3,CDI1 IF NOT FROM *1RU*
BX6 X6*X5 CLEAR LATENCY ACTIVITY BIT
CDI1 BX6 X6*X2 CLEAR REQUEST-IN-PROGRESS
MX2 -42
LX5 6
+ SA3 A3 **** PERFORM IN ONE WORD ****
BX6 X6*X3 **** PERFORM IN ONE WORD ****
SA6 A3 **** PERFORM IN ONE WORD ****
SA3 A4 **** PERFORM IN ONE WORD ****
BX2 -X2*X6 CHECK FOR NO OUTSTANDING FUNCTIONS
BX6 X4
LX4 X3,B1 CHECK TABLES CURRENT
SX3 B0 MST/TRT UPDATE COUNTER INCREMENT
PL X4,CDI2 IF TABLES ARE NOT CURRENT
ZR X1,CDI2 IF *1RU* IS NOT ACTIVE
NZ X2,CDI2 IF FUNCTIONS REMAIN
PX6 X6 CLEAR TABLES CURRENT BIT
BX3 -X5 INCREMENT MST/TRT UPDATE COUNTER
CDI2 SA4 A4 **** PERFORM IN ONE WORD ****
BX6 X6*X4 **** PERFORM IN ONE WORD ****
IX6 X6+X3 **** PERFORM IN ONE WORD ****
SA6 A4 **** PERFORM IN ONE WORD ****
NZ B5,/PROGRAM/CSM1 IF EXIT VIA *CSM*
JP B3 RETURN
CTR SPACE 4,10
** CTR - *CTR* ISHARED PROCESSING.
CTR3 BX0 X3 SET TRT LENGTH
AX0 24
BX0 -X5*X0
SB4 X0
BX0 X0-X0
PX0 X0,B4
ZR B6,/PROGRAM/CTR2 IF NO INTERLOCK
EQ /PROGRAM/CTR1.1 INTERLOCK MST
MNR SPACE 4,10
** *MNR* EXTENSION FOR ISHARED PROCESSING.
*
* PROCESS *MTR*-LIKE FUNCTION.
*
* ENTRY (X3) = MONITOR MODE START TIME.
MNR5 NE B3,B1,/MONITOR/MNR5 IF NOT *MTR*-LIKE REQUEST
SA1 B2+10B GET CALLER-S *X0* REGISTER
BX5 X3 SET MONITOR MODE START TIME FOR *PMN*
BX0 X1
SA1 X1+
SB3 X0-MXPF
NG B3,/MONITOR/PMN1 IF NOT PP REQUEST
MX7 -7-48 CLEAR PROGRAM MODE BIT
BX7 -X7*X1
SA7 A1+
EQ /MONITOR/PMN4 PROCESS PP FUNCTION
QDT SPACE 4,25
** QDT - QUEUE DROPPABLE TRACKS.
*
* *QDT* COMPLETES *DTKM* REQUESTS BY PLACING THEM IN A QUEUE
* WHEN THE FOLLOWING CONDITIONS ARE MET.
* - THE PP ISSUING THE FUNCTION IS ASSIGNED TO A JOB.
* - THE JOB IS NOT BEING STORAGE MOVED.
* - THE *DTKM* IS NOT SETTING *EOI*.
* - THE QUEUE IN THE JOB-S NFL IS NOT FULL.
*
* ENTRY (A2) = ADDRESS OF *DALL* WORD IN THE MST.
* (A3) = ADDRESS OF FUNCTION PARAMETERS.
* (X1) = LOWER 48 BITS OF *OR* WITH BIT 45 MOVED TO 59.
* (X3) = FUNCTION PARAMETERS.
* (X5) = OUTPUT REGISTER.
* (B7) = CONTROL POINT AREA ADDRESS.
*
* EXIT TO *CHR10* WITH *DTKM* BIT CLEARED, IF REQUEST CANNOT
* BE QUEUED.
* TO *CHR12* TO REJECT REQUEST IF CONTROL POINT BEING
* MOVED.
*
* USES X - 0, 1, 2, 3, 4, 6, 7.
* A - 1, 2, 3, 4, 6.
* B - 3, 4, 6, 7.
QDT BSS 0 ENTRY
SA4 SMRL
SX6 B7+
LX6 -7 CP NUMBER
MX7 -12
BX6 X4-X6
BX6 -X7*X6
ZR X6,CHR12 IF CONTROL POINT MOVING
SA4 B7+FLSW GET RA AND NFL
TX6 B7,-SCA
ZR X6,QDT3 IF SYSTEM CONTROL POINT
BX7 X5 CHECK REQUEST
MX6 -36
ZR B7,QDT3 IF SYSTEM CONTROL POINT
LX7 59-35
BX6 -X6*X4 GET RA/100
PL X7,QDT3 IF SET *EOI* REQUEST
SX7 QFBN
AX4 48 GET NFL
AX6 12
ZR X4,QDT3 IF INSUFFICIENT NFL
LX6 6 RA
IX7 X6-X7 ABSOLUTE ADDRESS OF *QFBN* QUEUE
SX6 -QFBL
QDT1 SX6 X6+B1 SEARCH FOR EMPTY ENTRY
IX4 X7-X6
ERX4 X4
BX3 X4-X5
NZ X4,QDT2 IF ENTRY NOT AVAILABLE
SB7 X6-1 SAVE ORDINAL OF AVAILABLE ENTRY
QDT2 LX3 0-45 IGNORE THE REQUEST FLAGS
AX3 3
ZR X3,QDT3 IF REQUEST IS ALREADY IN THE TABLE
NG X6,QDT1 IF MORE ENTRIES TO CHECK
NG B7,QDT4 IF ENTRY IS AVAILABLE
QDT3 SA3 A3 RESTORE FUNCTION PARAMETERS
MX6 -59 CLEAR *DTKM* BIT
LX6 58-59
BX3 -X6*X3
EQ CHR10 REQUEST CANNOT BE QUEUED
QDT4 SX4 B7+B1 SET REQUEST IN *QFBN* QUEUE
BX6 X5
IX4 X7-X4
EWX6 X4
* COMPUTE NUMBER OF SECTORS DROPPED.
SA2 A2+TRLL-DALL SET TRT BASE ADDRESS
MX6 12
LX1 24-59+45 POSITION FIRST TRACK
MX7 -2
SB6 B0 PRESET TRACK COUNT
SB3 X2-4000B/4 PRESET TRT FWA
QDT5 BX0 X6*X1 EXTRACT LINK
LX0 10
SB6 B6+B1
SA1 B3+X0 READ TRT WORD
LX0 2
BX2 -X7*X0 EXTRACT BYTE
LX2 2 BYTE * 4
LX3 X2,B1 BYTE * 8
IX2 X3+X2 BYTE * 12
SB4 X2+
LX1 X1,B4 POSITION TRACK BYTE
NG X1,QDT5 IF NOT END OF TRACK CHAIN
SA2 A2+MDGL-TRLL GET SECTORS PER TRACK
SX3 B6-B1 NUMBER OF FULL TRACKS
SA4 A2+SDGL-MDGL SET *SDGL* ADDRESS
MX7 -12
AX1 48 SECTORS IN LAST TRACK
BX2 -X7*X2
SX6 1 SET TO PRESERVE INTERLOCK
IX3 X3*X2
SB5 PPR1 SET EXIT ADDRESS
IX7 X3+X1
EQ CDI CLEAR PP ACTIVITY BITS
RTC SPACE 4,10
** RTC - RTCM ISD PROCESSING.
* SET INTERMEDIATE RESPONSE FOR ISHARED DEVICE.
RTC SX3 B4
CX4 X3,EST CONVERT EST ORDINAL TO OFFSET
TA4 X4+EQDE,EST READ EST ENTRY
LX4 59-52
PL X4,/PROGRAM/CTR IF NOT ISHARED DEVICE
SX0 A5 REISSUE FUNCTION
SB3 /PROGRAM/PRG RETURN ADDRESS
EQ /PROGRAM/AMM ACTIVATE MONITOR MODE
SMD SPACE 4,10
** SMD - SMDM ISHARED PROCESSING.
* CTCS - CLEAR TABLES-CURRENT FLAG
SUBFUN SMDM,(CTCS,C1AS)
SX7 X2-CTCS
SA2 A3+MCLL-TDGL
ZR X7,SMD1 IF *CTCS*
MX6 -48 CLEAR *1RU* OUTPUT REGISTER ADDRESS
BX6 -X6*X2
SA6 A2+
SMD1 SA4 A4 GET *SDGL*
SX6 B1 PRESERVE PROGRAM/MONITOR MODE INTERLOCK
EQ /ISD/CDI CLEAR WAITING FOR LATENCY
SMU SPACE 4,25
** SMU - SET MRT-UPDATED FLAG.
*
* *SMU* SETS THE TRT- AND MRT-UPDATED FLAGS IN *SDGL*. THIS
* CAUSES *1RU* TO WRITE THE TRT AND MRT TO THE DEVICE. *SMU*
* ALSO COPIES THE (MST/RT UPDATE COUNTER + 1) FROM *SDGL* TO
* THIS MAINFRAME-S *DIT* ENTRY.
*
* ENTRY (X0) = 12/ TRT LENGTH +2000B, 48/ 0.
* (X4) = CALLER FLAG.
* .LT. 0, IF CALLED BY *DTC*.
* .EQ. 0, IF CALLED BY *STBM*.
* .GT. 0, IF CALLED BY *RTC*.
* (A3) = MST ADDRESS (*TDGL*).
* (B3) = MRT FWA.
*
* EXIT (X6) = 0.
*
* USES X - 0, 1, 6.
* A - 1, 6.
* B - 3.
SMU MX6 2 SET TRT- AND MRT-UPDATE FLAGS
LX0 12 POSITION TRT LENGTH
LX6 -2
+ SA1 A3+SDGL-TDGL **** PERFORM IN ONE WORD ****
BX6 X1+X6 **** PERFORM IN ONE WORD ****
SA6 A1 **** PERFORM IN ONE WORD ****
* SET THE UPDATE COUNTER IN THE *DIT*.
SA1 A3+DULL-TDGL GET MAINFRAME INDEX
SX0 X0-2000B+7 GET MRT LENGTH
AX6 6 POSITION THE MST/TRT UPDATE COUNTER
AX0 3
SB3 B3+X0 FWA OF DIT
SX0 B1
IX6 X6+X0
MX0 -4
LX1 -24
BX1 -X0*X1 MAINFRAME INDEX - 1
SA1 X1+B3 DIT ENTRY FOR THIS MAINFRAME
MX0 -30
BX6 -X0*X6
LX1 -18
BX1 X0*X1 CLEAR THE OLD COUNTER VALUE
BX6 X1+X6
LX6 18
SA6 A1
SX6 B0+
NG X4,/PROGRAM/DTC5 IF CALLED BY *DTC*
NZ X4,/PROGRAM/RTC13 IF CALLED BY *RTC*
EQ /PROGRAM/CCP1 CHECK FOR CHECKPOINT REQUESTED
STB SPACE 4,15
** STB - STBM ISHARED PROCESSING.
* SET THE LONG-TERM DEVICE INTERLOCK IN *MCLL*.
*
* ENTRY (A3) = MST ADDRESS (*TDGL*).
*
* EXIT (X6) = 1.
* TO */ISD/CDI*.
*
* USES X - 2, 6, 7.
* A - 2, 6.
STB2 SA2 A3+MCLL-TDGL SET LONG-TERM INTERLOCK
SX6 B1
MX7 -42 GET ACTIVITY BITS
LX6 47-0
BX7 -X7*X2
BX6 X6+X2
CX7 X7
AX7 1
ZR X7,STB3.1 IF NO OTHER REQUESTS ARE PENDING
SA4 A4 CLEAR THE MST/TRT INTERLOCK
MX6 59
BX6 X6*X4
SA6 A4+
EQ /PROGRAM/REJ REJECT REQUEST
STB3 SA2 A3+MCLL-TDGL SET LONG-TERM INTERLOCK
SA1 B2+17B GET ORIGINAL RESPONSE FROM PROGRAM MODE XP
SX6 B1
LX6 47-0
BX6 X6+X2
BX7 X1
STB3.1 SA6 A2
SX6 B1 PRESERVE MST/TRT INTERLOCK
EQ /ISD/CDI EXIT
* CLEAR THE LONG-TERM DEVICE INTERLOCK IN *MCLL*.
*
* ENTRY (A3) = MST ADDRESS (*TDGL*).
*
* EXIT TO *CHR*.
*
* USES X - 2, 5, 6.
* A - 2, 5, 6.
* B - 3.
STB4 SA2 A3+MCLL-TDGL CLEAR LONG-TERM INTERLOCK
SX6 B1
SA5 A5 RESTORE INPUT REGISTER
LX6 47-0
SB6 B0 DO NOT GET INTERLOCK
BX6 -X6*X2
SA6 A2
SB3 STB5 SET *CTR* EXIT ADDRESS
EQ CHR INITIATE *1RU*
STB5 UX4,B3 X0 SET *SMU* EXIT FLAG
SB3 B6+B3 *MRT* FWA
EQ SMU SET MRT UPDATE FLAG
VMS SPACE 4,10
** VMS - *VMSM* EXTENSION FOR *ISHARED* DEVICES.
*
* *VMS* DECIDES WHETHER *1RU* NEEDS TO BE CALLED FOR THIS
* SUBFUNCTION.
VMS SX3 X5 GET SUBFUNTION
AX3 12
NZ X3,/MONITOR/PMR IF *1RU* IS NOT REQUIRED
ERRNZ VEIS CODE ASSUMES VALUE
EQ CHR CHECK FOR HELPER REQUIRED
* SET/CLEAR LONG-TERM INTERLOCK IN *MCLL*.
* ENTRY (X3) = 1, IF (X7) = 0.
* (X7) = RESPONSE.
* (A3) = ADDRESS OF MST WORD *TDGL*.
* (A5) = OUTPUT REGISTER ADDRESS.
* (B5) = RETURN ADDRESS.
VMS1 SA4 A3+SDGL-TDGL
PL X4,VMS3 IF NOT AN ISHARED DEVICE
SA2 A5 GET THE ORGINAL FUNCTION
SX4 X2 GET THE SUBFUNCTION
AX2 36 GET THE EST ORDINAL
AX4 12
SX2 X2+STBM*1S12-VMSM*1S12 CHANGE FUNCTION CODE TO *STBM*
SX6 SLTS SET LONG-TERM INTERLOCK
LX2 24
BX6 X2+X6
NZ X7,VMS2 IF VALIDATION ERRORS
BX4 X4-X3
ERRNZ VEQS-1 CODE ASSUMES VALUE
NZ X4,/PROGRAM/CDI IF NOT *VEQS* SUBFUNCTION
IX6 X6+X3 CLEAR DEVICE INTERLOCK
ERRNZ SLTS+1-CDIS CODE ASSUMES VALUE
VMS2 LX6 12
SA6 A5
SX0 A5 ISSUE *STBM*
SB3 B5 RETURN ADDRESS
EQ /PROGRAM/AMM ACTIVATE MONITOR MODE
VMS3 NZ X7,/PROGRAM/CSM1 IF VALIDATION ERRORS
EQ /PROGRAM/CDI CLEAR DEVICE INTERLOCK
SPACE 4,10
** DEFINE TAGS FROM MAIN BLOCK.
HNG EQU /MONITOR/HNG
HNG1 EQU /MONITOR/HNG1
PPRX EQU /MONITOR/PPRX
PPR1 EQU /MONITOR/PPR1
ENDBLK
BLOCK ISDMMF,(SHARED DEVICE PROCESSING - MMF, LSPMMF OR ISD.)
CMB SPACE 4,15
** CLEAR MRT BIT. (DROP TRACKS)
* CALLED IN PROGRAM MODE.
*
* ENTRY (X0) = 12/ TRT LENGTH +2000B, 48/ MRT ADDRESS IN EM.
* (X4) = -3777B.
* (X7) = 2/ TRT BYTE, 40/, 18/ TRT WORD.
* (A3) = ADDRESS OF *TDGL* MST WORD.
* (B6) = TRT FWA.
*
* EXIT (X0) = 12/ TRT LENGTH +2000B, 48/ MRT ADDRESS IN EM.
* (X4) = -3777B.
* (A6) = MRT WORD.
* (B3) = MRT FWA.
CMB LX7 -3 SET MRT ADDRESS AND BIT NUMBER
BX5 X4*X7 MRT BIT NUMBER
SX6 B1
LX5 5
SB3 X5
LX6 X6,B3 POSITION MRT BIT
UX1,B3 X0 UNPACK LENGTH OF TRT
SB3 B3+B6
SA1 B3+X7 READ MRT WORD
BX6 -X6*X1 CLEAR BIT
BX5 X6-X1
SA6 A1
LX7 3
BX6 X6-X6
NZ X5,CMB1 IF MRT BIT SET FOR THIS MACHINE
SA1 A5 TEST ALLOWING DROP TRACKS FOR OTHER MF
LX1 59-46
PL X1,/PROGRAM/HNG IF NOT ALLOWED TO DROP THIS FILE
CMB1 TEQ (/ISD/SMU,ISD,/PROGRAM/SMU,MMF,/LSPMMF/SMU) COMPLETE
SMB SPACE 4,15
** SET MRT BIT. (REQUEST TRACKS)
* CALLED IN PROGRAM MODE.
*
* ENTRY (X0) = 12/ TRT LENGTH +2000B, 48/ MRT ADDRESS IN EM.
* (X4) = TRACK NUMBER.
* (A3) = ADDRESS OF *TDGL* MST WORD.
*
* EXIT (X0) = 12/ TRT LENGTH +2000B, 48/ MRT ADDRESS IN EM.
* (X4) = TRACK NUMBER.
* (A6) = MRT WORD.
* (B3) = MRT FWA.
SMB MX6 -5
BX6 -X6*X4
SB3 X6 MRT BIT NUMBER
SX6 B1
LX6 X6,B3 POSITION MRT BIT
UX1,B3 X0 UNPACK TRT LENGTH
SA1 A3+TRLL-TDGL SET FWA OF TRT
SB3 X1+B3 (B3) = START OF MRT
SX1 X4-4000B
LX1 -5
SA1 B3+X1 (A1) = MRT WORD ADDRESS
BX6 X1+X6
SA6 A1+
SA0 /PROGRAM/TMSK-1 SCRATCH WORD
TEQ (/ISD/SMU,ISD,/PROGRAM/SMU,MMF,/LSPMMF/SMU) COMPLETE
STB SPACE 4,10
* STBM SET/CLEAR MRT BIT.
* CALLED IN PROGRAM MODE.
*
* ENTRY (X0) = 12/ TRT LENGTH +2000B, 48/ MRT ADDRESS IN EM.
* (X1) = 2/ TRT BYTE, 40/, 18/ TRT WORD.
* (X4) = 0.
* (A3) = ADDRESS OF *TDGL* MST WORD.
* (B3) = RESERVATION BIT SHIFT COUNT (0=*STFS*/*CTFS*).
* (B6) = TRT FWA.
*
* EXIT (X0) = 12/ TRT LENGTH +2000B, 48/ MRT ADDRESS IN EM.
* (X4) = 0.
* (A6) = MRT WORD.
* (B3) = MRT FWA.
* (B4) .LT. TRT FWA.
* (X1) = FWA OF TRT TO UPDATE, IF NO MRT UPDATE.
* (X5) = LWA + 1 OF TRT TO UPDATE, IF NO MRT UPDATE.
STB10 UX6,B4 X0
ZR B3,STB12 IF FLAW REQUEST (NO MRT PROCESSING)
LX1 2
SX6 B3-6
AX6 59
MX3 -5
BX3 -X3*X1 MRT BIT POSITION
AX1 5 MRT WORD
SB3 X3
SX3 B1
LX3 X3,B3 POSITION MRT BIT
NZ X5,STB11 IF STIS/SPFS OPTION
BX6 -X6
STB11 SB3 B4+B6
BX6 X6*X3 NON ZERO IF SETTING MRT BIT
SA1 B3+X1
BX1 -X3*X1 CLEAR OLD BIT
BX6 X1+X6 MERGE NEW BIT
SA6 A1
TEQ (/ISD/SMU,ISD,/PROGRAM/SMU,MMF,/LSPMMF/SMU) COMPLETE
STB12 SX1 A4-B6 SET ONE WORD UPDATE FOR *CDI*
SX5 X1+B1
EQ /PROGRAM/CCP1 RELEASE INTERLOCK
ENDBLK
BLOCK BIOMMF,(SHARED BUFFERED DEVICE PROCESSING.)
QUAL BUFIO
MTE SPACE 4,10
** MTE - PROCESS *MTEM* FUNCTION.
*
* PARAMETERS ARE VALIDATED AND THE FUNCTION PASSED
* TO *MTE*.
MTE BSS 0 ENTRY
MX3 -12
AX1 36
SB4 X1-MXMTEM
PL B4,/MONITOR/HNG IF INVALID SUBFUNCTION
BX2 -X3*X5 ISOLATE PARAMETER
LX5 -12 POSITION FOR NEXT PARAMETER
JP TMTE+TMTEL+B4 JUMP TO PROCESS FUNCTION
* SUBFUNCTION TABLE.
TMTE BSS 0
LOC 0
+ LX5 -12 (CBRS) - CLEAR BAT READ ACCESS
BX4 -X3*X5 ISOLATE MACHINE INDEX
EQ MTE1 VALIDATE MACHINE INDEX/EST ORDINAL
+ LX5 -12 (CBWS) - CLEAR BAT READ/WRITE ACCESS
BX4 -X3*X5
EQ MTE1 VALIDATE MACHINE INDEX/EST ORDINAL
+ BX4 -X3*X5 (CEMS) - CLEAR EXTENDED MEMORY TRACK
LX5 -12
EQ MTE3 VALIDATE TRACK/SECTORS
+ BX4 -X3*X5 (EBRS) - ENABLE BRT PROCESSING
EQ /LSPMMF/QPR QUEUE *MTE* REQUEST
+ EQ MTE2 (SEPS) - SET ERROR PROCESSING INTERLOCK
+ EQ MTE2 (CEPS) - CLEAR ERROR PROCESSING INTERLOCK
+ EQ /LSPMMF/QPR (SRIS) - SET RECOVERY ERROR INTERLOCK
+ EQ /LSPMMF/QPR (CRIS) - CLEAR RECOVERY ERROR INTERLOCK
+ EQ MTE2 (RBPS) - RELEASE BAT/BST PERMISSIONS
+ EQ /LSPMMF/QPR (GRIS) - GET RECOVERY INTERLOCK STATUS
+ EQ MTE2 (SRPS) - SET RESTORE PARITY INTERLOCK
+ EQ MTE2 (CRPS) - CLEAR RESTORE PARITY INTERLOCK
+ EQ MTE2 (GBDS) - GET *BDT* ENTRY
TMTEL BSS 0
LOC *O
MTE1 SX4 X4-MXMF
PL X4,/MONITOR/HNG IF INVALID MACHINE INDEX
MTE2 CX4 X2,EST
TA4 X4+EQDE,EST READ EST ENTRY
BX1 X4
LX4 59-57
PL X4,/MONITOR/HNG IF NOT SHARED
LX4 59-53-59+57
PL X4,/MONITOR/HNG IF NOT BUFFERED
TX0 X2,-ESTL
BX0 X1*X0
PL X0,/MONITOR/HNG IF NOT MASS STORAGE OR OUT OF EST
MX0 -12 GET MST ADDRESS
BX0 -X0*X1
LX0 3
SA1 X0+MDGL GET *DAT* POINTER
MX0 -8
LX1 -48
BX1 -X0*X1
ZR X1,/MONITOR/HNG IF DEVICE IS NOT IN *DAT*
EQ /LSPMMF/QPR QUEUE FUNCTION FOR *MTE*
MTE3 SX2 X2-4000B
NG X2,/MONITOR/HNG IF INVALID TRACK TO CLEAR
BX3 -X3*X5 FIRST SECTOR TO CLEAR
IX3 X3+X4 COMPUTE LAST SECTOR TO CLEAR
SA2 MMFL GET LINK DEVICE EST ORDINAL
MX0 -9
LX2 -36
BX2 -X0*X2
CX4 X2,EST
TA4 X4+EQAE,EST READ EST ENTRY
LX4 -24
MX0 -2
BX4 -X0*X4 EXTENDED MEMORY SHIFT COUNT
SB3 X4
SX1 20B
LX1 B3,X1 SECTOR LIMIT
IX1 X3-X1
PL X1,/MONITOR/HNG IF LAST SECTOR PAST TRACK END
EQ /LSPMMF/QPR QUEUE FUNCTION FOR *MTE*
LBS SPACE 4,10
** LBS - *LBM* EXTENSION FOR SHARED DEVICES.
*
* ENTRY (B6) = BUFFER MANAGER OPERATION CODE.
*
* EXIT TO BUFFER MANAGER FUNCTION PROCESSOR.
*
* USES X - 0, 1, 2, 6.
* A - 1, 2, 6.
LBS BSS 0 ENTRY
SA2 RTCL
SA1 SDWR
MX0 -36
BX2 -X0*X2
ZR X1,LBS1 IF NO WRITE ACCESS REQUEST
BX1 -X0*X1
IX1 X2-X1
NG X1,LBS1 IF TIMEOUT NOT ELAPSED
SX6 B0+ CLEAR STATUS
SA6 A1+
LBS1 SA1 SDUR
ZR X1,LBS2 IF NO UNABLE TO RELEASE ACCESS STATUS
BX1 -X0*X1
IX1 X2-X1
NG X1,LBS2 IF TIMEOUT NOT ELAPSED
SX6 B0+ CLEAR STATUS
SA6 A1+
LBS2 JP B6+LBMA PROCESS FUNCTION
CRR SPACE 4,10
** CRR - COMPLETE *MTE* REQUEST FOR READ ACCESS.
*
* EXIT TO *LBMX*.
*
* USES X - 0, 1, 2, 4, 5, 6, 7.
* A - 1, 2, 6.
* B - 4, 5.
*
* CALLS SBP.
CRR BSS 0 ENTRY
SX5 2 SET NEW STATUS
SX7 7 SET STATUS TO CHECK
* ENTRY FROM *CWR*.
CRR1 SA1 SDEO
SB5 CRR2 SET *SBP* RETURN ADDRESS
ZR X1,/PROGRAM/HNG IF NOT SHARED DEVICE
EQ SBP SET BST PARAMETERS
CRR2 NG X2,/PROGRAM/HNG IF BST PROCESSING DISABLED
SA2 OPAR GET COMPLETION STATUS
BX7 X7*X4
SX7 X7-1
MX0 -1
NZ X7,/PROGRAM/HNG IF INCORRECT STATUS FOR RESPONSE
SB5 X2-1
BX4 X0*X4 CLEAR REQUEST IN PROGRESS FLAG
NG B5,CRR3 IF NORMAL COMPLETION
SX5 B0
ZR B5,CRR3 IF *BRT* ENTRY EVICTED BY *MTE*
GT B5,B1,/PROGRAM/HNG IF INCORRECT RESPONSE STATUS
LX1 48
LX3 36
SX7 B1+B1
BX6 X1+X3 SET EST ORDINAL AND TRACK
SA1 SDUR
SA2 RTCL
MX0 -36
BX7 X7*X4
NZ X7,/PROGRAM/HNG IF READ ACCESS CURRENTLY PRESENT
SX7 SDUD
NZ X1,CRR3 IF STATUS WORD IN USE
BX2 -X0*X2 SET TIMEOUT
IX2 X2+X7
BX6 X6+X2 SET UNABLE TO RELEASE ACCESS STATUS
SA6 A1
CRR3 SX1 60
SB4 -B4
BX4 X4+X5 SET NEW STATUS
SB4 X1+B4 SHIFT COUNT TO RESTORE ENTRY
LX6 B4,X4 UPDATE BST ENTRY
SA6 A4+
EQ LBMX EXIT BUFFER MANAGER
CWR SPACE 4,10
** CWR - COMPLETE *MTE* REQUEST FOR WRITE ACCESS.
*
* EXIT TO *CRR1*.
*
* USES X - 5, 6.
CWR BSS 0 ENTRY
SX5 6 SET NEW STATUS
SX7 5 SET STATUS TO CHECK
EQ CRR1 EXIT TO READ ACCESS PROCESSOR
RRA SPACE 4,15
** RRA - RELEASE READ ACCESS.
*
* EXIT TO *LBMX* IF ALL BUFFERS FLUSHED OR RELEASED.
* TO *SIS* IF WRITE ERROR ON BUFFER FLUSH.
* TO *SBB* IF ALL BUFFERS NOT FLUSHED OR RELEASED.
*
* USES X - 0, 1, 2, 3, 4, 6, 7.
* A - 1, 3, 4, 6.
* B - 4, 5, 6.
*
* CALLS CHA, DCC, DCH, LCC, SBP.
RRA BSS 0 ENTRY
SX7 6 SET TO CLEAR READ AND WRITE ACCESS
* SET BST INTERLOCK AND FIND HASH TABLE ENTRY.
* ENTRY FROM *RWA*.
RRA1 SA1 SDEO
SB5 RRA2 SET RETURN ADDRESS
ZR X1,/PROGRAM/HNG IF NOT SHARED DEVICE
EQ SBP SET BST PARAMETERS
* IN SOME CASES, *MTE* WILL REISSUE A *BMTR* OR *BMTW* REQUEST
* THAT HAD BEEN PREVIOUSLY COMPLETED SUCCESSFULLY BY *CPUMTR*.
* THIS IS NOT CONSIDERED AN ERROR CONDITION.
RRA2 SX6 A4+
BX2 X7*X4
PX6 B4,X6
ZR X2,LBMX IF REQUEST PREVIOUSLY PROCESSED
SA6 RRAA SAVE BST POINTERS
* FIND HASH TABLE ENTRY.
RRA3 SA7 RRAB SAVE ACCESS INFORMATION
SB6 RRA4 SET *CHA* RETURN ADDRESS
SX7 -1 SET LOCATE HASH TABLE ENTRY
EQ CHA CALCULATE HASH ADDRESS
RRA4 SA3 RRAB
BX7 X3 RESET ACCESS INFORMATION
ZR X1,RRA13 IF HASH TABLE ENTRY NOT FOUND
SA3 X1 GET HASH TABLE ENTRY
LX3 24
* GET BUFFER STATUS.
RRA5 LX3 -24
MX0 -12
BX6 -X0*X3 NEXT BUFFER ORDINAL
BX0 -X0*X3
SA6 INLB SET/CLEAR BUFFER INTERLOCK
LX6 CBTLS SET BUFFER ADDRESS
ZR X6,RRA13 IF END OF BUFFERS
TA2 X6+IOLK,CBT GET I/O INTERLOCK AND WRITE STATUS
SA3 A2+B1 GET HASH LINK
ERRNZ HSLK-IOLK-1
SA4 A3+B1 GET ACTIVITY COUNT
ERRNZ LSLK-HSLK-1
MX1 1
BX1 X1*X2 I/O INTERLOCK FLAG
BX6 X3
SA6 RRAC SAVE HASH LINKAGE
MX6 12
BX4 X6*X4 ACTIVITY COUNT
LX2 59-57
BX4 X1+X4
SX6 X0
PL X2,RRA8 IF NO WRITE DATA IN BUFFER
* FLUSH AND RELINK WRITE BUFFER.
MX1 1
BX7 X7+X1 INDICATE WRITE BUFFER FOUND
NZ X4,RRA7 IF I/O INTERLOCK OR ACTIVITY PRESENT
TA6 IORQ SET I/O REQUEST
+ XJ FLUSH BUFFER
SB6 RRA6 SET *DCC* RETURN ADDRESS
EQ DCC DELINK BUFFER FROM CURRENT LIST
RRA6 SB6 RRA11 SET *LCC* RETURN ADDRESS
TX1 DWTB
EQ LCC LINK BUFFER TO DATA WRITTEN LIST
RRA7 PL X3,RRA11 IF NO WRITE ERROR
SX1 B1
LX1 57-0
BX7 X7+X1 SET WRITE ERROR
EQ RRA11 SET BUFFER NOT RELEASED
* DELINK READ BUFFER FROM HASH TABLE.
RRA8 SX1 X7-4
ZR X1,RRA11 IF RELEASING WRITE ACCESS
NZ X4,RRA11 IF I/O INTERLOCK OR ACTIVITY PRESENT
SB6 RRA9 SET *DCH* RETURN ADDRESS
EQ DCH DELINK BUFFER FROM HASH TABLE
RRA9 SB6 RRA10 SET *DCC* RETURN ADDRESS
EQ DCC DELINK BUFFER FROM CURRENT LIST
RRA10 SB6 RRA12 SET *LCC* RETURN ADDRESS
TX1 EMTB
EQ LCC LINK BUFFER TO EMPTY LIST
* SET BUFFER NOT RELEASED.
RRA11 SX1 1
LX1 58-0
BX7 X7+X1 INDICATE BUFFER NOT RELEASED
* ADVANCE TO NEXT BUFFER.
RRA12 SA3 RRAC RESTORE *HSLK* INFORMATION
EQ RRA5 PROCESS NEXT BUFFER
* CHECK FOR MULTI-UNIT EQUIPMENT.
RRA13 SA1 PUTO
MX0 -12
BX2 -X0*X1 CURRENT PUT ORDINAL
LX2 PUTLS
TA2 X2+HSCT,PUT
BX2 -X0*X2 NEXT PUT ORDINAL
ZR X2,RRA14 IF END OF UNITS
SA2 LSEC
AX1 36 SINGLE UNIT SECTOR LIMIT
IX6 X2+X1 ADVANCE SECTOR TO NEXT UNIT
SA6 A2+
EQ RRA3 PROCESS NEXT UNIT
* CLEAR ACCESS FLAGS IN BST IF ALL BUFFERS RELEASED OR FLUSHED.
* IF ANOTHER MACHINE IS WAITING FOR WRITE ACCESS TO THE TRACK
* AND NO ACTIVITY REMAINS ON THIS MACHINE, THE TIMEOUT DELAY IN
* *SDWR* IS SET TO *SDMD* MILLISECONDS FROM THE CURRENT TIME.
* THIS IS TO ALLOW *MTE* ON THE MACHINE REQUESTING WRITE ACCESS
* TIME TO PROCESS THE REQUEST.
RRA14 SA4 RRAA
BX1 X7
LX1 3
SX7 X7 STATUS FLAGS TO CLEAR
SX1 X1 CURRENT BUFFER ACCESS STATUS
BX2 X1*X7
UX4,B4 X4 RESET BST PARAMETERS
NZ X2,RRA15 IF NOT ALL BUFFERS RELEASED/FLUSHED
SA4 X4 GET BST ENTRY
LX4 B4
SB5 60
BX4 -X7*X4 CLEAR READ/WRITE ACCESS
SB4 B5-B4
LX6 X4,B4
SA6 A4 UPDATE BST ENTRY
SX1 X7-6
NZ X1,LBMX IF NOT RELEASING READ ACCESS
SA1 SDWR
SA3 LTRK
SA4 SDEO
AX1 36
LX4 12
BX4 X4+X3
BX6 X4-X1
NZ X6,LBMX IF NO WAIT REQUEST FOR TRACK
SA2 RTCL
MX0 -36
LX1 36
SX7 SDMD
BX6 X1+X7
BX2 -X0*X2
IX6 X6+X2 SET TIME DELAY
SA6 A1 UPDATE REQUEST
EQ LBMX EXIT WITH NORMAL STATUS
* PROCESS ERROR RETURN.
RRA15 LX1 59-0
MX0 -36
NG X1,SIS IF WRITE ERROR ON FLUSH
SX1 X7-6
NZ X1,SBB IF NOT RELEASING READ ACCESS
SA1 SDWR
SA2 RTCL
SA3 LTRK
SA4 SDEO
NZ X1,SBB IF STATUS WORD IN USE
SX7 SDWD SET TIME DELAY
BX2 -X0*X2
LX3 36
LX4 48
IX7 X2+X7 SET TIMEOUT
BX6 X4+X3 MERGE EST ORDINAL AND TRACK
BX6 X6+X7 MERGE TIMEOUT
SA6 A1+ SET WRITE ACCESS REQUESTED
EQ SBB RETURN BUFFER BUSY STATUS
RRAA BSS 1 BST PARAMETERS
RRAB BSS 1 ACCESS MASK
RRAC BSS 1 CURRENT *HSLK* WORD
RWA SPACE 4,10
** RWA - RELEASE WRITE ACCESS.
*
* EXIT TO *RRA1* TO PROCESS FUNCTION.
*
* USES X - 7.
RWA BSS 0 ENTRY
SX7 4 SET TO CLEAR WRITE ACCESS
EQ RRA1 EXIT TO PROCESS FUNCTION
CSD SPACE 4,25
** CSD - CHECK SHARED DEVICE ACCESS.
*
* ENTRY (B6) = *CHA* RETURN ADDRESS.
* (X7) = BUFFERS ALLOCATED FLAG.
*
* EXIT TO *CHA* IF NOT SHARED DEVICE OR IF SHARED DEVICE AND
* BUFFER CAN BE ACCESSED.
* TO *CHA* RETURN ADDRESS IF SHARED DEVICE AND BUFFER
* CANNOT BE ACCESSED IN REQUESTED MODE.
* TO *SIS* IF BUFFER ON MACHINE HOLDING WRITE ACCESS
* CANNOT BE FLUSHED (DEVICE INACCESSIBLE).
* (X2) = -2 (REQUIRED FOR EXIT TO *CHA* CALLER WHEN
* BUFFER CANNOT BE ACCESSED IN REQUESTED
* MODE).
* (X7) = BUFFERS ALLOCATED FLAG.
*
* USES X - 0, 1, 2, 3, 4, 5, 6.
* A - 1, 2, 6.
* B - 4, 5.
*
* CALLS SBP.
CSD BSS 0 ENTRY
* ENTRY FOR READ ACCESS.
SX5 2 SET TO CHECK READ ACCESS
EQ CSD2
* ENTRY FOR WRITE ACCESS.
CSD1 SX5 4 SET TO CHECK WRITE ACCESS
* CHECK ACCESS TO SHARED DEVICE.
CSD2 SA1 SDEO GET EST ORDINAL IF SHARED DEVICE
ZR X1,CHA IF NOT SHARED DEVICE
SB5 CSD3 SET *SBP* RETURN ADDRESS
EQ SBP SET BST PARAMETERS
CSD3 NG X2,CHA IF BST PROCESSING DISABLED
SA2 SDWR
LX1 48
LX3 36
MX0 24
BX6 X1+X3 FORMAT EST ORDINAL AND TRACK FOR REQUEST
BX1 X5*X4
BX2 X0*X2
AX5 2
BX2 X2-X6
ZR X2,CSD4 IF WRITE ACCESS REQUESTED ON OTHER MACHINE
NZ X1,CHA IF REQUESTED ACCESS PRESENT
SA2 SDUR
BX2 X0*X2
BX2 X2-X6
ZR X2,SIS IF UNABLE TO RELEASE WRITE ACCESS
* MAKE *MTE* REQUEST.
SX0 B1
BX1 X0*X4
NZ X1,CSD4 IF *MTE* REQUEST ALREADY IN PROGRESS
SA1 /LSPMMF/MTIN READ *IN*
SA2 A1+B1 READ *OUT*
ERRNZ /LSPMMF/MTOT-/LSPMMF/MTIN-1
LX5 35-0
BX6 X6+X5 SET READ/WRITE FLAG IN REQUEST
BX4 X4+X0 SET *MTE* REQUEST FLAG
MX0 -6
SX3 X1+B1
BX3 -X0*X3 NEW *IN*
BX2 X2-X3
ZR X2,CSD4 IF REQUEST QUEUE FULL
SA6 X1+/LSPMMF/MTBT ENTER REQUEST
SX6 X3
SA6 A1 UPDATE *IN*
* UPDATE BST ENTRY.
SX1 60
SB4 -B4
SB4 X1+B4 SHIFT COUNT TO RESTORE ENTRY
LX6 X4,B4
SA6 A4
* EXIT TO CALLER OF *CHA*.
CSD4 SX2 -2 SET ACCESS REJECTED STATUS
JP B6 EXIT TO *CHA* CALLER
IPP SPACE 4,10
** IPS - *IPP* PREPROCESSOR FOR SHARED DEVICES.
*
* ENTRY SEE *CPUCIO* SPECIAL PROCESSOR DOCUMENTATION.
*
* EXIT TO *IPP0* IF REQUEST CAN BE PROCESSED BY PSEUDO-PP.
* TO */CPUCIO/RPC* IF REQUEST CANNOT BE PROCESSED BY
* PSEUDO-PP.
*
* USES X - 1, 2.
IPS BSS 0 ENTRY
BX1 X3
LX1 59-57
PL X1,IPP0 IF NOT SHARED DEVICE
EQ B3,B1,/CPUCIO/RPC IF WRITE FUNCTION
ERRNZ /CIO/WTF-1
SX1 1
IX1 X0-X1 FNT ADDRESS
ERX1 X1 READ FNT ENTRY
MX2 -6
LX1 0-6
BX2 -X2*X1 FILE TYPE
LX1 59-16-0+6
SX2 X2-PMFT
NZ X2,IPP0 IF NOT DIRECT ACCESS PERMANENT FILE
PL X1,IPP0 IF NOT M, A, RM, OR RA MODE
EQ /CPUCIO/RPC CALL PP CIO
SBP SPACE 4,15
** SBP - SET BST PARAMETERS.
*
* ENTRY (B5) = RETURN ADDRESS.
*
* EXIT (X2) .LT. 0 IF BST PROCESSING DISABLED.
* (X3) = LOGICAL TRACK.
* (X4) = BST WORD WITH ENTRY RIGHT JUSTIFIED.
* (A4) = BST WORD ADDRESS.
* (B4) = SHIFT COUNT TO POSITION ENTRY.
*
* USES X - 2, 3, 4, 6.
* A - 2, 3, 4.
* B - 4.
SBP BSS 0 ENTRY
SA2 MSTA GET MST ADDRESS
SA2 X2+BDLL
SA3 LTRK GET TRACK
LX2 -24
SB4 X2 SET BST ADDRESS
NG X2,RB5 IF BST PROCESSING DISABLED
SX4 X3-4000B
MX6 -4
BX6 -X6*X4 ENTRY ORDINAL IN WORD
AX4 4 BST WORD OFFSET
SA4 B4+X4 READ BST ENTRY
SX6 X6+B1 ENTRIES TO SHIFT TO RIGHT JUSTIFY ENTRY
SB4 X6
LX6 1
SB4 X6+B4 SHIFT COUNT TO POSITION ENTRY
LX4 B4 POSITION TO ENTRY
JP B5 RETURN
QUAL *
ENDBLK
BLOCK CPUCIO,(CPUCIO PROCESSOR.)
TITLE CPUCIO GLOBAL DATA.
SPACE 4,10
** GLOBAL DATA.
* THE FOLLOWING DATA IS ORDER DEPENDENT.
IR BSS 1 *CIO* CALL
MB BSS 1 *CIO* PARAMETERS
MB1 BSS 1 12/0, 24/IN, 24/OUT
MB2 BSS 1 1/R,5/0,6/FET LENGTH,24/FIRST,24/LIMIT
MB3 BSS 1 FUNCTION FLAGS
ERRNZ /CIO/RDF CODE DEPENDS ON INTERNAL CODE FOR READ
ERRNZ /CIO/WTF-1 CODE DEPENDS ON INTERNAL CODE FOR WRITE
ERRNZ FSTL-1 CODE DEPENDS ON POSITION OF FST
ERRNZ FUTL-FSTL-1 CODE DEPENDS ON POSITION OF WORD
TITLE CPUCIO EXIT ROUTINES.
PMV SPACE 4,10
** PMV - PROCESS *MAGNET* MOVING.
PMV SB5 PMV1 SER *SRC* RETURN ADDRESS
EQ SRC SET *RCLP* IN RA+1
PMV1 SB5 MVPR SET RECALL STACK REASON CODE
* EQ RCR SET REQUEST IN RECALL QUEUE
RCR SPACE 4,10
** RCR - REQUEST *CIO* RECALL.
*
* ENTRY (B5) = RECALL STACK REASON CODE.
* (IR) = *CIO* CALL.
* (MB) = *CIO* MESSAGE BUFFER PARAMETERS.
*
* EXIT TO *CPCX*.
*
* CALLS /MONITOR/AQR.
RCR SA4 IR GET *CIO* CALL
SX7 B5 RECALL STACK REASON CODE
MX3 6
SA1 MB *CIO* PARAMETER WORD
LX7 -12
BX6 X4
LX3 -6
BX1 -X3*X1
R= X2,/MONITOR/RQ
BX7 X7+X1
SA1 RTCL
SA7 /MONITOR/AQRA SAVE PARAMETER WORD
MX3 -36
SA4 RCRA GET RECALL TIME PARAMETERS
BX1 -X3*X1
LX1 12
IX0 X1+X4
SA1 B7+STSW
SB3 CPCX SET RETURN ADDRESS FOR *AQR*
LX1 59-24
PL X1,/MONITOR/AQR IF ROLLOUT NOT SET
BX2 X7
* ROLLOUT SET ON CONTROL POINT -
* PLACE REQUEST IN CPA RECALL AREA, BUT NOT IN QUEUE.
*
* ENTRY (A1) = ADDRESS OF *STSW*.
* (X1) = *STSW* LEFT-SHIFTED 59-24
* (X2) = PARAMETER WORD.
* (X6) = PP REQUEST.
* (B3) = RETURN ADDRESS.
* (B7) = CONTROL POINT AREA ADDRESS.
RCR1 LX1 24-59
MX7 -4
SB4 B7+RCCW-1
BX4 -X7*X1 NEXT FREE RECALL SLOT
BX7 X7*X1
SA3 B4+X4 READ NEXT FREE RECALL SLOT
MX4 1
SA6 A3+RECW-RCCW STORE REQUEST
SX3 X3+20B
BX6 X2+X4 SET RECALL BIT
IX7 X7+X3
SA6 A3+REPW-RCCW STORE PARAMETER WORD
SA7 A1 UPDATE STSW
JP B3 RETURN
RCRA VFD 12/PTMF,36/IORT,12/0 RECALL TIME PARAMETERS
RET SPACE 4,10
** RET - RETURN FILE.
RET BSS 0
BX1 X3
LX1 59-56
BX3 X1*X3
PL X3,RPC IF NOT REMOVABLE MASS STORAGE
* FORCE AUTORECALL TO PREVENT TWO FILE RETURNS ON A REMOVABLE
* DEVICE FROM OCCURRING SIMULTANEOUSLY. THIS PREVENTS EACH
* RETURN FROM DECIDING THAT ITS NOT THE LAST FILE ON THE DEVICE
* AND, THUS, NOT DECREMENTING THE RESOURCE COUNT.
SA1 IR
MX2 1
LX2 41-59
BX6 X2+X1
SA6 A1
* EQ RPC REQUEST PP CIO
RPC SPACE 4,15
** RPC - REQUEST PP CIO.
*
* ENTRY (X7) = 18/*TAPQ* INDEX, 42/REQUEST PARAMETERS.
* (IR) = *CIO* CALL.
* (MB) = *CIO* MESSAGE BUFFER PARAMETERS.
* (MB1) = FET LENGTH - 5, FIRST AND LIMIT.
* (MB2) = IN AND OUT.
*
* EXIT TO *CPCX*.
*
* CALLS /MONITOR/APQ.
RPC SA1 IR GET *CIO* CALL
MX0 -6
SA4 A1+B1 CLEAR RECALL STACK FLAG
BX0 -X0*X7
SB3 CPCX SET RETURN ADDRESS FOR *APQ*
MX6 -59
MX2 -42 PRESERVE ERROR CODE AND PARAMETERS
BX6 -X6*X4
BX4 -X2*X7
LX4 36
BX6 X6+X4
SA6 A4
SA6 /MONITOR/APQA
ZR X0,RPC1 IF NO ERROR
MX2 1 FORCE AUTO RECALL ON ERROR
LX2 41-59
BX6 X1+X2
SA6 A1+ REWRITE INPUT REGISTER
BX1 X6
* INDEX INTO TABLE *TAPQ* TO BUILD PP REQUEST.
RPC1 AX7 42 *TAPQ* OFFSET
SA2 TAPQ+X7
MX6 18
SB4 X2 PP FAST LOAD ADDRESS FROM *TAPQ*
BX1 -X6*X1
BX6 X6*X2
BX6 X6+X1
SA1 B7+STSW CHECK IF ROLLOUT REQUESTED
LX1 59-24
TPL X1,(/DCP/APQ,DCPC,/MONITOR/APQ) IF ROLLOUT NOT SET
SA2 /MONITOR/APQA
EQ RCR1 SET REQUEST IN CPA
TAPQ SPACE 4,10
** TAPQ - TABLE OF PP REQUEST CRITERIA.
*
* ENTRY ONE WORD.
*
*T 18/PP CALL, 42/PP FAST LOAD PARAMETER ADDRESS
TAPQ BSS 0
LOC 0
VFD 18/3L1MS,42//MONITOR/LA1MS
VFD 18/3L1MI,42//MONITOR/LA1MI
VFD 18/3L1ML,42//MONITOR/LA1ML
VFD 18/3L1OD,42//MONITOR/LA1OD
LOC *O
TAPQL EQU *-TAPQ PP REQUEST TABLE LENGTH
SRC SPACE 4,10
** SRC - SET *RCLP* AND CLEAR RECALL STATUS IN REQUEST.
*
* ENTRY (B5) = EXIT ADDRESS.
* (IR) = *CIO* CALL.
*
* USES X - 1, 2, 3, 6.
* A - 1, 2, 6.
SRC BSS 0
SA1 IR
LX1 59-41
MX6 -59
PL X1,SRC1 IF NOT AUTO RECALL
BX6 -X6*X1 CLEAR AUTO RECALL
LX6 41-59
SA2 /MONITOR/RC *RCLP* REQUEST
SA6 A1
SX3 X6 EXTRACT FET ADDRESS
SA1 B7+FLSW GET RA
BX6 X2+X3
MX2 -RMSK
AX1 RSHF
BX3 -X2*X1
SX1 B1 STORE *RCLP* IN RA + 1
LX3 6
IX3 X3+X1
EWX6 X3
SRC1 JP B5 RETURN
CPCX SPACE 4,15
** CPCX - CPUCIO EXIT PROCESSOR.
*
* ENTRY (A0) = CPU NUMBER.
* (A5) = PP *OR* ADDRESS OR CP RA+1 ADDRESS.
* (B1) = 1.
* (B2) = USER EXCHANGE PACKAGE AREA.
* (B7) = CPA.
* (IR) = *CIO* CALL.
*
* EXIT TO */MONITOR/.DPPM* IF PP REQUEST COMPLETE AND
* DROP OPTION SELECTED.
* TO */MONITOR/MTR* IF RA+1 CALL WITHOUT AUTO RECALL
* FLAG SET.
* TO */MONITOR/MTRX* IF RECALLED REQUEST OR IF RA+1 CALL
* WITHOUT AUTO RECALL WHEN JOB NOT ACTIVE IN CPU.
* TO */MONITOR/PPR1* IF PP REQUEST COMPLETE AND
* DROP OPTION NOT SELECTED.
* TO */MONITOR/SIS* IF RA+1 CALL WITH AUTO RECALL
* WHEN JOB ACTIVE IN CPU.
CPCX TX1 10B,SP
SX2 A5
MX0 -18
BX2 -X0*X2
IX1 X2-X1
ZR X1,/MONITOR/MTRX IF RECALLED REQUEST
NG X1,CPCX1 IF PP *RPPM* REQUEST
SA1 IR
MX0 3
LX1 59-41
PL X1,/MONITOR/MTR IF NO AUTO RECALL
SA1 B7+STSW GET CPU STATUS
NO
BX0 X0*X1
ZR X0,/MONITOR/MTRX IF NULL CPU STATUS
PL X1,/MONITOR/SIS IF JOB ACTIVE IN CPU
EQ /MONITOR/MTRX EXIT
CPCX1 SA5 A5
LX5 59-37
NG X5,/MONITOR/.DPPM IF DROP OPTION SELECTED
SX7 B1 RETURN RESPONSE
LX7 36
EQ /MONITOR/PPR1
TITLE CPUCIO MAIN ROUTINE.
CPC SPACE 4,10
** CPC - CPUCIO PROCESSOR (MONITOR MODE ENTRY POINT).
*
* ENTRY (A0) = CPU NUMBER.
* (B1) = 1.
* (B2) = USER EXCHANGE PACKAGE AREA.
* (B7) = CPA.
* (A5) = PP *OR* ADDRESS OR CP RA+1 ADDRESS.
* (IR) = *CIO* CALL.
* (MB) = *CIO* PARAMETER WORD IF RESTART.
* = 0 IF INITIAL *CIO* CALL.
*
* EXIT TO */CIO819/IPP1* IF PSEUDO PP CONTINUATION FUNCTION.
* TO EQUIPMENT FUNCTION PROCESSOR (SEE *TFPJ* TABLE).
*
* ERROR EXIT TO *RPC* IF ERROR DETECTED.
*
* CALLS /MONITOR/VFA, /MONITOR/VFP.
* VALIDATE FET ADDRESS.
CPC SA4 MB CHECK IF CONTINUATION FUNCTION
MX1 -59
BX4 -X1*X4 IGNORE RECALL STACK FLAG
SX6 B0+
MX1 -54
LX4 59-55
CPC1 TNG X4,(/BUFIO/IPP1,BUFIO,/CPUCIO/CPC1) IF BUFFERED I/O
LX4 59-53-59+55
BX4 -X1*X4 IGNORE RECALL STACK REASON CODE
SA6 A4+B1 CLEAR FET PARAMETER WORDS
SA1 A4-B1 GET FET ADDRESS
SA6 A6+B1
SA6 A6+B1
SX7 /CIOERR/ARG *FET ADDRESS OUT OF RANGE*
SB3 RPC SET ERROR EXIT ADDRESS FOR *VFA*
SB6 CPC3 SET RETURN ADDRESS FOR *VFA*
ZR X4,/MONITOR/VFA IF INITIAL CALL
SB6 CPC2 SET RETURN ADDRESS FOR *VFA*
EQ /MONITOR/VFA VALIDATE FET ADDRESS
CPC2 SA4 A4
MX2 -12
SA6 MB2 SAVE FET LENGTH - 5 AND RANDOM FILE FLAG
LX4 -24
BX2 -X2*X4 FNT ORDINAL
SX2 X2-FSTL
IX0 X0-X2 ABSOLUTE FST ADDRESS
LX4 24
EQ CPC16 VERIFY FET PARAMETERS
CPC3 SA6 MB2 SAVE FET LENGTH - 5 AND RANDOM FILE FLAG
MX4 -12
LX2 -36
SX6 B1+
BX2 -X4*X2 NFL/100B
IX3 X5-X6 FET+0
MX6 -2
ERX3 X3
IX5 X5-X6 FET+4
MX6 42
SX7 /CIOERR/FLN *FILE NAME ERROR*
BX1 X6*X3
LX2 6
ZR X1,RPC IF NO FILE NAME
* CHECK FNT POINTER FROM FET.
SX7 FNTN
ERX1 X5 GET FNT POINTER FROM FET
IX0 X0-X7
LX1 12
BX1 -X4*X1 FNT ORDINAL
IX4 X2-X1
IX1 X1-X7
IX2 X2-X7
PX2 X2
NG X1,CPC4 IF FNT POINTER TOO SMALL
NG X4,CPC4 IF FNT POINTER TOO LARGE
IX0 X0-X1 ABSOLUTE FNT ADDRESS
ERX4 X0 GET FNT ENTRY
BX4 X3-X4
BX4 X6*X4
IX6 X1+X7 FNT ORDINAL
ZR X4,CPC7 IF FILE NAME MATCH
IX0 X0+X1
* LOCATE FNT ENTRY.
CPC4 SX7 LENF COMPUTE ADDRESS OF LAST FNT ENTRY
PX4 X7
NX4 X4
FX2 X2/X4
UX2 X2,B6
LX2 B6
IX2 X7*X2
BX6 X3
IX4 X0-X2
EWX6 X4 STORE FILE NAME FOR MATCH
MX6 42
CPC5 ERX1 X0
IX0 X0-X7
ERX2 X0
BX1 X1-X3
BX1 X6*X1
ZR X1,CPC6 IF FOUND
BX2 X2-X3
IX0 X0-X7
BX2 X6*X2
NZ X2,CPC5 IF NOT FOUND
CPC6 IX1 X0+X7
BX6 X6-X6 CLEAR FILE NAME FROM END OF FNT
IX0 X4-X1
EWX6 X4
ZR X0,CPC8 IF FILE NOT FOUND
SA2 B7+FLSW GET RA
BX0 X1
MX7 -48
LX2 -12
ERX1 X5 SET FNT ORDINAL IN FET
SX2 X2
BX7 -X7*X1
LX2 6
IX6 X2-X0 FNT ORDINAL
LX6 -12
BX7 X6+X7
EWX7 X5
LX6 12
* CHECK FILE BUSY.
CPC7 SX2 B1
ERRNZ FSTL-1 CODE DEPENDS ON VALUE
IX0 X0+X2 ABSOLUTE FST ADDRESS
ERX1 X0 CHECK FILE BUSY
BX4 X2*X1
SX7 /CIOERR/FSQ *I/O SEQUENCE ERROR*
ZR X4,RPC IF FILE BUSY
BX7 X1-X2 SET FILE BUSY
EWX7 X0
* IDENTIFY *CIO* REQUEST.
CPC8 LX3 -14 GET LEVEL NUMBER
MX4 -4
BX1 -X4*X3
MX4 -8
LX3 13 GET EXTERNAL CIO FUNCTION CODE
BX3 -X4*X3
LX1 8
BX1 X1+X3
SX2 B1
LX6 12
AX3 1
BX4 -X3*X2
SB3 X3-600B/4
BX6 X6+X1
LX6 12
SX2 30
LX3 -4
IX4 X2*X4
SX1 X3-3
SA6 MB SAVE FNT ORDINAL AND EXTERNAL CODE
SX7 /CIOERR/IRQ *ILLEGAL I/O REQUEST ON FILE*
NG X1,CPC9 IF 0XX, 1XX, OR 2XX FUNCTION CODE
SX2 B1+B1
IX3 X3-X2 MAP 3XX INTO 1XX FUNCTION CODE
ZR X1,CPC9 IF 3XX FUNCTION CODE
LX2 1
IX3 X3-X2 MAP 6XX INTO 0XX FUNCTION CODE
MX1 -3
BX1 -X1*X3
NZ X1,RPC IF NOT 6XX FUNCTION CODE
CPC9 LX3 3
SA3 TCIC+X3 GET INTERNAL CODE AND FUNCTION FLAGS
SB6 X4
LX3 B6
LX3 -18
MX2 48
BX1 X1+X3
PL X1,RPC IF NOT LEGAL 3XX/6XX FUNCTION CODE
BX1 X2+X3
BX4 -X2*X3 INTERNAL CIO FUNCTION CODE
ZR X1,RPC IF ILLEGAL FUNCTION CODE
LX7 X3 SAVE FUNCTION FLAGS
LX3 59-56 CHECK IF FNT REQUIRED
SA7 MB3
MX7 1
BX1 -X3*X7
LX7 6-59
BX1 X1+X0
SB5 RPC
ZR X1,SRC IF FNT REQUIRED AND NOT FOUND
NZ B3,CPC10 IF NOT 600 FUNCTION CODE
SX4 X4+/CIO/EOI SET EOI TERMINATION CONDITION
* PROCESS SKIP COUNT AND LEVEL NUMBER.
CPC10 BX3 X6
AX3 20 GET LEVEL NUMBER
MX7 56
BX3 X7+X3
SA1 A6-B1
MX2 42
LX2 18
BX7 X2*X1 CLEAR SKIP COUNT
BX2 -X2*X1
SX1 1754B
BX1 X1*X4 FUNCTION CODE AND TERMINATION CONDITION
SB3 X1-/CIO/SKP*100B-/CIO/PRU
ZR B3,CPC12 IF BACKSPACE PRU FUNCTION
SB3 X1-/CIO/SKP*100B-/CIO/EOR
ZR B3,CPC11 IF SKIP RECORD FUNCTION
SX2 B1+
NZ X3,CPC14 IF NOT LEVEL 17B
SB3 X1-/CIO/WTF*100B-/CIO/EOR
ZR B3,CPC13 IF WRITER/REWRITER
SX3 X1-/CIO/RDF*100B-40B-/CIO/EOI
NZ X3,CPC14 IF NOT *READCW*
SX4 X4+/CIO/EOF-/CIO/EOI STOP ON EOF
EQ CPC14 UPDATE PARAMETER WORD
CPC11 NZ X3,CPC12 IF NOT LEVEL 17B
SX4 X4+/CIO/EOF-/CIO/EOR SET EOF STOP
CPC12 MX3 1 SET SKIP DATA TRANSFER FLAG
LX3 56-59
BX6 X6+X3
LX2 -18
SX3 X2
NZ X3,CPC14 IF SKIP COUNT SPECIFIED
SX3 B1 SET SKIP COUNT = 1
LX3 18
BX7 X7+X3
SA7 A1+
ZR X2,CPC14 IF SKIP COUNT NOT INDEFINITE
SX3 /CIO/EOI SET STOP ON EOI FOR FORWARD SKIP
BX4 X4+X3
BX7 X4
MX2 7
LX7 59-11
PL X7,CPC14 IF FORWARD SKIP
SX4 X4+/CIO/REW*100B-/CIO/SKP*100B-/CIO/EOI SET REWIND
SX3 50B/2
LX2 19-59
BX6 -X2*X6
LX3 12
BX6 X6+X3
EQ CPC14 UPDATE FET+0
CPC13 SX4 X4+/CIO/EOF-/CIO/EOR SET WRITEF/REWRITEF FUNCTION
LX2 14-0
IX6 X6+X2 SET EXTERNAL FUNCTION CODE
CPC14 BX6 X6+X4 SET INTERNAL CODE IN PARAMETER WORD
SA6 A6
LX6 -12
MX7 -8
BX6 -X7*X6 UPDATE EXTERNAL CODE IN FET
SX3 4
LX6 1
IX5 X5-X3 GET FET+0
ERX2 X5
MX7 46
BX7 X7*X2 CLEAR ABNORMAL TERMINATION FIELD
IX7 X7+X6
EWX7 X5
SX6 B1
IX5 X5+X6 FET+1
* CHECK FILE ACCESS.
SA4 A6
ZR X0,CPC16 IF NO FNT ENTRY
IX2 X0-X6
ERX2 X2 GET FNT ENTRY
AX1 6
LX2 59-14
SB5 X1 INTERNAL FUNCTION CODE
PL X2,CPC15 IF NOT EXECUTE-ONLY FILE
SA1 B7+EOCW CHECK LAST FILE EXECUTED
SA3 B7+SEPW CHECK SPECIAL ENTRY POINTS
MX7 12
LX4 24
BX1 X1-X4
LX3 59-55
BX1 X1*X7
LX4 -24
ZR X1,CPC15 IF PROGRAM LOADED FROM THIS FILE
NG X3,CPC15 IF LDR= PROGRAM
SA1 MB3 GET FUNCTION FLAGS
SX7 /CIOERR/EXO *I/O ON EXECUTE-ONLY FILE*
LX1 59-54
PL X1,RPC IF FUNCTION INVALID ON EXECUTE ONLY FILE
CPC15 SX1 B5-/CIO/OVW
LX2 59-12-59+14
ZR X1,CPC15.1 IF OVERWRITE FUNCTION
NE B5,B1,CPC16 IF NOT WRITE FUNCTION
CPC15.1 SX7 /CIOERR/IWR *WRITE ON READ ONLY FILE*
NG X2,RPC IF WRITE LOCKOUT SET
* VERIFY FET PARAMETERS.
CPC16 MX1 -2 GET VALIDATION FLAGS
BX6 -X1*X4
ZR X6,CPC18 IF NO VALIDATION REQUIRED
SB6 CPC17 SET RETURN ADDRESS FOR *VFP*
SB3 RPC SET ERROR EXIT ADDRESS FOR *VFP*
SX7 /CIOERR/BUF *BUFFER ARGUMENT ERROR*
EQ /MONITOR/VFP VERIFY FET PARAMETERS
CPC17 SA2 MB2 GET FET LENGTH - 5 AND RANDOM FLAG
SA3 A2+B1 GET FUNCTION FLAGS
BX7 X1+X2
SA6 A2-B1 SAVE IN AND OUT
LX3 59-55 CHECK FOR REWIND OPERATION
SA7 A2 SAVE FIRST, LIMIT, AND FET LENGTH
SX2 B1
PL X3,CPC18 IF NOT REWIND OPERATION
SX7 B4+ FIRST
IX1 X5+X2 FET+2
EWX7 X1 SET IN = FIRST
IX1 X1+X2 FET+3
EWX7 X1 SET OUT = FIRST
ZR X0,CPC18 IF NO FNT ENTRY
ERX1 X0 GET FST ENTRY
LX2 11 CLEAR SYSTEM SECTOR PROCESSING BIT
MX7 12 GET EST ENTRY
BX7 X7*X1
LX7 12
CX4 X7,EST CONVERT EST ORDINAL TO OFFSET
TA4 X4+EQDE,EST
MX7 -11
LX4 -12
BX7 -X7*X4
SB6 X7-2RMT
ZR B6,CPC18 IF *MT* EQUIPMENT
SB6 X7-2RNT
ZR B6,CPC18 IF *NT* EQUIPMENT
BX7 -X2*X1
EWX7 X0
* VALIDATE SECURITY ACCESS LEVEL OF FILE AND JOB.
CPC18 ZR X0,CPC18.4 IF NO FNT ENTRY
TB6 OSSM GET O/S SECURITY MODE
ZR B6,CPC18.4 IF UNSECURED SYSTEM
GT B5,B1,CPC18.4 IF NOT READ OR WRITE FUNCTION
SX2 B1
SA1 B7+JSCW GET JOB ACCESS LEVEL
IX2 X0+X2
LX1 15
ERX2 X2 GET FILE ACCESS LEVEL
MX6 -3
LX2 -24
BX7 -X6*X1
SA4 B7+SEPW CHECK FOR SSJ=
BX6 -X6*X2
IX7 X7-X6
LX4 59-50
ZR X7,CPC18.4 IF JOB AND FILE AT SAME ACCESS LEVEL
SA3 B7+JCIW CHECK FOR SUBSYSTEM
NG X4,CPC18.4 IF JOB HAS SSJ= PRIVILEGES
LX3 -24
MX4 -12
BX3 -X4*X3
MX4 57
SX3 X3-LSSI-1
PL X3,CPC18.4 IF SUBSYSTEM
SX3 B1
IX3 X0-X3
EQ B5,B1,CPC18.1 IF WRITE FUNCTION
PL X7,CPC18.4 IF READ FROM FILE AT LOWER LEVEL
BX1 X4*X1 RAISE JOB LEVEL TO FILE LEVEL
BX7 X1+X6
LX7 -15
SA7 A1
EQ CPC18.4 GET DEVICE TYPE
CPC18.1 NG X7,CPC18.4 IF WRITE TO FILE AT HIGHER LEVEL
LX1 59-53-15
ERX3 X3 GET FNT ENTRY
MX6 -6
NG X1,CPC18.4 IF USER ALLOWED TO WRITE TO LOWER LEVEL
LX3 -6
BX6 -X6*X3 GET FILE TYPE FROM FNT
SX6 X6-PMFT
ERX3 X0 GET EQUIPMENT FROM FST
SX7 /CIOERR/WDP *WRITEDOWN PROHIBITED.*
ZR X6,RPC IF DIRECT ACCESS PERMANENT FILE
MX6 -9
LX3 12
BX3 -X6*X3
LX1 53-59+15
MX6 -3
BX1 -X6*X1
ZR X3,CPC18.3 IF NO EQUIPMENT ASSIGNED
CX4 X3,EST CONVERT EST ORDINAL TO OFFSET
TA3 X4+EQDE,EST GET EST ENTRY
MX6 -11 GET EQUIPMENT MNEMONIC
LX6 12
BX6 -X6*X3
LX6 -12
SB6 X6-2RMT
ZR B6,RPC IF TAPE EQUIPMENT
SB6 X6-2RNT
ZR B6,RPC IF TAPE EQUIPMENT
SB6 CPC18.2 SET *VAE* RETURN ADDRESS
EQ /MONITOR/VAE0 VALIDATE EQUIPMENT ACCESS LEVEL
CPC18.2 SX7 /CIOERR/LNF *ACCESS LEVEL NOT VALID FOR FILE*
NG X6,RPC IF JOB LEVEL NOT VALID FOR EQUIPMENT
CPC18.3 MX7 57 RAISE FILE TO JOB ACCESS LEVEL
SX3 B1+
BX7 X7*X2
IX3 X0+X3
BX7 X7+X1
LX7 24
EWX7 X3
* GET DEVICE TYPE.
CPC18.4 SA1 TFCP
MX6 -11
BX4 X4-X4
MX3 -12
ZR X0,CPC19 IF NO FNT ENTRY
ERX2 X0
LX2 12
BX4 -X3*X2 EST ORDINAL
ZR X4,CPC19 IF EQUIPMENT NOT ASSIGNED
CX3 X4,EST CONVERT EST ORDINAL TO OFFSET
TA3 X3+EQDE,EST READ EST ENTRY
LX3 -12
BX4 -X6*X3 DEVICE TYPE
LX3 12
PL X3,CPC19 IF NOT MASS STORAGE
BX2 X3
LX2 59-53
NG X2,CPC20 IF BUFFERED DEVICE
* DETERMINE FUNCTION PROCESSOR.
CPC19 SA1 A1+1
BX2 -X6*X1
BX7 X2-X4
ZR X7,CPC20 IF EQUIPMENT FOUND
NZ X2,CPC19 IF MORE ENTRIES TO CHECK
NG X3,CPC20 IF MASS STORAGE EQUIPMENT
SA1 A1+1 GET ALL OTHER EQUIPMENT ENTRY
CPC20 BX6 X3
NG X3,CPC21 IF MASS STORAGE
LX6 59-58
CPC21 ERX2 X5 SET DEVICE TYPE IN FET
MX7 1
BX7 -X6*X7 NON-ALLOCATABLE FLAG
MX6 -48
LX4 -12
BX6 -X6*X2
SA2 MB3 GET FUNCTION FLAGS
BX7 X7+X4
LX2 59-53
BX6 X6+X7
SX4 B1
NG X2,CPC22 IF DEVICE TYPE NOT TO BE RETURNED
EWX6 X5
LX6 59-39
PL X6,CPC22 IF FILE ACCESS LEVEL NOT TO BE RETURNED
IX4 X0+X4
MX6 -3
ERX4 X4 GET FILE ACCESS LEVEL
SX7 3
IX7 X5+X7 GET FET + 4
LX4 -24
ERX2 X7
BX4 -X6*X4
LX2 -36
BX2 X6*X2
BX6 X2+X4 RETURN FILE ACCESS LEVEL IN FET + 4
LX6 36
EWX6 X7
CPC22 SA2 MB3 GET FUNCTION FLAGS
MX7 2
LX2 59-58
BX2 X7*X2
BX7 X7*X1
MX6 -4
BX2 X7*X2
SA4 MB GET INTERNAL FUNCTION CODE
LX1 -12
LX4 -6
NZ X2,TFPJ+/TFPJ/RUD IF FUNCTION NOT VALID ON EQUIPMENT
BX2 -X6*X4
SB3 X2
SB6 B3+B3
BX7 X7-X7
SB6 B6+B6 FUNCTION CODE * 4
AX1 B6
BX1 -X6*X1 INDEX INTO *TFPJ* JUMP TABLE
SB6 X1
JP TFPJ+B6 EXIT TO PROCESSOR
TFPJ BSS 0 TABLE OF FUNCTION PROCESSOR JUMPS
QUAL TFPJ
IPP EQU *-/CPUCIO/TFPJ
TEQ (/BUFIO/IPP,BUFIO,/CPUCIO/TFPJ+/TFPJ/IPP) PSEUDO PP
BSS 0
OPE EQU *-/CPUCIO/TFPJ
SA1 /CPUCIO/MB2 READ RANDOM FILE FLAG
EQ /CPUCIO/OPE PROCESS OPEN
BSS 0
RET EQU *-/CPUCIO/TFPJ
NZ X0,/CPUCIO/RET FNT/FST PRESENT
EQ /CPUCIO/RWF SET CRI AND COMPLETE FET
BSS 0
PMT EQU *-/CPUCIO/TFPJ
EQ /CPUCIO/PMT PROCESS MAGNETIC TAPE
BSS 0
POD EQU *-/CPUCIO/TFPJ
EQ /CPUCIO/POD PROCESS OPTICAL DISK
BSS 0
RPC EQU *-/CPUCIO/TFPJ
EQ /CPUCIO/RPC CALL PP CIO
BSS 0
RWF EQU *-/CPUCIO/TFPJ
EQ /CPUCIO/RWF PROCESS REWIND FUNCTION
BSS 0
TIO EQU *-/CPUCIO/TFPJ
PL X4,/CPUCIO/TIO IF NOT CONTROL WORDS
EQ /CPUCIO/TFPJ+/TFPJ/RUD CONTROL WORDS NOT VALID
BSS 0
CCI EQU *-/CPUCIO/TFPJ
SX7 B1+B1 *TAPQ* TABLE OF PP REQUESTS INDEX
LX7 42-0
EQ /CPUCIO/RPC CALL PP CIO
BSS 0
RUD EQU *-/CPUCIO/TFPJ
SX7 /CIOERR/RUD *REQUEST UNDEFINED ON DEVICE*
EQ /CPUCIO/RPC CALL PP CIO
BSS 0
IEQ EQU *-/CPUCIO/TFPJ
SX7 /CIOERR/IEQ *ILLEGAL EQUIPMENT ON FILE*
EQ /CPUCIO/RPC CALL PP CIO
RTE EQU *-/CPUCIO/TFPJ
SX4 1 SET FST STATUS (EQUIVALENT TO TAPE)
EQ /CPUCIO/RWF0 PROCESS REWIND FUNCTION FOR *TEEQ*
BSS 0
QUAL *
TFCP SPACE 4,20
** TFCP - TABLE OF FUNCTION CODE PROCESSORS.
*
*T 1/S, 1/T, 10/, 36/ TFPJI, 12/ DT
* DT DEVICE TYPE (0 = ANY DEVICE).
* S IF SET, MASS STORAGE ONLY FUNCTION IS NOT ALLOWED
* ON THIS EQUIPMENT.
* T IF SET, MAGNETIC TAPE ONLY FUNCTION IS NOT
* ALLOWED ON THIS EQUIPMENT.
* TFPJI *TFPJ* TABLE INDICES TO PROCESS *CIO* FUNCTIONS -
* 4/OV,4/EV,4/RT,4/RW,4/CL,4/OP,4/SK,4/WT,4/RD
* OV *TFPJ* TABLE INDEX FOR *OVERWRITE* PROCESSOR.
* EV *TFPJ* TABLE INDEX FOR *EVICT* PROCESSOR.
* RT *TFPJ* TABLE INDEX FOR *RETURN/UNLOAD* PROCESSOR.
* RW *TFPJ* TABLE INDEX FOR *REWIND* PROCESSOR.
* CL *TFPJ* TABLE INDEX FOR *CLOSE* PROCESSOR.
* OP *TFPJ* TABLE INDEX FOR *OPEN* PROCESSOR.
* SK *TFPJ* TABLE INDEX FOR *SKIP* PROCESSOR.
* WT *TFPJ* TABLE INDEX FOR *WRITE* PROCESSOR.
* RD *TFPJ* TABLE INDEX FOR *READ* PROCESSOR.
*
* NOTE - FUNCTION PROCESSOR JUMP INDEXES MUST BE IN SAME
* ORDER AS INTERNAL *CIO* FUNCTION CODES.
ERRNZ /CIO/RDF
ERRNZ /CIO/WTF-1
ERRNZ /CIO/SKP-2
ERRNZ /CIO/OPE-3
ERRNZ /CIO/CLO-4
ERRNZ /CIO/REW-5
ERRNZ /CIO/RET-6
ERRNZ /CIO/EVI-7
ERRNZ /CIO/OVW-10B
TFCP BSS 0
QUAL TFPJ
VFD 1/0,1/1,10/0 BUFFERED MASS STORAGE
VFD 4/RPC,4/RPC,4/RPC,4/RWF,4/RPC,4/OPE,4/IPP,4/IPP,4/IPP
VFD 12/3777B
* TABLE SEARCH STARTS HERE FOR ALL BUT BUFFERED MASS STORAGE.
VFD 1/1,1/0,10/0 OPTICAL DISK
VFD 4/POD,4/POD,4/POD,4/POD,4/POD,4/POD,4/POD,4/POD,4/POD
VFD 12/2ROD
VFD 1/1,1/0,10/0 7-TRACK TAPE
VFD 4/RUD,4/PMT,4/PMT,4/PMT,4/PMT,4/PMT,4/PMT,4/PMT,4/PMT
VFD 12/2RMT
VFD 1/1,1/0,10/0 9-TRACK TAPE
VFD 4/RUD,4/PMT,4/PMT,4/PMT,4/PMT,4/PMT,4/PMT,4/PMT,4/PMT
VFD 12/2RNT
VFD 1/1,1/0,10/0 CARTRIDGE TAPE
VFD 4/RUD,4/PMT,4/PMT,4/PMT,4/PMT,4/PMT,4/PMT,4/PMT,4/PMT
VFD 12/2RCT
VFD 1/1,1/0,10/0 ACS CARTRIDGE TAPE
VFD 4/RUD,4/PMT,4/PMT,4/PMT,4/PMT,4/PMT,4/PMT,4/PMT,4/PMT
VFD 12/2RAT
VFD 1/1,1/1,10/0 *TE* PSEUDO-EQUIPMENT
VFD 4/RUD,4/RPC,4/RPC,4/RTE,4/RPC,4/RUD,4/RUD,4/RUD,4/RUD
VFD 12/2RTE
VFD 1/1,1/1,10/0 TERMINAL
VFD 4/RUD,4/RPC,4/RPC,4/RWF,4/RPC,4/OPE,4/RPC,4/TIO,4/TIO
VFD 12/2RTT
VFD 1/0,1/1,10/0 NULL EQUIPMENT
VFD 4/RPC,4/RPC,4/RPC,4/RWF,4/RPC,4/OPE,4/RPC,4/RPC,4/RPC
VFD 12/2RNE
VFD 1/1,1/1,10/0 COMMUNICATION COUPLER
VFD 4/RUD,4/CCI,4/CCI,4/CCI,4/CCI,4/CCI,4/CCI,4/CCI,4/CCI
VFD 12/2RCC
VFD 1/0,1/1,10/0 ALL OTHER MASS STORAGE
VFD 4/RPC,4/RET,4/RET,4/RWF,4/RPC,4/OPE,4/RPC,4/RPC,4/RPC
VFD 12/0
VFD 1/1,1/1,10/0 ALL OTHER NON-MASS STORAGE
VFD 4/IEQ,4/RET,4/RET,4/RWF,4/RPC,4/IEQ,4/IEQ,4/IEQ,4/IEQ
VFD 12/0
QUAL *
TCIC SPACE 4,10
** TCIC - TABLE OF CIO INTERNAL FUNCTION CODES.
*
* 30 BITS PER ENTRY -
*T 12/ IC, 1/E, 1/M, 1/T, 1/F, 1/R, 1/X, 1/D, 11/0
* IC = INTERNAL CIO CODE (DEFINED IN *COMSCIO*).
* = 7777B IF ILLEGAL REQUEST CODE.
* E = 1, IF EXTENDED FUNCTION LEGAL (3XX/6XX CIO CODE).
* M = 1, IF MASS STORAGE ONLY FUNCTION.
* T = 1, IF MAGNETIC TAPE ONLY FUNCTION.
* F = 1, IF FUNCTION REQUIRES FNT ENTRY.
* R = 1, IF REWIND OPERATION (SET *IN* = *OUT* = *FIRST*).
* X = 1, IF FUNCTION LEGAL ON EXECUTE ONLY FILE.
* D = 1, IF FUNCTION DOES NOT RETURN DEVICE TYPE TO FET.
*
* REFER TO *ICTE* MACRO FOR PARAMETER DESCRIPTION.
TCIC BSS 0
QUAL CIO
* THE FOLLOWING TABLE SECTION CONTAINS THE INTERNAL
* CODES CORRESPONDING TO THE 000XXXX00 AND 110XXXX00
* BINARY EXTERNAL CIO FUNCTION CODES.
ICTE RDF,(PRU,VFL,VIO,RFE,XF) RPHR (000), READEI (600)
ICTE WTF,(PRU,VFL,VIO,RFE) WPHR (004)
ICTE RDF,(EOR,VFL,VIO,RFE) READ (010)
ICTE WTF,(EOI,VFL,VIO,RFE) WRITE(014)
ICTE RDF,(EOR,VFL,VIO,SKO,RFE) READSKP (020)
ICTE WTF,(EOR,VFL,VIO,RFE) WRITER (024)
ICTE UNUSED (030)
ICTE WTF,(EOF,VFL,VIO,RFE) WRITEF (034)
ICTE SKP,(EOR,SKO,BKW,EXF,XF) BKSP (040), SKIPB (640)
ICTE SKP,(PRU,SKO,BKW,EXF) BKSPRU (044)
ICTE REW,(VFL,BKW,IOF,EXF) REWIND (050)
ICTE REW,(VFL,BKW,IOF,EXF) REWIND (054)
ICTE RET,(UNL,EXF,NDT) UNLOAD (060)
ICTE UNUSED (064)
ICTE RET,(EXF,NDT) RETURN (070)
ICTE UNUSED (074)
* THE FOLLOWING TABLE SECTION CONTAINS THE INTERNAL
* CODES CORRESPONDING TO THE 001XXXX00 AND 011XXXX00
* BINARY EXTERNAL CIO FUNCTION CODES.
ICTE OPE,(VFL,RFE,XF) OPEN READ/REEL NR(100/300)
ICTE OPE,(VFL,RFE) OPEN WRITENR (104)
ICTE OPE,(VFL,MTO) POSMF (110)
ICTE EVI,(UNL,EXF) EVICT (114)
ICTE OPE,(VFL,RFE) OPEN NR/ALTERNR (120)
ICTE UNUSED (124)
ICTE CLO,(EOR,XF) CLOSE(R) NR (130/330)
ICTE UNUSED (134)
ICTE OPE,(VFL,BKW,RFE,XF) OPEN READ (140)/REEL (340)
ICTE OPE,(VFL,BKW,RFE) OPEN WRITE (144)
ICTE CLO,(VFL,BKW,EOR,XF) CLOSE(R) REWIND(150/350)
ICTE UNUSED (154)
ICTE OPE,(VFL,BKW,RFE) OPEN ALTER (160)
ICTE UNUSED (164)
ICTE CLO,(BKW,EOR,XF) CLOSE(R) UNLOAD(170/370)
ICTE CLO,(BKW,EOR,XF) CLOSE(R) RETURN (174/374)
* THE FOLLOWING TABLE SECTION CONTAINS THE INTERNAL
* CODES CORRESPONDING TO THE 010XXXX00 BINARY EXTERNAL
* CIO FUNCTION CODES.
ICTE RDF,(EOI,VFL,VIO,CRW,RFE) READCW (200)
ICTE WTF,(EOI,VFL,VIO,CRW,RFE) WRITECW (204)
ICTE RDF,(EOR,VFL,VIO,LST,RFE,MSO) READLS (210)
ICTE WTF,(EOI,VFL,VIO,RWO,RFE,MSO) REWRITE (214)
ICTE UNUSED (220)
ICTE WTF,(EOR,VFL,VIO,RWO,RFE,MSO) REWRITER(224)
ICTE RDF,(PRU,VFL,VIO,LST,RFE,MSO) RPHRLS (230)
ICTE WTF,(EOF,VFL,VIO,RWO,RFE,MSO) REWRITEF (234)
ICTE SKP,(EOR,SKO,EXF) SKIPF/SKIPFF/SKIPEI (240)
ICTE OVW,(EOI,MSO) OVERWRITE (244)
ICTE RDF,(EOF,VFL,VIO,RFE) READNS (250)
ICTE OVW,(EOI,MSO,NDT) OVERWRITE RETURN (254)
ICTE RDF,(EOF,VFL,VIO,NRW,MTO) READN (260)
ICTE WTF,(EOI,VFL,VIO,NRW,MTO) WRITEN (264)
ICTE UNUSED (270)
ICTE UNUSED (274)
QUAL *
TITLE CPUCIO SPECIAL PROCESSORS.
SPACE 4,10
** CPUCIO SPECIAL PROCESSORS.
*
* STANDARD REGISTER DEFINITIONS.
*
* (B1) = 1.
* (B2) = USER EXCHANGE PACKAGE AREA.
* (B7) = CPA.
* (A0) = CPU NUMBER.
* (A5) = PP *OR* ADDRESS OR CP RA+1 ADDRESS.
*
*T IR 18/ *CIO*, 1/A, 5/ CP, 18/ SKIP COUNT, 18/ FET ADDRESS
*
*T MB 1/S,5/ RF,6/ RC,5/0,1/F,6/ EC,12/ ORD,4/ LV,8/ XC,12/IC
* S SET IF *CIO* RESTARTED FROM RECALL STACK
* RF RESTART FLAGS = 1/TIF, 1/0, 1/SDT, 1/BDF, 1/DTF.
* TIF = TRACK INTERLOCK FLAG.
* SDT = SKIP DATA TRANSFER FLAG.
* BDF = BUFFERED DEVICE FUNCTION FLAG.
* DTF = DATA TRANSFERRED FLAG.
* RC RECALL STACK REASON CODE.
* F CREATE FNT ENTRY FLAG. IF SET, *1MS* CREATES
* AN FNT ENTRY AND RESTARTS CPUCIO.
* EC ERROR CODE IF NONZERO.
* ORD RELATIVE ADDRESS OF FNT ENTRY IN NFL.
* LV LEVEL NUMBER (0 - 17B).
* XC EXTERNAL *CIO* FUNCTION CODE.
* IC INTERNAL *CIO* FUNCTION CODE (SEE *COMSCIO*).
*
*T MB1 12/ 0, 24/ *IN*, 24/ *OUT*
*
*T MB2 1/R, 5/0, 6/ FETL, 24/ *FIRST*, 24/ *LIMIT*
* R SET IF RANDOM FILE.
* FETL FET LENGTH - 5.
*
* INITIAL ENTRY CONDITIONS.
*
* (X0) = ABSOLUTE FST ADDRESS, IF NONZERO.
* (X3) = *EQDE* WORD OF EST ENTRY.
* (X4) = (MB) LEFT SHIFTED BY -6.
* (X5) = ABSOLUTE FET+1 ADDRESS.
* (X6) = -17B.
* (X7) = 0.
* (A4) = MB.
* (B3) = *COMSCIO* INTERNAL FUNCTION CODE (4 BITS).
CMF SPACE 4,10
** CMF - COMPLETE FET.
*
* EXIT TO *CPCX*.
CMF SX4 B1 SET FET COMPLETE
IX5 X5-X4 ADDRESS OF FET+0
SA1 IR CLEAR AUTO RECALL BIT
ERX2 X5 READ FET+0
BX6 X2+X4
LX4 41
BX7 -X4*X1
EWX6 X5
SA7 A1
EQ CPCX RETURN
OPE SPACE 4,20
** OPE - PROCESS NON-RANDOM OPEN.
*
* ENTRY (X1) = (MB2).
*
* EXIT TO *RPC* IF RANDOM REQUEST ON MASS STORAGE.
* TO *RWF* IF NON-RANDOM AND REWIND REQUEST.
* TO *CMF* IF NON-RANDOM AND NOT REWIND.
OPE BX6 X3*X1
NG X6,RPC IF RANDOM FILE AND MASS STORAGE
MX7 18
SX6 3
IX2 X5+X6
ERX1 X2 READ FET+4
LX7 -24 CLEAR PRU SIZE FIELD
SX6 B1
BX1 -X7*X1
LX6 24 SET PRU SIZE = 100
BX7 X1+X6
ERX1 X0 READ FST
LX4 -5 EXTRACT REWIND BIT
SX6 B1
EWX7 X2 STORE FET+4
BX4 -X4*X6 COMPLEMENT OF REWIND BIT
LX6 7 CLEAR FILE WRITTEN SINCE LAST OPEN BIT
BX1 -X6*X1
LX6 1
BX1 X1+X6 SET FILE OPENED BIT
BX6 X1+X4 COMPLETE FST IF NOT REWIND
EWX6 X0 WRITE FST
ZR X4,RWF IF REWIND
EQ CMF COMPLETE FET
POD SPACE 4,10
** POD - PROCESS OPTICAL DISK REQUESTS
*
* EXIT TO *RPC* TO INITIATE OPTICAL DISK DRIVER *1OD*
*
POD SX7 3 INDEX INTO TABLE(TAPQ) OF PP REQUESTS
LX7 42-0
EQ RPC ISSUE CALL FOR *1OD*
PMT SPACE 4,10
** PMT - PROCESS MAGNETIC TAPE REQUEST.
*
* EXIT TO *CPCX* IF REQUEST TRANSFERRED TO *MAGNET*
* SUCCESSFULLY.
* TO *RCR* IF *CIO* REQUEST TO BE PUT IN RECALL.
*
* ERROR EXIT TO *RPC* IF ERROR DETECTED.
*
* CALLS /MONITOR/RCC1, /MONITOR/RSC, SRC.
* CHECK *MAGNET* AVAILABLE.
PMT SB4 B3-/CIO/RET
PL B4,PMT0 IF RETURN/UNLOAD/EVICT FUNCTION
SX1 B1
IX1 X0-X1 ABSOLUTE FNT ADDRESS
ERX1 X1 CHECK IF TAPE ASSIGNED FOR CE DIAGNOSTICS
LX1 59-17
SX7 /CIOERR/ASD *ASSIGNED FOR DIAGNOSTICS*
NG X1,RPC IF *CIO* FUNCTION NOT ALLOWED ON TAPE
PMT0 BX4 X0 SAVE ABSOLUTE FST ADDRESS
MX0 -12
SX1 MTSI *MAGNET* SUBSYSTEM IDENTIFICATION
SX7 /CIOERR/TNA *TAPES NOT AVAILABLE*
SB3 PMT1 SET RETURN ADDRESS FOR *RSC*
EQ /MONITOR/RSC GET *MAGNET* RA AND FL
PMT0.1 PL B4,PMT1.1 IF RETURN/UNLOAD/EVICT FUNCTION
EQ RPC PROCESS ERROR
VFD 12/PMT0.1-PMT1,18/0,12/PMT0.1-PMT1,18/PMV
PMT1 ERX1 X4 GET FST ENTRY
NO
LX1 24
BX2 -X0*X1 UDT ADDRESS
ZR X2,PMT0.1 IF NO UDT ADDRESS
SX7 X2+/MTX/UCIC+1
IX7 X7-X6
SX2 X2+/MTX/UFRQ
IX0 X3+X2 ABSOLUTE *UFRQ* ADDRESS
+ PL X7,* IF OUTSIDE *MAGNET*-S FL
SB6 A2-STSW SAVE *MAGNET* CPA
ERX2 X0 CHECK IF I/O REQUEST IN PROGRESS
LX1 -24
SX7 /CIOERR/FSQ *I/O SEQUENCE ERROR*
NG X2,PMT0.1 IF TAPE LOST BY MAGNET
NZ X2,RPC IF UDT ALREADY BUSY
PMT1.1 SX7 B0+ INDICATE NO ERROR
PL B4,RPC IF RETURN/UNLOAD/EVICT FUNCTION
* BUILD *MAGNET* PARAMETER WORDS *UFRQ* - *UCIC*.
SA1 MB2 GET FET LENGTH, FIRST, LIMIT
SA3 B7+FLSW GET FL
MX4 12
BX7 -X4*X1
LX3 -12
BX1 X4*X1 FET LENGTH - 5
SX6 /MTX/UCIC-/MTX/UFRQ
BX3 X4*X3
LX1 1
IX6 X0+X6 *UCIC* ABSOLUTE ADDRESS
BX7 X7+X3
SA2 IR GET *CIO* CALL
EWX7 X6 WRITE *UCIC*
AX1 7
MX6 -18
SX7 X2 FET ADDRESS
LX2 -18
BX7 X7+X1
BX6 -X6*X2 SKIP COUNT
AX1 42
LX6 24
SB3 X1-10+5
BX7 X7+X6
AX1 1
SA3 MB GET INTERNAL AND EXTERNAL FUNCTION CODES
SB5 X1
MX1 -12
LX3 -24
BX1 -X1*X3 FNT ADDRESS
LX3 12
SB4 X1 SAVE FNT ADDRESS
MX1 -8
BX6 X4*X3 INTERNAL CODE
LX2 59-41+18
BX7 X7+X6
BX1 -X1*X3 EXTERNAL CODE
LX3 -8
MX6 -4
LX1 -11
BX6 -X6*X3 LEVEL NUMBER
LX6 32
MX3 1
BX1 X6+X1
BX2 X3*X2 AUTO RECALL FLAG
BX1 X1+X2
SA2 A3+B1 GET IN AND OUT
SX6 X2 OUT
AX2 24 IN
LX4 -12
IX2 X2-X6
LX3 58-59
ZR X2,PMT2 IF BUFFER EMPTY
BX1 X1+X3
PMT2 ERX2 X5 GET FET+1
LX3 47-59-58+59
BX6 -X3*X2 CLEAR RANDOM FLAG
MX2 -30
PL B3,PMT3 IF FET LENGTH .GE. 10D
LX3 41-59-47+59
BX6 -X3*X6 CLEAR EXTENDED LABEL OPTION
PMT3 BX4 X4*X6 FET OPTIONS
EWX6 X5
R= X3,/MTX/UCIA-/MTX/UFRQ
BX6 X1+X4
ZR B5,PMT4 IF FET LENGTH .LE. 6
SX1 5
IX1 X5+X1 FET+6
ERX1 X1
BX1 -X2*X1 UNUSED BIT COUNT AND MLRS FIELD
BX6 X6+X1
PMT4 SA1 B7+STSW
SA2 B6+CWQW
IX4 X0+X3 *UCIA* ABSOLUTE ADDRESS
IX5 X4+X3 *UCIB* ABSOLUTE ADDRESS
ERRNZ /MTX/UCIB-/MTX/UCIA-1
EWX7 X4 WRITE *UCIA*
EWX6 X5 WRITE *UCIB*
SX6 /MTX/CIO
SX7 B4+ FNT ADDRESS
LX6 48
BX6 X6+X7
SX7 20B
EWX6 X0 WRITE *UFRQ*
IX7 X1+X7 INCREMENT TAPE ACTIVITY
SB3 PMT5 SET RETURN ADDRESS FOR *RCC*
LX2 59-46
SA7 A1
PL X2,/MONITOR/RCC IF TO RECALL *MAGNET* CPU
PMT5 SB5 CPCX SET EXIT ADDRESS
JP SRC SET *RCLP* IF AUTO-RECALL SPECIFIED
RWF SPACE 4,10
** RWF - REWIND FILE.
*
* EXIT TO *CMF*.
RWF SX4 5
* ENTERED HERE FOR *REWIND* ON *TE* FILE.
* (X4) = DESIRED FST STATUS = 1.
RWF0 ZR X0,RWF2 IF NO FST ENTRY
MX6 12
ERX1 X0 GET FST ENTRY
LX6 -24
PL X3,RWF1 IF NOT MASS STORAGE
BX2 X6*X1 CURRENT TRACK
R= X3,FSMS SET CURRENT SECTOR = FIRST SECTOR
ZR X2,RWF1 IF FILE NOT USED
BX2 -X6*X1 SET CURRENT TRACK = FIRST TRACK
LX1 -12
BX1 X6*X1 FIRST TRACK
BX1 X2+X1
LX6 -12
BX1 -X6*X1 SET CURRENT SECTOR = FIRST SECTOR
LX3 12
BX1 X1+X3
RWF1 MX7 54
BX6 X7*X1 SET EOR STATUS IN FST
BX6 X6+X4
EWX6 X0 SET FILE NOT BUSY
RWF2 SA2 MB2 GET RANDOM FILE FLAG
PL X2,CMF IF NOT RANDOM FILE, COMPLETE FET
SX1 B1
LX1 30
IX3 X5+X4 FET+6
ERX2 X3 GET FET+6
MX7 -30
BX7 -X7*X2
BX7 X7+X1
EWX7 X3
EQ CMF COMPLETE FET
TIO SPACE 4,10
** TIO - TERMINAL I/O.
*
* EXIT TO *RPC* TO INITIATE TERMINAL I/O DRIVER *1MI*.
* TO *RWF* IF WRITE WITH NO DATA.
* TO *ROC1* TO ROLLOUT DETACHED INTERACTIVE USER JOB
* REQUESTING I/O. *RPPM* REQUEST COMPLETED IF PP
* REQUESTED INTERACTIVE I/O.
*
* ERROR EXIT TO *RPC* TO INITIATE *1MS*.
TIO SA2 B7+TFSW CHECK JOB CONNECTION STATUS
MX1 12
BX1 X1*X2
LX1 12
CX2 X1,EJT CONVERT EJT ORDINAL TO OFFSET
TA2 X2+JSNE,EJT GET JOB EJT ENTRY
LX2 -7
BX3 -X6*X2
SX7 /CIOERR/IRQ *ILLEGAL I/O REQUEST ON FILE*
ERRNZ NICS CODE ASSUMES *NICS* = 0
SX4 X3-DTCS
SA1 B7+TIOW CHECK I/O IN PROGRESS
SA2 B7+TINW
BX6 X2
AX6 18
BX6 X1+X6
SX6 X6
ZR B3,TIO2 IF TERMINAL READ REQUEST
* PROCESS TERMINAL WRITE REQUEST.
ZR X3,TIO1.1 IF JOB NOT INTERACTIVE
SA2 A4+B1 READ MB1
SX7 X2 *OUT*
AX2 24 *IN*
BX2 X2-X7
ZR X2,RWF IF WRITE WITH NO DATA
ZR X4,TIO3 IF DETACHED JOB
NZ X6,TIO6 IF TIOW/TINW BUSY
SA2 IR
SX4 X2 FET ADDRESS
BX6 X1+X4 SET OUTPUT FET POINTER
SA6 A1+ REWRITE TIOW
* EXIT TO *RPC* TO INITIATE TERMINAL I/O DRIVER *1MI*.
TIO1 ERX3 X0 SET FST NOT BUSY
SX7 B1
BX6 X3+X7
EWX6 X0
LX7 42 SET *1MI* FAST LOAD TABLE INDEX
EQ RPC REQUEST TERMINAL I/O DRIVER
* PROCESS TERMINAL OUTPUT BY NON-INTERACTIVE JOB.
TIO1.1 ERX3 X0 SET FST NOT BUSY
SX7 B1
BX6 X3+X7
EWX6 X0
IX6 X5+X7 SET OUT = IN
ERX3 X6 READ IN
IX7 X6+X7
BX6 X3
EWX6 X7 WRITE OUT
EQ CMF COMPLETE FET
* PROCESS TERMINAL READ REQUEST.
TIO2 ZR X3,RPC IF JOB NOT INTERACTIVE
ZR X4,TIO3 IF DETACHED JOB
NZ X6,TIO6 IF TIOW/TINW BUSY
SA1 IR SET INPUT FET ADDRESS
SX6 X1
LX6 18
BX6 X2+X6
SA6 A2 REWRITE TINW
EQ TIO1 INITIATE TERMINAL I/O
* PROCESS DETACHED JOB TERMINATION.
TIO3 SA1 B7+EOJW JOB TERMINATION OPTIONS
MX6 -3
LX1 0-57
BX1 -X6*X1
SB4 X1
SX7 /CIOERR/IRQ *ILLEGAL I/O REQUEST ON FILE*
NE B4,B1,RPC IF DETTACHED JOB TO BE TERMINATED
ERRNZ SUJT-1 CODE DEPENDS ON VALUE
ERX3 X0 SET FST NOT BUSY
SX7 B1
BX7 X3+X7
EWX7 X0
SB3 TIO4 RETURN ADDRESS FOR *AQR*
SA1 IR GET *CIO* CALL TO BE QUEUED
SX7 DTSR JOB SUSPENSION REASON CODE
BX6 X1
LX7 -12
SA7 /MONITOR/AQRA SET PARAMETER WORD FOR *AQR*
EQ /MONITOR/REC2 QUEUE *CIO* REQUEST
* ASSURE DROP OPTION ON *RPPM* FUNCTION REQUEST.
TIO4 TX1 10B,SP
MX0 -18
SX2 A5
BX2 -X0*X2
IX1 X2-X1
SX5 B1+
ERRNZ ROSU-10B CHECK *ROCM* SUSPENSION POSITION
LX5 39-0+12
SB6 -1 INDICATE *CPUCIO* CALL TO *ROCM*, *DCPM*
BX2 X2-X2 REQUIRED BY *ROCM*
PL X1,/MONITOR/ROC4 IF NOT *RPPM* REQUEST
SX7 B1
SA1 A5 SELECT DROP OPTION ON *RPPM* REQUEST
LX7 36 *RPPM* COMPLETION STATUS
LX1 59-37
PL X1,TIO5 IF NO DROP OPTION SELECTED
SX7 4000B+DPPM FORCE *DPPM* FUNCTION REQUEST
LX7 48
TIO5 SA7 A5 REWRITE OUTPUT REGISTER
EQ /MONITOR/ROC4 ROLLOUT JOB
TIO6 SA1 IR SET TIOW/TINW BUSY IN REQUEST
SX7 B1
LX7 35-0
BX7 X1+X7
SA7 A1 REWRITE INPUT REGISTER
EQ TIO1 START UP *1MI*
ENDBLK
BLOCK MCE,(MEMORY CLEARING ROUTINES.)
MCE SPACE 4,10
** THIS BLOCK IS LOADED IF THE MEMORY CLEARING OPTION
* IS ENABLED IN THE IPRDECK. THE BASIC PURPOSE IS TO
* CLEAR STORAGE UPON RELEASE IN ADDITION TO UPON ASSIGMENT.
CST SPACE 4,20
** CST - EXCEPTION PROCESSOR FOR SPECIAL MEMORY CLEAR REQUEST.
*
* THIS ROUTINE IS CALLED TO BUILD THE *CSTM* REQUEST FROM THE
* *RSTM* REQUEST THAT IS STORED IN MB+5.
*
* ENTRY (MB+5) = 12/ RSTM, 12/ NEW FL, 3/,1/NFL REQUEST
* 7/,1/ ECS REQUEST, 24/
*
* EXIT TO /MONITOR/CST0 WITH REBUILT REQUEST -
* (X5) = 12/ CSTM, 4/1, 1/ECS REQUEST, 1/1,
* 18/ WORD COUNT, 24/ FWA
*
* USES X - ALL.
* A - 1, 2, 3.
* B - 3.
*
* CALLS /CME/CSM, /0CME/CSM.
CST SA2 A5+6 GET *MB+5*
SA3 B7+ECSW GET ECS FL CONTROL
MX0 -12
MX5 1
LX2 59-24
BX1 X5*X2 EXTRACT ECS REQUEST FLAG
NG X2,CST1 IF CLEARING ECS FL
SA3 B7+FLSW GET CM FL CONTROL
LX2 59-32-59+24
NG X2,CST4 IF CLEARING NFL
LX2 59-24-59+32
CST1 LX2 24-59+24
BX6 -X0*X2 NEW FL
BX4 -X0*X3 OLD FL
IX4 X4-X6 WORD COUNT
CST2 LX4 24
LX1 43-59
LX5 42-59
BX6 X4+X6 START BUILDING REQUEST
BX5 X1+X5
NZ X1,CST3 IF ECS FL
LX6 6 MULTIPLY REQUEST BY 100B
CST3 BX1 X5+X6 SET RELATIVE/ECS REQUEST FLAG(S)
SX6 CSTM*100B+4B SET UP FOR RE-ENTRY
LX6 -18
BX5 X6+X1
BX1 X5
EQ /MONITOR/CST0 RESTART *CSTM* PROCESSOR
CST4 LX2 32-59+24
LX3 12
BX4 -X0*X2 NEW NFL
BX6 -X0*X3 OLD NFL
IX4 X6-X4 WORD COUNT
BX6 -X6 COMPLEMENT FWA
LX6 6
MX3 -24
BX6 -X3*X6
LX6 -6
EQ CST2 COMPLETE BUILDING OF REQUEST
CST5 LX4 59-44-59+42
NO
TPL X4,(/CME/CSM,CME,/0CME/CSM) IF NOT SPECIAL REQUEST
SB3 /MCE/CST6 *CSM* RETURN ADDRESS
TEQ (/CME/CSM,CME,/0CME/CSM) CLEAR STORAGE
CST6 SA1 A5+6 GET *RSTM* REQUEST
SX7 B1
LX7 29
BX7 X7+X1 SET COMPLETION BIT
EQ /MONITOR/PPR1 EXIT
CST SPACE 4,15
** CSTX - EXIT PROCESSOR FOR PROGRAM MODE *CSTM*.
*
* THIS PROCESSOR IS CALLED TO CHECK SPECIFICATION OF THE
* SPECIAL REQUEST OPTION TO DETERMINE IF THE *RSTM* REQUEST
* THAT MIGHT BE IN *MB+5* MUST BE RESTORED.
*
* ENTRY (X7) = 0.
*
* EXIT TO /PROGRAM/PRG1
*
* USES X - 3, 7.
* A - 3.
CSTX SA3 A5 CHECK REQUEST OPTION(S)
LX3 59-44
PL X3,/PROGRAM/PRG1 IF NOT SPECIAL REQUEST
SA3 A5+6 GET MB+5
SX7 B1
LX7 29
BX7 X7+X3 SET REQUEST COMPLETED
EQ /PROGRAM/PRG1 EXIT
CUE SPACE 4,15
** CUE - CLEAR USER ECS.
*
* THIS ROUTINE IS CALLED TO CLEAR USER ECS IN ORDER
* TO MAINTAIN SECURED MEMORY (MEMORY CLEARING ENABLED).
*
* ENTRY (X1) = WORD COUNT.
* (X2) = ABSOLUTE FWA.
* (B3) = RETURN ADDRESS.
*
* USES X - 0, 1, 4, 6.
* A - 0, 4.
* B - 4.
CUE TSX0 (LCCB-1,CP176,1-1)
SAC 18,CCMB ADD CLEAR CENTRAL MEMORY BUFFER
NZ X0,CUE1 IF NOT CYBER 990 TYPE MAINFRAME
SA4 ECRL GET RAE FOR ZERO UEM BLOCK
LX4 0-12
MX0 -24
BX0 -X0*X4
TLX0 9-21+60,UESC
CUE1 SA0 /PROGRAM/UBUF SET FWA OF CM BUFFER
TLX0 (0,CP176,21)
SB4 /PROGRAM/MECB SET WORD COUNT
TLX0 (3,ESM170,0)
SX6 A0
TLX0 (4,UEM180,0)
LX6 30
BX0 X0+X6
+ RE B4 CLEAR CM BUFFER
* NOTE - HALF EXIT WILL BE TAKEN ON EXTENDED MEMORY READ
* BECAUSE OF OUT-OF-RANGE ADDRESS SPECIFIED TO CAUSE
* ZEROES TRANSFER TO CM.
SB0 0 (HALF-EXIT EXPECTED)
BX0 X6+X2 ECS ADDRESS
SX4 B4+ ADDRESS INCREMENT/DECREMENT
CUE2 WUE PROGRAM CLEAR USER EM
* SB0 0 (IGNORE HALF-EXIT)
+ IX1 X1-X4 DECREMENT WORD COUNT
IX0 X0+X4 INCREMENT ECS ADDRESS
NZ X1,CUE2 IF NOT COMPLETE
JP B3 RETURN
MEC SPACE 4,15
** MEC - EXTENSION FOR USER ECS STORAGE MOVE.
*
* THIS PROCESSOR DETERMINES IF VACATED EXTENDED MEMORY FIELD
* LENGTH MUST BE CLEARED FOLLOWING A STORAGE MOVE.
*
* ENTRY (B7) = CP/PCP ADDRESS.
*
* EXIT TO /PROGRAM/MEC2.1
*
* USES X - 0, 1, 2, 3, 4.
* A - 1, 2, 3.
* B - 3.
*
* CALLS CUE.
MEC TSA3 (UEML,UEM,ZERL)
SA1 SMRL
SA2 B7+ECSW
SB3 /PROGRAM/MEC2.1 *CUE* RETURN ADDRESS
TX0 B7+CPAS,-SCA
MX4 -12
LX3 12
BX3 -X4*X3 UEM BASE ADDRESS IF UEM PRESENT
LX4 24
BX4 -X4*X1 DIRECT MOVE HOLE POINTER
NZ X0,MEC1 IF NOT LAST CONTROL POINT
PL X1,MEC2 IF UPWARD MOVE
MEC1 ZR X4,/PROGRAM/MEC2.1 IF NOT DIRECT MOVE
BX1 X2
LX1 48 WORD COUNT = FLE
MEC2 AX2 RSHF
MX0 -RMSK
AX1 48
BX2 -X0*X2
LX3 9
TLX2 9,UESC
TLX1 9,UESC WORD COUNT
IX2 X2+X3 OLD RA = FWA
EQ CUE CLEAR USER ECS
MST SPACE 4,15
** MST - EXTENSION FOR MEMORY CLEARING AFTER STORAGE MOVE.
*
* THIS PROCESSOR DETERMINES IF VACATED FIELD LENGTH MUST BE
* CLEARED FOLLOWING A STORAGE MOVE.
*
* ENTRY (B7) = CP/PCP ADDRESS.
*
* EXIT TO /PROGRAM/MST3.
*
* USES X - 0, 1, 2, 3, 4, 6, 7.
* A - 1, 2.
* B - 3.
*
* CALLS /CME/CSM, /0CME/CSM.
MST SA2 B7+FLSW
SA1 SMRL
SB3 MST2 *CSM* RETURN ADDRESS
SX6 B7-CPAS
TX7 B7+CPAS,-SCA
MX4 -12
BX3 -X4*X2 FL
LX4 24
ZR X6,MST1 IF CP 1 MOVING
BX4 -X4*X1 DIRECT MOVE HOLE POINTER
NZ X7,MST0.1 IF NOT LAST CP MOVING
PL X1,MST0.2 IF UPWARD MOVE
MST0.1 ZR X4,MST2 IF NOT DIRECT MOVE
LX3 48
IX1 X2+X3 WORD COUNT = (FL + NFL)
MST0.2 AX1 48
AX2 RSHF
MX0 -RMSK
LX1 6
BX3 -X0*X2 RA/100B
AX2 48-RSHF NFL/100B
IX2 X3-X2
LX2 6 FWA TO CLEAR (RA - NFL)
TEQ (/CME/CSM,CME,/0CME/CSM) CLEAR STORAGE
MST1 PL X1,MST2 IF NOT DOWNWARD MOVE
AX1 48
AX2 RSHF
LX1 6
MX0 -RMSK
BX1 -X1 WORD COUNT
BX2 -X0*X2 RA/100B
IX2 X2+X3 (LWA+1)/100B
LX2 6
IX2 X2-X1 (LWA+1) - WORD COUNT
TEQ (/CME/CSM,CME,/0CME/CSM) CLEAR STORAGE
MST2 TA1 CMMS,SDA PRESET MOVE COUNT FOR REENTRY
EQ /PROGRAM/MST3 COMPLETE STORAGE MOVE
PRS SPACE 4,20
** PRS - PRESET EXTENSION TO CLEAR MEMORY AT DEADSTART.
*
* THIS ROUTINE IS CALLED TO CLEAR ALL UNASSIGNED FIELD LENGTH
* DURING DEADSTART IF MEMORY CLEARING IS ENABLED.
*
* ENTRY (PRSA) = RECOVERY LEVEL.
* (A0) = LWA+1 OF *CPUMTR*.
*
* EXIT (0) = LWA+1 OF *CPUMTR* (TO BE PICKED UP BY *STL*).
* TO *CPSL* (IN LOW CORE).
*
* USES X - 0, 1, 2, 3, 4, 6.
* A - 0, 1, 2, 3, 4, 6.
* B - 3, 7.
*
* CALLS /CME/CSM, /0CME/CSM, /MCE/CUE.
PRS SA2 PRSA GET RECOVERY LEVEL
SX6 A0+77B LWA+1 OF *CPUMTR* (FWA TO CLEAR)
SA1 1*200B+FLSW
AX6 6
SX2 X2-3
NZ X2,PRS1 IF NOT LEVEL 3 RECOVERY
MX0 -12
BX6 -X0*X1 FL/100B
AX1 RSHF
MX0 -RMSK
BX1 -X0*X1
IX6 X1+X6 RA + FL
PRS1 SA6 PRSB START ADDRESS
SB3 PRS3 *CSM* RETURN ADDRESS
PRS2 SA1 A1+200B NEXT CONTROL POINT
SA2 PRSB CURRENT ADDRESS
MX0 -RMSK
AX1 RSHF
BX4 -X0*X1 RA/100B
AX1 48-RSHF NFL/100B
IX4 X4-X1 FWA OF USER FL (RA - NFL)
IX1 X4-X2 WORD COUNT
LX2 6
LX1 6
ZR X1,PRS3 IF NO MEMORY TO CLEAR
TPL X1,(/CME/CSM,CME,/0CME/CSM) IF NO OVERLAP
EQ PRS4 BYPASS UPDATE OF CURRENT ADDRESS
PRS3 SA1 A1 FIELD LENGTH CONTROL
MX0 -12
BX3 -X0*X1 FL/100B
AX1 RSHF
MX0 -RMSK
BX1 -X0*X1 RA/100B
IX6 X1+X3
SA6 A2 UPDATE CURRENT ADDRESS
PRS4 SX1 A1+
TX1 X1-FLSW,-SCA
NZ X1,PRS2 IF NOT LAST USER CONTROL POINT
TEQ (/MCE/PRS5,UEC,/MCE/PRS9) PROCESS USER ECS
PRS5 SA2 PRSA
SA1 1*200B+ECSW
SB7 A0 SAVE (A0)
MX0 -12
SX3 X2-3
NZ X3,PRS9 IF NOT LEVEL 3 RECOVERY
BX2 -X0*X1 FL/*UEBS*
AX1 RSHF
MX0 -RMSK
BX1 -X0*X1 RA/*UEBS*
IX6 X2+X1
SA6 PRSB START ADDRESS
SB3 PRS7 *CUE* RETURN ADDRESS
PRS6 SA1 A1+200B NEXT CONTROL POINT
SA2 PRSB CURRENT ADDRESS
MX0 -RMSK
AX1 RSHF
BX4 -X0*X1 RA/*UEBS*
IX1 X4-X2 WORD COUNT
TSA3 (UEML,UEM,ZERL)
MX0 -12
AX3 48
BX3 -X0*X3 UEM BASE ADDRESS IF UEM PRESENT
LX3 9
TLX2 9,UESC
IX2 X2+X3
TLX1 9,UESC
ZR X1,PRS7 IF NO MEMORY TO CLEAR
PL X1,CUE IF NO OVERLAP
EQ PRS8 BYPASS UPDATE OF CURRENT ADDRESS
PRS7 SA1 A1 FIELD LENGTH CONTROL
MX0 -12
BX3 -X0*X1 FL/1000B
AX1 RSHF
MX0 -RMSK
BX1 -X0*X1 RA/1000B
IX6 X1+X3
SA6 A2 UPDATE CURRENT ADDRESS
PRS8 SX1 A1+
TX1 X1-ECSW,-SCA
NZ X1,PRS6 IF NOT LAST CONTROL POINT
SA0 B7+ RESTORE (A0)
PRS9 SX6 A0 SET LWA+1 OF *CPUMTR*
SA6 B0
EQ CPSL BRANCH TO STOP
PRSA BSS 1 RECOVERY LEVEL
PRSB BSS 1 CURRENT ADDRESS
ENDBLK
BLOCK NVE,(NVE ROUTINES.)
SPACE 4,10
MT EQU /MONITOR/MT
XJ1 SPACE 4,15
** XJ1 - EXCHANGE PROCESSOR.
*
* ENTRY (B2) = EXCHANGE PACKAGE ADDRESS.
*
* EXIT (X0) .LT. 0 IF EXCHANGE NEEDED.
* TO */CME/XJ3* TO EXCHANGE TO PROGRAM.
*
* USES X - 1, 2, 6, 7.
* A - 1, 2, 6, 7.
* B - 3.
XJ1 BSS 0 ENTRY
SB3 A0+
NZ B3,/CME/XJ3 IF SECOND CPU
TB3 A0,DSCB
SA1 B3+/DST/D7JP JOB PRIORITY
SA2 B3+/DST/D8JP TASK PRIORITY
MX7 -16
BX6 X6-X6
ZR X2,/CME/XJ3 IF NO TASK PRESENT
BX1 -X7*X1
SA6 /MONITOR/IP CLEAR PRIORITY INCREASE
RC X6 READ MICROSECOND COUNTER
AX6 14
BX2 -X7*X2
MX7 -4
BX6 -X7*X6 EXTRACT SUB-PRIORITY
BX1 X1+X6
IX7 X1-X2 COMPARE PRIORITIES
PL X7,/CME/XJ3 IF NO EXCHANGE NEEDED
AX2 8
ZR X2,/CME/XJ3 IF NO EXCHANGE NEEDED
SA1 PPXL
ZR X1,XJ11 IF NO PP EXCHANGE REQUESTED/PENDING
SA1 XJ1A RESIDUAL COUNTDOWN
NZ X1,XJ12 IF NOS/VE BYPASS LIMIT NOT REACHED
SA2 VEBL NOS/VE BYPASS LIMIT
MX6 -12
BX6 -X6*X2
SA6 A1 INITIALIZE COUNTDOWN
XJ11 MX0 1
JP /CME/XJ3 EXCHANGE
XJ12 SX6 X1-1 DECREMENT COUNTDOWN
SA6 A1
JP /CME/XJ3 NO EXCHANGE TO NOS/VE FOR NOW
XJ1A CON 0 NOS/VE BYPASS COUNTDOWN
SVS SPACE 4,15
** SVS - SET SCHEDULING DATA.
*
* ENTERED AT *SVS1* FROM */MONITOR/SPR*.
*
* EXIT WORD *D7JP* IN *DSCB* SET UP.
* 24/ JSN,12/ EJT ORDINAL,8/ TRAP VALIDATION,16/PRIORITY
* (*MLST*) MOVED TO *NVE* BUFFER IF DATA TO BE MOVED.
*
* USES X - 0, 2, 4, 5, 6, 7.
* A - 2, 4, 6, 7.
* B - 3, 4, 5, 6.
SYSCOM
SVS BSS 0 ENTRY
SA4 B2+CWQW GET CPU PRIORITY
SB6 /MONITOR/BNJ20 SET *BNJ* RETURN ADDRESS
UX4,B5 X4 UNPACK CPU PRIORITY AND FLAGS
SX5 B5+ SET CPU PRIORITY
MX0 -12
* ENTRY FROM */MONITOR/SPR*.
* (B6) = RETURN ADDRESS.
* (X5 BITS 3 - 9) = CPU PRIORITY.
* (X0) = 77...770000B.
SVS1 BSS 0 ENTRY
SB3 A0+
NZ B3,/MONITOR/RB6 IF SECOND CPU
TB3 A0,DSCB
SA2 /MONITOR/IP SUB-PRIORITY
SA4 B7+JCIW GET SUBSYSTEM ID
SX6 X2+
AX4 24-0
SA2 SSTL
BX7 -X0*X4
SX7 X7-NVSI NVE SUBSYSTEM ID
MX0 3
LX2 59-44
ZR X7,SVS2 IF NVE SUBSYSTEM
NG X2,SVS4 IF HARDWARE FAULT INJECTION IS DISABLED
SVS2 LX0 16-57 SET *V1*, *V2*, AND *V3* BITS
BX6 X0+X6
NZ X7,SVS4 IF NOT NVE SUBSYSTEM
TA2 NVESS *SSCT* WORD CONTAINING *NVE* BYTE
TLX2 0,NVEOS
PL X2,SVS4 IF *NVE* NOT YET ACTIVATED
SA2 B3+/DST/D7ST GET POINTER TO *MLST*
MX0 -18
LX2 -18
BX7 -X0*X2 *MLST* ADDRESS
ZR X7,SVS4 IF NO *MLST*
SA4 X7 PICK UP THE FLAG/COUNT WORD
ZR X4,SVS4 IF NO ACTIVE ENTRIES IN *MLST*
SX0 MLBR *NVE* BUFFER POINTER
SA2 B2+B1 GET RA FROM EXCHANGE PACKAGE
AX2 36-0
IX0 X0+X2
ERX2 X0 PICK UP MESSAGE LINK BUFFER POINTER
MX0 -18
BX0 -X0*X2
ZR X0,SVS4 IF NO BUFFER ADDRESS
SX7 X4+B1 TOTAL WORDS TO TRANSFER
SA2 B2+2 GET FLC FROM EXCHANGE PACKAGE
AX2 36-0
IX2 X2-X7 SUBTRACT OUT TRANSFER WORD COUNT
IX2 X2-X0 SUBTRACT OUT BUFFER ADDRESS
NG X2,SVS4 IF BUFFER EXTENDS BEYOND FL
SA2 B2+B1 GET RA AGAIN
SB4 X7 WORDS TO TRANSFER
AX2 36-0
BX7 X4
IX0 X0+X2 ABSOLUTE BUFFER ADDRESS
EWX7 X0 ACTIVE WORD COUNT TO FIRST WORD OF BUFFER
BX7 X7-X7
SA7 A4 CLEAR ACTIVE WORD COUNT
SVS3 SB4 B4-B1 DECREMENT LOOP COUNTER
SA2 B4+A4 GET WORD FROM *MLST*
BX7 X2
SX2 B4
IX2 X2+X0
EWX7 X2 STORE WORD IN *NVE* BUFFER
GT B4,B1,SVS3 IF MORE ACTIVE WORDS TO MOVE
SVS4 SA2 B7+SSCW CHECK FOR *NVE* CONNECTION
SB5 X5-IDCS*10B-10B
NG B5,SVS8 IF IDLE PACKAGE
AX5 6 FORM NORMALIZED PRIORITY
MX0 -12
SVS5 ZR X2,SVS6 IF NO CONNECTIONS
BX7 -X0*X2 CHECK NEXT BYTE
BX2 X0*X2
LX7 -6
SX7 X7+LSSI-NVSI
LX2 12
NZ X7,SVS5 IF JOB NOT CONNECTED TO *NVE*
SX2 B1 SET *V3* VALIDATION BIT
LX2 18-0
SVS6 SX7 X5-MPRS/10B
LX5 8
BX6 X6+X2 ADD VALIDATION BIT
BX6 X6+X5 ADD PRIORITY
ZR X7,SVS8 IF SYSTEM CP OR STORAGE MOVE PACKAGE
NZ X5,SVS7 IF NOT MAINTENANCE JOB
SX4 1S8 SET PRIORITY OF 1
BX6 X6+X4
SVS7 SA2 B7+TFSW FORM UNIQUE ID FROM JSN AND EJT ORDINAL
AX2 48
MX7 -12
BX7 -X7*X2
BX2 X7
LX7 -36
BX6 X7+X6 ADD EJT ORDINAL
CX4 X2,EJT CONVERT EJT ORDINAL TO OFFSET
TA4 X4+JSNE,EJT READ EJT
MX0 6*4
BX4 X0*X4
BX6 X4+X6 ADD JSN
SVS8 SA6 B3+/DST/D7JP WRITE *D7JP* WORD
JP B6 RETURN
CPT SPACE 4,15
** CPT - EXTENSION FOR *NVE*.
*
* ENTRY (B3) = EXIT ADDRESS.
* (B6) = 200B IF ENTERED AT *CPT1* (*BNJ* CALL).
*
* EXIT TO /MONITOR/CPT1.
* TO /CME/CPT1 IF SECOND CPU.
* (X0) = CPU TIME INCREMENT IN MACHINE UNITS.
* (MT+A0) = 0 IF RA+1 PROCESS AND NOT CPU SWITCH.
* (MT+A0) = -ACAD2 IF NOT RA+1 PROCESS OR IF CPU SWICH.
* (CL+CPBT+A0) RESET TO CURRENT CLOCK.
* (CL+CMST+A0) UPDATED.
*
* USES X - 0, 1, 2, 3, 5, 6, 7.
* A - 1, 3, 6, 7.
* B - 4, 6.
CPT BSS 0 ENTRY
SB6 B0+ DO NOT SET CPU SWITCH FLAG
* ENTRY FROM /MONITOR/*BNJ*.
CPT1 BSS 0 ENTRY
SX1 A0+
NZ X1,/CME/CPT1 IF SECOND CPU
SA1 CL+CMST+A0 GET MONITOR MODE PARAMETERS
SA3 MT+A0 GET MONITOR MODE ACCUMULATED TIME
RT X0,40B READ AND CLEAR PIT
RC X6 READ CLOCK
UX1,B4 X1
SB6 B4+B6 SET CPU SWITCH STATUS
PX7 B6,X6 SET FUNCTION WITH STATUS AND NEW BASE TIME
SA7 A1 UPDATE MONITOR MODE STATUS
SX7 B0 SET TO CLEAR MONITOR MODE ACCUMULATOR
ZR B6,CPT3 IF RA+1 PROCESS AND NOT CPU SWITCH
ERRNZ CCPF CODE DEPENDS ON VALUE
TX7 -ACAD2 - (EXCHANGE JUMP TIME)
ZR B4,CPT3 IF RA+1 PROCESS
* COMPUTE MONITOR MODE TIME SINCE LAST BASE TIME.
PL X3,CPT2 IF *MT* NOT PREVIOUSLY ADJUSTED BY *CPT*
SX3 B0+
CPT2 IX5 X6-X1 MONITOR MODE TIME INCREMENT
IX3 X3+X5 ADD INCREMENT TO ACCUMULATED TIME
IX3 X3-X7 ADD EXCHANGE JUMP TIME
* COMPUTE PROGRAM MODE CPU TIME USED.
*
* IF MONITOR MODE WAS NOT ENTERED TO PROCESS AN RA+1 CALL OR IF
* A CPU SWITCH IS PENDING, THE MONITOR MODE ACCUMULATOR FOR THE
* CPU WILL BE RESET WITH A VALUE OF *-ACAD2*. SINCE EXIT FROM
* MONITOR MODE ADDS AN INCREMENT OF *ACAD* (TWICE THE VALUE OF
* *ACAD2*) TO THE ACCUMULATOR, THE RESULT IN THIS CASE WILL BE
* TO ACCOUNT ONLY FOR THE EXCHANGE JUMP BACK TO PROGRAM MODE.
* *CPT* WILL ALREADY HAVE ACCOUNTED FOR THE EXCHANGE JUMP INTO
* MONITOR MODE.
CPT3 MX2 28
SA7 A3 RESET MONITOR MODE ACCUMULATOR
BX0 -X2-X0 170 MODE TIME USED
IX0 X0-X3 DEDUCT MONITOR MODE TIME
SA6 CL+CPBT+A0 RESET PROGRAM MODE BASE TIME
PL X0,/MONITOR/CPT1 IF NO UNDERFLOW ON ADJUSTMENT
SX0 B0
EQ /MONITOR/CPT1 ENTER MAIN *CPT* PROCESSOR
AVP SPACE 4,15
** AVP - ASSIGN VIRTUAL PP.
*
* ENTRY (X6) = PP CALL.
* (B4) = -1 (PRIORITY PP REQUEST).
*
* EXIT TWO COPIES OF *1VP* ARE ASSIGNED. THESE MUST BE IN
* PARTNER PP-S. IF NO SUCH PAIR IS AVAILABLE, THEN NO
* ASSIGNMENT IS MADE.
*
* USES X - 1, 2, 3, 4, 6, 7.
* A - 1, 2, 6, 7.
* B - 3, 5.
*
* CALLS APQ.
AVP SA2 PPAL DETERMINE IF A PARTNER PAIR IS FREE
SB5 7
SX4 B1 INITIALIZE MASK
BX7 X4
LX4 45-0 FIRST BANK = PP 2
LX7 30-0 SECOND BANK = PP 22
AVP1 BX3 X4+X7
BX1 X3*X2
BX1 X1-X3
SB5 B5-B1
ZR X1,AVP3 IF PAIR IS AVAILABLE
LX4 -1 ADVANCE FIRST BANK PP
LX7 1 ADVANCE SECOND BANK PP
PL B5,AVP1 IF MORE PP-S TO CHECK
SX7 B0+
EQ /MONITOR/PPR1 SET REPLY
AVP3 SB3 AVP4 *APQ* RETURN ADDRESS
SA7 /MONITOR/APQC SET PP TO SELECT
BX7 X4 SAVE PARTNER PP MASK
SA7 AVPA
MX4 5 ADD CONTROL POINT TO PP CALL
LX4 40-59
SX7 B7
LX7 36-7
BX6 -X4*X6
BX6 X7+X6
SA6 AVPB SAVE PP CALL FOR SECOND ASSIGNMENT
EQ /MONITOR/APQ1.1 ASSIGN FIRST PP
AVP4 BX7 X7-X7
NG X1,/MONITOR/PPR1 IF LIBRARY LOCKED
BX7 X1
SA7 AVPC SAVE INPUT REGISTER ADDRESS
SA1 AVPB GET PP CALL
BX6 X1
SA2 AVPA GET SECOND PP SELECTION MASK
BX7 X2
SA7 /MONITOR/APQC
SB3 AVP5 *APQ* RETURN ADDRESS
SB4 -1
EQ /MONITOR/APQ1.1 ASSIGN SECOND PP
AVP5 LX1 24 POSITION SECOND *IR* ADDRESS
SA2 AVPC ADD FIRST *IR* ADDRESS
LX2 36
BX7 X1+X2
EQ /MONITOR/PPR1 STORE OUTPUT REGISTER
AVPA CON 0 SECOND PP SELECTION MASK
AVPB CON 0 PP CALL
AVPC CON 0 FIRST PP INPUT REGISTER ADDRESS
UAD SPACE 4,10
** UAD - *UADM* EXTENSION FOR *FRAS* SUBFUNCTION.
*
* ENTRY (X0) = MASK(48).
* (X2) = 12/ FRAS, 48/ DESIRED *FRC* VALUE.
*
* EXIT (MS, ST - ST+1) UPDATED.
* (/CME/RTCA - /CME/RTCC) UPDATED.
UAD MX6 0 RELEASE *1MB* TO NOTIFY *DFT* OF REQUEST
LX0 -12
SA6 A5+
BX7 X0*X2 EXTRACT DESIRED *FRC* VALUE
BX4 X4-X4
RC X5 READ CURRENT *FRC* VALUE
IX2 X7-X5 CALCULATE *FRC* INCREMENT
* WAIT FOR *FRC* TO BE ADVANCED BY *DFT*.
UAD1 RC X3 READ CURRENT *FRC* VALUE
IX1 X3-X7
NG X1,UAD1 IF *FRC* UPDATE HAS NOT OCCURRED YET
* ADJUST *FRC*-BASED VALUES.
SA1 CL+CPBT UPDATE CPU BASE TIME(S)
IX6 X1+X2
SA3 A1+B1
SA1 CL+CMST+A0 UPDATE MONITOR MODE BASE TIME
IX7 X3+X2
SA6 A3-B1
IX6 X1+X2
SA6 A1
SA1 /CME/RTCA UPDATE *RTC* PARAMETERS IN *CME* BLOCK
SA7 A3
IX6 X1+X2
SA3 A1+B1
IX7 X3+X2
SA6 A1
SA7 A3
SA1 RTCL GET MTR-UPDATED *RTCL* IMAGE
BX6 X1
SA6 A7+B1
EQ /MONITOR/PPRX EXIT - *OR* PREVIOUSLY CLEARED
ENDBLK
BLOCK PROBE,(DATA GATHERING PROBE.)
SPACE 4,10
*CALL COMSPDT
ACE SPACE 4,10
** ACE - SET ALTERNATE CPU EXCHANGE.
*
* ENTRY (B3) = EXIT ADDRESS.
* (X0) = 1 IF BIT TO BE SET.
* (X0) = 0 IF BIT TO BE CLEARED.
* (X1) = REQUEST WORD.
* (A1) = ADDRESS OF REQUEST WORD.
*
* EXIT ENTRY CONDITIONS PRESERVED.
* *TACE* TABLE UPDATED.
* EXIT TO /MONITOR/SPR.
*
* USES A - 3, 6.
* X - 3, 6.
ACE SA3 PRBP
PL X3,ACE1 IF *PROBE* TABLES INTERLOCKED
SX6 A0
IX3 X3+X6
SX6 B1+
SA3 X3+TACE INCREMENT COUNTER
IX6 X3+X6
SA6 A3
ACE1 JP /MONITOR/SPB EXIT
CIO SPACE 4,10
** CIO - *CIO* REQUESTS.
*
* ENTRY SEE */MONITOR/CPR* ENTRY CONDITIONS.
*
* EXIT TO */MONITOR/CIO* WITH ENTRY CONDITIONS PRESERVED.
* APPROPRIATE DATA REGION ITEMS UPDATED.
*
* USES A - 2, 4, 6.
* X - 0, 2, 3, 4, 6.
CIO SA4 PRBP
PL X4,/CPUCIO/CPC IF PROBE TABLE INTERLOCKED
SX3 X5
SX1 B4
SX6 B1
IX0 X3-X1
PL X0,CIO2 IF FET ADDRESS .GE. FL
SA2 B3 GET RA
IX2 X3+X2 ABSOLUTE REQUEST ADDRESS
ERX2 X2
LX2 -2
SX0 177B INDEX MASK FOR *CIO* FUNCTION
BX2 X0*X2
BX0 X6*X2
AX2 1
ZR X0,CIO1 IF INCREMENTING UPPER COUNTER
LX6 30
CIO1 IX4 X2+X4
SA2 X4+TCIO INCREMENT COUNTER
IX6 X2+X6
SA6 A2+
CIO2 MX0 48 RESTORE EXIT CONDITIONS
SX2 B3
EQ /CPUCIO/CPC PROCESS CIO REQUEST
IOS SPACE 4,10
** IOS - I/O STATISTICS FOR BUFFERED I/O.
*
* ENTRY (X0) = 48 BIT MASK.
* (X2) = 49 BIT MASK.
* (A5) = PP OUTPUT REGISTER ADDRESS.
*
* EXIT TO *BIO20*.
*
* USES X - 0, 1, 3, 4, 6.
* A - 3, 4, 6.
* B - 3, 4.
IOS SA3 PRBP
PL X3,/IHPFMD/BIO20 IF *PROBE* TABLE INTERLOCKED
SA3 A5 READ PP OUTPUT REGISTER
BX6 -X2*X3 EXTRACT CBT COUNT
ZR X6,/IHPFMD/BIO20 IF NO CBT COUNT
LX3 -24
SB3 47
BX1 -X0*X3 EXTRACT PUT ORDINAL
PL X3,/IHPFMD/BIO20 IF NOT CLEARING *PUT* INTERLOCK
SX4 X6-177B
NX6 X6,B4 DETERMINE *IOST* INDEX
SB3 B3-B4
SB4 59-29
NG X4,IOS1 IF CBT COUNT IN RANGE
SB3 7
IOS1 TA4 IOSP,BDT FWA OF *IOST*
SX0 B1+
LX1 PUTLS
IX4 X1+X4 FWA OF *IOST* ENTRY
SA4 X4+B3 READ *IOST* COUNTER
LX3 59-11-36
NG X3,IOS2 IF WRITE OPERATION
LX0 30
SB4 B0
IOS2 IX6 X4+X0 UPDATE *IOST* TABLE
LX4 X6,B4
NG X4,/IHPFMD/BIO20 IF COUNTER OVERFLOW
SA6 A4
EQ /IHPFMD/BIO20 RETURN
MNR SPACE 4,10
** MNR - PROGRAM MODE MTR FUNCTIONS.
*
* ENTRY SEE */PROGRAM/MNR* EXIT CONDITIONS.
*
* EXIT TO (B6) WITH ENTRY CONDITIONS PRESERVED.
* APPROPRIATE DATA REGION ITEMS UPDATED.
*
* USES A - 3, 6.
* X - 3, 4, 6.
MNR SA3 PRBP
SX4 B1+
PL X3,MNR1 IF PROBE TABLE INTERLOCKED
SX3 X3+TMNR
+ SA3 X3+B4 *** PERFORM IN ONE WORD ***
IX6 X3+X4 *** PERFORM IN ONE WORD ***
SA6 A3+ *** PERFORM IN ONE WORD ***
MNR1 JP B6 RETURN
PMN SPACE 4,10
** PMN - MTR FUNCTIONS.
*
* ENTRY SEE */MONITOR/PMN* EXIT CONDITIONS.
*
* EXIT TO (B6) WITH ENTRY CONDITIONS PRESERVED.
* APPROPRIATE DATA REGION ITEMS UPDATED.
*
* USES A - 1, 4, 6.
* X - 1, 4, 6.
PMN SX6 X0+
SA4 PRBP
SX1 A0
PL X4,PMN2 IF PROBE TABLE INTERLOCKED
IX4 X6+X4
SX6 B1
ZR X1,PMN1 IF CPU 0
LX6 30
PMN1 SA1 X4+TMTR-1 INCREMENT COUNTER
IX6 X1+X6
SA6 A1
PMN2 TJP (/TRACE/PMN,TRACE,B6) EXIT
PPR SPACE 4,10
** PPR - PPU FUNCTION REQUESTS.
*
* ENTRY SEE */MONITOR/PPR* EXIT CONDITIONS.
* (A3) = PROCESSOR CONTROL WORD ADDRESS.
*
* EXIT TO (B6) WITH ENTRY CONDITIONS PRESERVED.
* APPROPRIATE DATA REGION ITEMS UPDATED.
*
* USES A - 4, 6.
* B - 6.
* X - 0, 4, 6.
PPR SA4 PRBP
SX0 A0+
SX6 B1
ZR X0,PPR1 IF CPU 0
LX6 30
PPR1 PL X4,PPR2 IF PROBE TABLE INTERLOCKED
SB6 X4+TPPU-TPPR
SA4 A3+B6 INCREMENT COUNTER
SB6 X3 SET PROCESSOR ADDRESS
IX6 X4+X6
SA6 A4
PPR2 TJP (/TRACE/PPR,TRACE,B6) EXIT
PRG SPACE 4,10
** PRG - PROGRAM MODE PPU REQUESTS.
*
* ENTRY SEE */PROGRAM/PRG* EXIT CONDITIONS.
*
* EXIT TO (B6) WITH ENTRY CONDITIONS PRESERVED.
* APPROPRIATE DATA REGION ITEMS UPDATED.
*
* USES A - 3, 7.
* X - 3, 6, 7.
PRG BX6 X3 SAVE ENTRY CONDITIONS
SA3 PRBP
SX7 B1
PL X3,PRG1 IF PROBE TABLE INTERLOCKED
SX3 X3+TPRG-CPUM
+ SA3 X3+B4 *** PERFORM IN ONE WORD ***
IX7 X3+X7 *** PERFORM IN ONE WORD ***
SA7 A3+ *** PERFORM IN ONE WORD ***
PRG1 BX3 X6 RESTORE EXIT CONDITIONS
BX7 X7-X7
TJP (/TRACE/PPR,TRACE,B6) EXIT
SPL SPACE 4,10
** SPL - SEARCH PERIPHERAL LIBRARY.
*
* ENTRY SEE */MONITOR/SPL* EXIT CONDITIONS.
*
* EXIT TO (B6) WITH ENTRY CONDITIONS PRESERVED.
* APPROPRIATE DATA REGION ITEMS UPDATED.
*
* USES A - 2, 7.
* X - 2, 3, 4, 7.
SPL SA2 PRBP
BX3 X7 SAVE ENTRY CONDITIONS
SX7 A1
PL X2,SPL2 IF PROBE TABLE INTERLOCKED
R= A2,PLDP
AX2 36
IX7 X7-X2
SX4 B1
BX2 X4*X7
LX7 -1
ZR X2,SPL1 IF INCREMENTING UPPER COUNTER
LX4 30
SPL1 SA2 PRBP
SX2 X2+TSPL
IX2 X7+X2
SA2 X2 INCREMENT COUNTER
IX7 X4+X2
SA7 A2
SPL2 BX7 X3 RESTORE ENTRY CONDITIONS
JP B6 RETURN
ENDBLK
BLOCK TRACE,(TRACE/TRAP PACKAGE.)
SETFLD SPACE 4,10
** SETFLD - SET UP FIELD VALIDATION REGISTERS.
*
* ENTRY (A1) = TRPA.
* (X1) = (TRPA).
*
* EXIT (X1) POSITIONED TO TRAP-ON-ANY-NON-ZERO-VALUE FLAG.
* (X2) = VALUE TO CHECK AGAINST, AFTER APPLYING MASK.
* (X3) = WORD ADDRESS.
* (X6) = POSITIONED MASK.
* (B5) = LOW BIT OF FIELD.
*
* USES X - 1, 2, 3, 6.
* A - 2.
* B - 4, 5.
SETFLD MACRO
LIST M
SX3 X1 GET WORD ADDRESS
LX1 59-41 FLAG TO TRAP ON ANY NONZERO VALUE
SA2 A1+B1 LOW BIT, MASK LENGTH
SB5 X2 LOW BIT
AX2 24
SB4 X2 GET MASK LENGTH - 1
MX6 1 CREATE MASK
AX6 B4
SB4 B4+B1 POSITION MASK
LX6 B4
SA2 A2+B1 GET VALUE
BX2 X6*X2 APPLY MASK TO VALUE
LIST *
ENDM
MTRP SPACE 4,10
** *DSDI* POINTER WORDS.
*
* THESE WORDS ARE USED BY *DSDI* DIRECTIVE *TBDUMP* TO LOCATE
* THE TRACE BUFFERS AND ASSOCIATED INFORMATION IN THE TRACE
* BLOCK. IF THE ORDER OR CONTENT OF THESE WORDS IS CHANGED,
* *DSDI* MUST BE EXAMINED FOR POSSIBLE CHANGES AS WELL.
MTRP VFD 24/0,18/PMNC+PMNCL,18/PMNC *MTR* TRACE BUFFER
VFD 42/0,18/PMNA *MTR* FUNCTION LIST
VFD 24/0,18/PMND,18/PMNE ABS/CPA ADDRESS LISTS
VFD 24/0,18/PPRC+PPRCL,18/PPRC *PPU* TRACE BUFFER
VFD 42/0,18/PPRA *PPU FUNCTION LIST
TRACE SPACE 4
*CALL COMSDSL
TRP SPACE 4,10
** TRP - TRAP ON ERROR CONDITION.
*
* ENTRY CALLED AT *MTRX*.
*
* EXIT TO */MONITOR/MTRX*+1.
*
* USES X - ALL.
* A - 1, 2, 3, 4, 6, 7.
* B - 3, 4, 5, 6, 7.
TRP SA1 SSTL
TB3 MCT
TB5 SC
LX1 59-13
SX0 B5+B5 2 * SYSTEM CP
NG X1,/MONITOR/MTRX+1 IF SYSTEM DEBUG MODE DISABLED
SA2 TRPA
* VALIDATE CM ALLOCATION.
LX2 59-44
SX7 B7 SAVE (B7)
PL X2,TRP7 IF MCT VALIDATION NOT SELECTED
SA1 SMRL
NZ X1,TRP7 IF MEMORY MANAGEMENT OPERATION OCCURRING
TB6 -200B,PCPA
SA7 TRPB
SB7 B0+
TRP1 TB4 -2,NMCT
SX1 B1+B1 INITIAL MCT OFFSET (START AT CP 1)
SX2 B0 INITIAL PREVIOUS INDEX
TRP2 MX5 12
SB4 B4-B1
ZR B4,TRP5 IF END OF MCT
SA3 B3+X1 MCT ENTRY
BX4 X5*X3 BACKWARD LINK
AX4 48-1
BX4 X4-X2
NZ X4,TRP52 IF BACKWARD LINK INCORRECT
LX5 -12
BX2 X1 NEW PREVIOUS INDEX
BX1 X5*X3 FORWARD LINK
AX1 36-1
MX7 -24
BX5 -X7*X3 HOLE(N-1)
BX3 X2
LX7 12
LX3 7-1
IX6 X2-X0
NG X6,TRP3 IF CP
LX6 7-1
SX3 B6+X6
TRP3 SA4 X3+STSW
SX3 X3+FLSW
LX4 59-53
SA3 X3+B7 CURRENT *FLSW*/*ECSW*
NG X4,TRP53 IF ACTIVITY UNDERFLOW
BX4 X1
LX4 7-1
IX6 X1-X0
NG X6,TRP4 IF CP
LX6 7-1
SX4 B6+X6
TRP4 SX4 X4+FLSW
SA4 X4+B7 NEXT *FLSW*/*ECSW*
BX6 -X7*X4 RA(N) SHIFTED LEFT 12
BX7 -X7*X3 RA(N-1) SHIFTED LEFT 12
IX6 X6-X7 RA(N) - RA(N-1) SHIFTED LEFT 12
NG X6,TRP51 IF RA-S OUT OF ORDER
LX6 -12
IX6 X6-X5 RA(N) - RA(N-1) - HOLE(N-1)
MX5 12
BX7 X5*X4 NFL(N)
LX7 -48
IX6 X6-X7 RA(N) - RA(N-1) - HOLE(N-1) - NFL(N)
MX5 -12
BX7 -X5*X3 FL(N-1)
IX6 X6-X7 SUBTOTAL - FL(N-1)
ZR X6,TRP2 IF ALL IS WELL
EQ TRP55 HANG DUE TO MISPOSITIONED HOLE
TRP5 TB4 1,MCT
EQ B3,B4,TRP6 IF EM ALREADY VALIDATED
SA1 ECRL
SB3 B4+
SB7 ECSW-FLSW
NZ X1,TRP1 IF EM PRESENT
TRP6 SA1 TRPB RESTORE (B7)
SB7 X1+
* VERIFY EJT/PCPA INTEGRITY.
TRP7 SA1 TRPA
TB3 1,EJTM MAXIMUM EJT ORDINAL
LX1 59-42
PL X1,TRP11 IF NOT SELECTED
MX6 -5
TX7 SC SYSTEM CONTROL POINT NUMBER
MX4 -12
TRP8 SB3 B3-B1 DECREMENT EJT INDEX
ZR B3,TRP9 IF END OF SCAN
SX1 B3
CX2 X1,EJT CONVERT EJT ORDINAL TO OFFSET
TA2 X2+JSNE,EJT
BX5 X4*X2
ZR X5,TRP8 IF VACANT ENTRY
LX2 -1
BX0 -X6*X2 JOB STATUS
SX5 X0-EXJS
NG X2,TRP8 IF JOB INTERLOCK SET
SA3 A2+SCHE-JSNE
LX3 -12
BX3 -X4*X3
NZ X5,TRP8 IF NOT EXECUTING JOB
IX3 X3-X7
PL X3,TRP56 IF INVALID CONTROL POINT NUMBER
EQ TRP8 CONTINUE
* VALIDATE PCPA-S.
TRP9 TB3 SC
MX4 -5
TB4 -1,NMCT
TB6 -200B,PCPA
SB5 B4-B3 NUMBER OF PCP-S
MX7 12
TRP10 ZR B5,TRP11 IF ALL PCP-S CHECKED
SX6 B5
SB5 B5-B1 DECREMENT PCP ORDINAL
LX6 7
SX6 B6+X6 PCPA ADDRESS
SA1 X6+TFSW
BX1 X7*X1 EJT ORDINAL
ZR X1,TRP10 IF VACANT PCP
LX1 -48
CX2 X1,EJT CONVERT EJT ORDINAL TO OFFSET
TA1 X2+JSNE,EJT
LX1 59-0
BX2 -X4*X1 JOB STATUS
NG X1,TRP10 IF JOB INTERLOCKED
SX2 X2-PCJS
NZ X2,TRP57 IF INCORRECT JOB STATUS
SA2 A1+B1
ERRNZ SCHE-JSNE-1 CODE DEPENDS ON VALUE
LX2 12
BX2 X7*X2
LX2 -48
SX3 B3
IX2 X3-X2
PL X2,TRP57 IF INCORRECT PCP NUMBER
EQ TRP10 CONTINUE
* CHECK FOR DEAD JOBS.
TRP11 SA2 TRPA
SA1 DSSL
LX2 59-43
PL X2,TRP14 IF DEAD JOB CHECK NOT SELECTED
LX1 59-2
NG X1,TRP14 IF DEADSTART IN PROGRESS
SA1 /MONITOR/JAVA
SX6 B7
SA6 TRPB SAVE (B7)
BX6 X1
SA6 TRPC SAVE *JAVA* INSTRUCTION WORD
SA2 TRPD
SB3 TRP12 SET *JAV* NON-FAILURE EXIT ADDRESS
BX6 X2
SA6 A1 SET *JAV* FAILURE EXIT
TRP12 SB5 B5-B1
ZR B5,TRP13 IF END OF SCAN
SX1 B5
LX1 7
SB7 X1
EQ /MONITOR/JAV CHECK FOR DEAD JOB
TRP13 SA1 TRPB RESTORE (B7)
SA2 TRPC RESTORE *JAVA* INSTRUCTION WORD
SB7 X1
BX6 X2
SA6 /MONITOR/JAVA
* VALIDATE NFL.
TRP14 SA1 TRPA
TB3 SC
LX1 59-45
PL X1,TRP19 IF NFL VALIDATION NOT SELECTED
SB4 B0
SX7 QFBN
SB6 B0+
TRP15 SB3 B3-B1
ZR B3,TRP18 IF THROUGH WITH CP-S OR PCP-S
MX0 12
SX6 B3+B6
SA1 CMCL
BX1 X0*X1
LX1 12
BX3 X1-X6
ZR X3,TRP15 IF STORAGE MOVE IN PROGRESS
LX6 7
SX6 X6+B4 ADD BIAS FOR PCPA
SA1 X6+TFSW
SA2 X6+FLSW
BX1 X0*X1
BX4 X0*X2
ZR X1,TRP15 IF CP/PCP NOT ACTIVE
ZR X4,TRP15 IF NO NFL ASSIGNED
LX1 12
CX6 X1,EJT CONVERT EJT ORDINAL TO OFFSET
TA1 X6+JSNE,EJT
LX1 59-6
NG X1,TRP15 IF JOB ADVANCE SET
AX2 12 COMPUTE RA
SX2 X2
LX2 6 RA
IX2 X2-X7 FWA OF QUEUED FUNCTION BUFFER
SX6 -QFBL
TRP16 SX6 X6+B1 READ NEXT ENTRY
IX4 X2-X6
ERX4 X4
ZR X4,TRP17 IF ZERO ENTRY
AX4 48 CHECK ENTRY
SX4 X4-DTKM
NZ X4,TRP58 IF NOT *DTKM*
TRP17 NG X6,TRP16 IF NOT END OF BUFFER
EQ TRP15 CHECK NEXT CP/PCP
TRP18 NZ B4,TRP19 IF THROUGH CHECKING PCP-S
TB4 NMCT
TB6 SC
SB3 B4-B6 NUMBER OF PCPS+1
TB4 -CPAS,PCPA PCPA BIAS
EQ TRP15 CHECK PCP-S
* VALIDATE CM FIELD.
TRP19 SA1 TRPA
BX2 X1
LX2 59-47
PL X2,TRP20 IF CM VALIDATION NOT SELECTED
SETFLD
RJ CFD CHECK FIELD
NZ X3,TRP50 IF ERROR
* VALIDATE CPA FIELD.
TRP20 SA1 TRPA
BX2 X1
LX2 59-46
PL X2,/MONITOR/MTRX+1 IF CPA VALIDATION NOT SELECTED
SETFLD
TX5 SC SET OFFSET
SB3 X3
SB4 B3
SB6 7
TRP21 SX5 X5-1
ZR X5,TRP22 IF THROUGH CHECKING CP-S OR PCP-S
LX3 X5,B6
SX3 X3+B4 ADD WORD ADDRESS AND PCPA BIAS
RJ CFD CHECK FIELD
NZ X3,TRP50 IF ERROR
EQ TRP21 CHECK NEXT CP/PCP
TRP22 NE B3,B4,/MONITOR/MTRX+1 IF THROUGH CHECKING PCP-S
TB4 -CPAS,PCPA SET PCPA BIAS
TX3 NMCT
TX5 SC
SB4 B4+B3 ADD WORD ADDRESS TO BIAS
IX5 X3-X5 NUMBER OF PCPS+1
EQ TRP21 CHECK PCPA-S
* TRAP CONTROL WORDS.
TRPA VFD 12/TRCM DSD OUTPUT REGISTER FROM *TRCM*
VFD 1/0 CM FIELD VALIDATION
VFD 1/0 CPA FIELD VALIDATION
VFD 1/0 NFL VALIDATION
VFD 1/0 MCT VALIDATION
VFD 1/0 DEAD JOB CHECK
VFD 1/0 EJT/PCPA VALIDATION
VFD 1/0 TRAP ON NONZERO VALUE FLAG (FIELD VAL.)
VFD 17/0 UNUSED
VFD 24/0 ADDRESS OF WORD TO TRAP/TRACE
VFD 30/0 UNUSED
VFD 6/0 LENGTH OF FIELD (FIELD VAL.)
VFD 18/0 UNUSED
VFD 6/0 LOW BIT OF FIELD TO CHECK (FIELD VAL.)
CON 0 VALUE TO CHECK (FIELD VAL.)
* MISCELLANEOUS CELLS.
TRPB CON 0 (B7) SAVE AREA
TRPC CON 0 *JAV* INSTRUCTION WORD SAVE AREA
TRPD EQ TRP54 *JAV* FAILURE INSTRUCTION
* DISPLAY MESSAGE AND HANG SYSTEM.
TRP50 SB4 MSGB FIELD ERROR
EQ TRP59 DISPLAY MESSAGE AND HANG
TRP51 SB4 MSGC RA-S MISORDERED
EQ TRP59 DISPLAY MESSAGE AND HANG
TRP52 SB4 MSGD MCT LINKAGE ERROR
EQ TRP59 DISPLAY MESSAGE AND HANG
TRP53 SB4 MSGE ACTIVITY UNDERFLOW
EQ TRP59 DISPLAY MESSAGE AND HANG
TRP54 SB4 MSGF DEAD JOB FOUND
EQ TRP59 DISPLAY MESSAGE AND HANG
TRP55 SB4 MSGG MISPOSITIONED HOLE
EQ TRP59 DISPLAY MESSAGE AND HANG
TRP56 SB4 MSGH EJT ERROR
EQ TRP59 DISPLAY MESSAGE AND HANG
TRP57 SB4 MSGI PCPA ERROR
EQ TRP59 DISPLAY MESSAGE AND HANG
TRP58 SB4 MSGJ NFL ERROR
EQ TRP59 DISPLAY MESSAGE AND HANG
TRP59 RJ /MONITOR/SVR SAVE ALL REGISTERS
RJ /CPB/RAR RESTORE ALL REGISTERS
SA1 B4
SA2 MSGA
BX6 X2
TB5 MS2W,SCA
SA6 B5
BX7 X1
SA7 B5+B1
SA1 B4+B1
BX6 X1
SA6 A7+B1
+ EQ * HANG
MSGA DATA 10LTRAP HIT -
MSGB DATA C*FIELD ERROR*
MSGC DATA C*RA-S MISORDERED*
MSGD DATA C*MCT LINKAGE ERROR*
MSGE DATA C*ACTIVITY UNDERFLOW*
MSGF DATA C*DEAD JOB*
MSGG DATA C*MISPOSITIONED HOLE*
MSGH DATA C*EJT ERROR*
MSGI DATA C*PCPA ERROR*
MSGJ DATA C*NFL QFBN ERROR*
CFD SPACE 4,10
** CFD - CHECK FIELD.
*
* ENTRY (X1) .LT. 0 IF TRAPPING ON ANY NONZERO VALUE.
* (X2) = VALUE TO CHECK AGAINST.
* = 0 IF TRAPPING ON ANY NONZERO VALUE.
* (X3) = WORD ADDRESS.
* (X6) = MASK.
* (B5) = LOW BIT POSITION OF FIELD.
*
* EXIT (X3) = NON-ZERO IF FIELD ERROR.
*
* USES X - 3.
* A - 3.
CFD SUBR ENTRY/EXIT
ERX3 X3 GET WORD
AX3 B5
BX3 X6*X3 ISOLATE FIELD CONTENTS
BX3 X2-X3 COMPARE
NG X1,CFDX IF TRAPPING ON ANY NONZERO VALUE
ZR X3,CFD1 IF ERROR IN FIELD
SX3 -1
CFD1 SX3 X3+1
EQ CFDX RETURN
PMN SPACE 4,10
** PMN - MTR FUNCTIONS.
*
* ENTRY SEE */MONITOR/PMN* EXIT CONDITIONS.
*
* EXIT TO (B6) WITH ENTRY CONDITIONS PRESERVED.
*
* USES X - 1, 3, 4, 6, 7.
* A - 1, 3, 4, 6, 7.
PMN SA1 SSTL
SX6 X0
LX1 59-13
NG X1,/MONITOR/RB6 IF SYSTEM DEBUG MODE DISABLED
SA4 PMNA CHECK IF THIS FUNCTION TO BE TRACED
NG X4,PMN2 IF ALL FUNCTIONS TO BE TRACED
PMN1 ZR X4,/MONITOR/RB6 IF TRACE NOT SELECTED FOR THIS ONE
MX1 -12
BX1 -X1*X4
BX1 X1-X6
AX4 12
NZ X1,PMN1 IF NOT A MATCH
* CREATE TRACE BUFFER ENTRY.
PMN2 SX1 X6-ARTF
ZR X1,/MONITOR/RB6 IF *ARTF* FUNCTION
SA1 PMNB GET *IN* POINTER
SA4 PDTL SAVE TIME STAMP ENTRY
MX3 -24
BX3 -X3*X4
SA4 =3L***
LX3 18
BX6 X4+X3
SA4 RTCL
MX3 -18
BX3 -X3*X4
BX6 X6+X3
SA6 X1
BX7 X0 SAVE REQUEST
SA4 PMND GET LIST OF ABSOLUTE ADDRESSES TO SAVE
SA7 A6+B1
SX3 X4
ERX3 X3
BX6 X3
SA6 A7+B1 SAVE FIRST WORD
AX4 24
ERX4 X4
BX7 X4
SA7 A6+B1 SAVE SECOND WORD
TA3 -1,MCT
SX1 B0+
PMN3 SA3 A3+B1 GET NEXT MCT ENTRY
BX6 X3
SA6 A7+1
SA3 A3+1
BX7 X3
SA7 A6+B1
SX7 X1+
TX4 1,SC
IX6 X1-X4
LX7 7
NG X6,PMN4 IF NOT A PCP
LX6 7
TX7 X6,PCPA
PMN4 SA4 PMNE GET ADDRESSES OF CPA WORDS TO STORE
LX4 -24
SX3 X4 GET SECOND ADDRESS
AX4 36 GET FIRST ADDRESS
IX4 X4+X7
SA4 X4
BX6 X4
SA6 A7+B1 SAVE FIRST CPA WORD
IX4 X3+X7
SA4 X4
BX6 X4
SA6 A6+B1 SAVE SECOND CPA WORD
SA4 X7+TFSW
BX6 X4
AX4 48
SA6 A6+B1 STORE *TFSW* IN TRACE BUFFER ENTRY
CX7 X4,EJT CONVERT EJT ORDINAL TO OFFSET
TA4 X7+JSNE,EJT
BX7 X4
SA7 A6+B1 STORE *JSNE* IN TRACE BUFFER ENTRY
SX1 X1+B1
TX4 NMCT
IX4 X1-X4
NG X4,PMN3 IF NOT END OF MCT
SX1 PMNC+PMNCL
SX6 A7+B1
TX4 NMCT
LX7 X4,B1 *NMCT* * 2
LX4 2 *NMCT* * 4
IX4 X4+X7 *NMCT* * 6
SX7 B0+
IX4 X6+X4
SX4 X4+TBUFE
IX4 X4-X1
NG X4,PMN5 IF NOT AT TRACE BUFFER LIMIT
SX6 PMNC
PMN5 SA6 A1 UPDATE *IN* POINTER
BX7 X7-X7 RESTORE (X7)
JP B6 EXIT TO FUNCTION PROCESSOR
PMNA CON 0 MTR FUNCTION TRACE LIST
PMNB CON PMNC TRACE BUFFER *IN* POINTER
PMNC BSS 0 TRACE BUFFER
TBUF DUP 10
LOC 0
CON 0 TIME STAMP
CON 0 (X0)
CON 0 VARIABLE - SEE *PMND*
CON 0 VARIABLE - SEE *PMND*
TBUFE BSS 0
LOC *O
MCT DUP NCPS+2+20B ALLOW MAXIMUM CP-S AND 20B PCP-S
CON 0,0 MCT
CON 0 VARIABLE - SEE *PMNE*
CON 0 VARIABLE - SEE *PMNE*
CON 0 *TFSW*
CON 0 *JSNE*
MCT ENDD
SPACE 4
ERRNG PMNCL-6*NCPS-6*NPPS-4-TBUFE BUFFER TOO SMALL
TBUF ENDD
PMNCL EQU *-PMNC TRACE BUFFER TABLE LENGTH
PMND VFD 12/0,24/SMRL,24/CMCL ADDRESSES OF ABS WORDS TO SAVE
PMNE VFD 12/0,24/STSW,24/FLSW ADDRESSES OF CPA WORDS TO SAVE
PPR SPACE 4,10
** PPR - PP FUNCTION REQUESTS.
*
* ENTRY SEE */MONITOR/PPR* EXIT CONDITIONS.
*
* EXIT TO (B6) WITH ENTRY CONDITIONS PRESERVED.
*
* USES X - 0, 2, 4, 6, 7.
* A - 2, 4, 6, 7.
PPR SA4 SSTL
BX0 X5
LX4 59-13
NG X4,PPR4 IF SYSTEM DEBUG MODE DISABLED
SA4 PPRA CHECK IF THIS FUNCTION TO BE TRACED
NG X4,PPR2 IF ALL FUNCTIONS TO BE TRACED
AX0 48
PPR1 ZR X4,PPR4 IF THIS FUNCTION NOT TO BE TRACED
MX6 -12
BX6 -X6*X4
BX6 X6-X0
AX4 12
NZ X6,PPR1 IF NOT A MATCH
PPR2 SA2 PPRB GET *IN* POINTER
SA4 PDTL GET TIME STAMP
MX7 -24
BX7 -X7*X4
SA4 =3L***
LX7 18
BX6 X4+X7
SA4 RTCL
MX7 -18
BX7 -X7*X4
BX6 X6+X7
SA6 X2
SA2 A5-B1 PP INPUT REGISTER
BX7 X2
SA7 A6+B1
BX6 X5 PP OUTPUT REGISTER
SA2 A5+B1 MB + 0
BX7 X2
SA6 A7+B1
SA4 A2+B1 MB + 1
SA7 A6+B1
BX6 X4
SA2 A4+B1 MB + 2
SA6 A7+B1
BX7 X2
SA4 A2+B1 MB + 3
SA7 A6+B1
BX6 X4
SA2 A4+B1 MB + 4
SA6 A7+B1
BX7 X2
SA4 A2+B1 MB + 5
SA7 A6+B1
BX6 X4
SA6 A7+B1
SA2 PMND GET LIST OF ABSOLUTE ADDRESSES TO SAVE
SX4 X2 GET FIRST ADDRESS
AX2 24 GET SECOND ADDRESS
ERX4 X4
ERX2 X2
BX7 X4
BX6 X2
SA7 A6+B1
SA6 A7+B1
SX4 PPRC+PPRCL
SX6 A6+B1
IX4 X6-X4
SA2 A5-1
NG X4,PPR3 IF NOT AT TRACE BUFFER LIMIT
SX6 PPRC
PPR3 SA6 PPRB UPDATE *IN* POINTER
BX7 X7-X7 RESET (X7)
LX2 -36+7 RESET (X2)
PPR4 SX4 7600B RESTORE (X4)
JP B6 EXIT TO FUNCTION PROCESSOR
PPRA CON 0 PPU FUNCTION TRACE LIST
PPRB CON PPRC TRACE BUFFER *IN* POINTER
PPRC BSS 0 TRACE BUFFER
TBUF DUP 20D
CON 0 TIME STAMP
CON 0 PP INPUT REGISTER
CON 0 PP OUTPUT REGISTER
CON 0,0,0,0,0,0 PP MESSAGE BUFFER
CON 0 VARIABLE - SEE *PMND*
CON 0 VARIABLE - SEE *PMND*
TBUF ENDD
PPRCL EQU *-PPRC TRACE BUFFER LENGTH
TRC SPACE 4,10
** TRC - PROCESS TRAP/TRACE REQUEST.
*
* ENTRY SEE */PPR/TRCM*.
*
* EXIT TPRA/PPRA/PMNA/PMND/PMNE SET UP.
*
* USES X - 2, 3, 5, 6.
* A - 3, 6.
TRC BSS 0 ENTRY
LX5 0-37
SA3 A5+B1 GET MB+0
MX2 -4
BX2 -X2*X5
ZR X2,TRC1 IF NOT *TRACE,XXX*
BX6 X3
AX2 1
SA3 X2+TRCA GET LIST POINTER FOR *TRACE* REQUESTS
SA6 X3+
EQ TRC2 RETURN
TRC1 BX6 X1
SA6 TRPA SAVE *DSD* OR
BX6 X3
SA6 A6+B1 SAVE MB+0
SA3 A3+B1
BX6 X3
SA6 A6+B1 SAVE MB+1
TRC2 JP /MONITOR/PPR1 EXIT
TRCA CON PMNE *TRACE,SET,CPA* ADDRESS LIST
CON PMND *TRACE,SET,ABS* ADDRESS LIST
CON PPRA *TRACE,PPU* FUNCTION LIST
CON 0 (UNUSED)
CON PMNA *TRACE,MTR* FUNCTION LIST
ENDBLK
BLOCK CPB,(CPUMTR BREAKPOINT PACKAGE)
BKP SPACE 4,10
** BKP - *CPUMTR* BREAKPOINT.
*
* THE DSD COMMAND *CPB,BKP,/B/N* IS USED TO SET A BREAKPOINT.
* *DSD* SAVES THE WORD AT THE INDICATED ADDRESS IN THE BREAK-
* POINT TABLE AND REPLACES IT WITH A *RJ BKP*. WHEN THE
* SPECIFIED LOCATION IS HIT, THE *RJ* TAKES THE CPU TO THIS
* ROUTINE, WHERE ALL REGISTERS ARE STORED IN THE EXCHANGE
* PACKAGE DISPLAY AREA. *CPUMTR* THEN LOOPS, WAITING FOR
* /CPB/CPFG TO BECOME ZERO. THE *DSD* COMMAND *CPB,GO.*
* ZEROES THIS WORD, ALLOWING *CPUMTR* TO RESTORE ALL
* REGISTERS AND CONTINUE EXECUTION.
*
* THIS ROUTINE IS VALID IN PROGRAM AND MONITOR MODE.
*
* ENTRY (CALLED ON *CPUMTR* BREAKPOINT).
*
* EXIT (ALL REGISTERS RESTORED).
BKP1 SA1 /MONITOR/BXP
SA2 CHTP CHECK *DSD* ACTIVE
LX6 18+18
BX7 X6+X1 INSERT *P* INTO EXCHANGE PACKAGE
SX6 B1
SA7 A1
AX2 12
SA3 X2+B1 FETCH DISPLAY CHANNEL STATUS
MX2 -6
AX3 12
BX3 -X2*X3
IX3 X3-X6
NZ X3,BKP3 IF CHANNEL NOT RESERVED TO *DSD*
SA6 /MONITOR/BXP+CPFG
BKP2 SA3 A3 CHECK *DSD* ACTIVE
AX3 12
SA1 /MONITOR/BXP+CPFG CHECK BREAKPOINT FLAG
BX3 -X2*X3
BX1 X3-X1
ZR X1,BKP2 IF FLAG NOT CLEARED AND *DSD* HAS CHANNEL
SA2 /MONITOR/BXP
SA3 BKPB (NO / NO / EQ ** )
SX6 0
TA6 MS2W,SCA CLEAR MESSAGE
AX2 36
BX6 X2+X3 CONSTRUCT RETURN ADDRESS
SA6 BKP
BKP3 RJ RAR RELOAD ALL REGISTERS
BKP PS ENTRY/EXIT
RJ /MONITOR/SVR SAVE ALL REGISTERS
SA1 =C$CPUMTR BREAKPOINT HIT$
SA2 A1+B1
SA3 A2+B1
BX6 X1
BX7 X2
SA2 BKP GET RETURN ADDRESS
SA1 /MONITOR/BXP+CPBA BREAKPOINT ADDRESS
TA6 MS2W,SCA
BX6 X3
SA7 A6+B1
SA6 A7+B1
AX2 30
SX6 X2-1 RETURN ADDRESS - 1
BX7 X6-X1 CHECK FOR SAME ADDRESS
SX6 X6+B1
NZ X7,BKP1 IF NOT AT BREAKPOINT ADDRESS
SA2 /MONITOR/BXP+CPBW
SA7 A2 CLEAR BREAKPOINT WORD
SA7 A1 ZERO BREAKPOINT ADDRESS
SX6 X6-1
BX7 X2 RESET BREAKPOINT WORD
SA7 X6
EQ BKP1 CHECK *DSD* ACTIVE
BKPB NO PROTOTYPE RETURN INSTRUCTION
NO
EQ ** (RETURN ADDRESS INSERTED HERE)
RAR SPACE 4,10
** RAR - RELOAD ALL REGISTERS.
*
* ENTRY REGISTER DATA AT */MONITOR/BXP*.
*
* EXIT ALL REGISTERS RELOADED.
RAR PS ENTRY/EXIT
SB7 /MONITOR/BXP
SB1 1 SET REGISTER ARRAY FOR *B0* - *B7*, *A0*
SB4 3
MX0 42
SA3 B7 FETCH *A0*
AX3 18
SA2 B7+7
RAR1 SA1 B4+RARB GET RESET INSTRUCTION
BX2 -X0*X2
BX3 -X0*X3
IX6 X2+X1 *B7*/*B5*/*B3*/*B1* TO RESET INSTRUCTION
SB2 B2-2
LX6 30
IX6 X6+X3 *AO*/*B6*/*B4*/*B2* TO RESET INSTRUCTION
SA6 B4+RARA STORE RESET INSTRUCTION
SB4 B4-B1
SA3 A2-B1 FETCH *B6*/*B4*/*B2*
SA2 A3-B1 FETCH *B5*/*B3*/*B1*
PL B4,RAR1 IF MORE TO GO
SA1 B7+7 *A7*
AX1 18
SA2 X1 OLD VALUE AT *A7*
BX7 X2
SA3 A1-B1 *A6*
AX3 18
SA4 X3 OLD VALUE AT *A6*
LX6 X4
SA7 X1+777777B RESTORE *A7*
SA6 X3+777777B RESTORE *A6*
SA1 B7+17B *X7*
SA2 A1-B1
BX7 X1 RESTORE *X7*
LX6 X2 RESTORE *X6*
SA3 A3-B1 *A5*
SA1 A2-B1 *X5*
AX3 18
SA5 X3+777777B RESTORE *A5*
SA3 A3-B1 *A4*
SA2 A1-B1 *X4*
AX3 18
BX5 X1 RESTORE *X5*
SA4 X3+777777B RESTORE *A4*
SA3 A3-B1 *A3*
SA1 A2-B1 *X3*
BX4 X2 RESTORE *X4*
SA2 A3-B1 *A2*
AX2 18
AX3 18
SA3 X3+777777B RESTORE *A3*
SA2 X2+777777B RESTORE *A2*
BX3 X1 RESTORE *X3*
SA1 A1-B1 *X2*
BX2 X1 RESTORE *X2*
SA1 A1-B1 *X1*
UX0 B1,X1 START UNPACKING *X1*
LX0 11
UX1 B2,X0 CONTINUE UNPACK
LX1 11
UX0 B3,X1
LX0 11
UX1 B4,X0
MX0 60
SA0 X0+777777B -0 TO *A0*
LX1 11
UX0 B5,X1
SA1 A1-1 *X0*
LX0 11
SB7 X0+777777B SIGN OF *X1* TO *B7*
UX0 B6,X0 COMPLETE UNPACK
BX0 X1 RESTORE *X0*
NO
SA1 A1-7 *A1*
AX1 18
SA1 X1+777777B RESTORE *A1*
SX1 B7-B0 RESTORE SIGN OF *X1*
PX1 B6,X1 START REPACKING *X1*
AX1 11
PX1 B5,X1
AX1 11
PX1 B4,X1
AX1 11
PX1 B3,X1
AX1 11
PX1 B2,X1
AX1 11
PX1 B1,X1 COMPLETE RESTORATION OF *X1*
RARA DATA 0,0,0,0
EQ RAR RETURN
RARB SB2 A0+0 RESET INSTRUCTIONS
SB1 A0+0
SB4 A0+0
SB3 A0+0
SB6 A0+0
SB5 A0+0
SA0 A0+0
SB7 A0+0
SPACE 4,10
ENDBLK
BLOCK SCP,(SYSTEM CONTROL POINT FACILITY.),MONITOR
TITLE SCP MAIN ROUTINES.
SSC SPACE 4,10
*** *SSC*.
* A SUBSYSTEM CALL FROM A USER CONTROL POINT (UCP) WHICH
* USES THE SYSTEM CONTROL POINT FACILITY. THIS UCP CALL IS SENT
* TO THE APPROPIATE SUBSYSTEM DETERMINED BY THE SUBSYSTEM
* IDENTIFICATION (SID). THE SUBSYSTEM IS CHECKED TO SEE IF
* IT HAS ATTAINED *SYSTEM CONTROL POINT* (SCP) STATUS, THAT IS
* THE SUBSYSTEM IDENTIFICATION WORD (SSIW) IS INITIALIZED. IF
* NOT THE *SUBSYSTEM NOT PRESENT* STATUS IS RETURNED. ALSO,
* THE SUBSYSTEM RECEIVING BUFFER (SSCR) IS EXAMINED TO SEE
* WHETHER OR NOT THE SUBSYSTEM IS READY TO RECEIVE REQUESTS.
* IF UNABLE TO THE *SUBSYSTEM BUSY* STATUS IS RETURNED.
*
*T 18/ *SSC*,1/,1/R,4/,18/ SID,18/ ADDR
*
* ADDR = ADDRESS OF A PARAMETER BLOCK.
* R = 1 IF AUTO-RECALL SELECTED.
* SID = SUBSYSTEM IDENTIFICATION.
* IF ZERO, SCP IS READY TO ACCEPT REQUESTS
* FROM UCPS.
* IF NONZERO, *ADDR* IS THE FIRST WORD OF A BLOCK
* OF DATA TO BE PROCESSED BY THE SCP.
*
*T ADDR 24/ RSUB,12/ RINS,6/WCNT,4/RCDC,2/RT,11/ ES,1/C
*T ADDR+1 60/ SUBSYSTEM SPECIFIED PARAMETERS
*T ADDR+N 60/ LAST WORD OF PARAMETER BLOCK
*
* C = 1, WHEN REQUEST HAS BEEN COMPLETED.
* ES = ERROR AND STATUS INFORMATION -
*
* BIT DESCRIPTION
*
* 1 0 = SUBSYSTEM PRESENT.
* 1 = SUBSYSTEM NOT RUNNING.
* 2 0 = SUBSYSTEM ACCEPTED REQUEST.
* 1 = SUBSYSTEM TOO BUSY TO ACCEPT REQUEST.
* 3 0 = SUBSYSTEM IS DEFINED.
* 1 = SUBSYSTEM IS UNDEFINED.
* 4 - 5 RESERVED FOR CDC.
* 6 - 11 OTHER ERRORS -
* 00 = NO OTHER ERROR.
* 01-17 = RESERVED FOR CDC SYSTEM ERRORS.
* 20-67 = RESERVED FOR CDC SUBSYSTEM ERRORS.
* 70-77 = RESERVED FOR INSTALLATIONS.
*
* RT = STATUS RETURN DIRECTIVE -
*
* BIT DESCRIPTION
*
* 12 0 = IF SUBSYSTEM BUSY, HALT PROGRAM UNTIL
* REQUEST CAN BE POSTED TO SUBSYSTEM.
* 1 = IF SUBSYSTEM BUSY, SET BIT 2 IN ES AND
* ALLOW PROGRAM TO CONTINUE.
* 13 0 = ABORT PROGRAM ON ALL ERRORS.
* 1 = ABORT PROGRAM ONLY ON FATAL ERRORS.
* RCDC = RESERVED FOR CDC.
* WCNT = WORD COUNT - 1 OF PARAMETER BLOCK.
* RINS = RESERVED FOR INSTALLATION.
* RSUB = RESERVED FOR SUBSYSTEM.
SSC SX7 B0+ CLEAR COMMUNICATION BUFFER ADDRESS WORD
SA7 APQA
SA7 SSFG CLEAR *STSW* STATUS
SA7 SSTA CLEAR FST ADDRESS FOR *SST* CALLS
SX6 X4-3RSSF
SX7 X4-3RSST
ZR X6,SSF IF *SSF*
SX4 X4-3RSSC
ZR X7,SST IF *SST*
NZ X4,APJ IF NOT *SSC*
* CHECK CALL ARGUMENTS.
SB5 X5 CHECK ADDR WITHIN RANGE
LX5 -18 EXTRACT SUBSYSTEM ID
LE B5,B1,CPE IF ADDR .LE. 1
SB4 B4-B5
SX7 -B4
LE B4,B1,CPE IF ADDR+1 .GE. FL
SX6 B5 CHECK COMPLETE BIT
SA3 B3
IX4 X3+X6
ERX3 X4
BX6 X0*X3 CLEAR ERROR STATUS FIELD
LX3 -1
NG X3,CPE IF COMPLETE BIT ALREADY SET
EWX6 X4
SX2 X5 SET SSID
SA4 B7+SSCW SUBSYSTEM CONTROL WORD
ZR X2,SSC11 IF SPECIAL SUBSYSTEM INITIALIZATION CALL
SB4 SSC1 RETURN ADDRESS FOR *CSC*
BX3 X4
EQ CSC CHECK SUBSYSTEM CONNECTION
SSC1 SX1 X5
PX5 X1,B6 SAVE SHIFT COUNT AND SSID
SA2 B7+AACW CHECK VALIDATION OF CP AS UCP
SX6 EC01 * TOO MANY SCP CONNECTIONS.*
LX6 6
SX6 X6+B1 SET COMPLETION BIT
ZR B6,SSC3.1 IF REQUEST TO 6TH SUBSYSTEM (*SSCW* FULL)
LX2 59-11
MX3 -3
LX4 B6 POSITION *SSCW*
BX6 -X3*X4 NUMBER OF REQUESTS
SX6 X6-MAXR
SB3 SSC4 RETURN ADDRESS
ZR X6,SSC10 IF MAXIMUM NUMBER OF REQUESTS
NG X2,RSC IF VALIDATED
SA2 B7+SEPW CHECK FOR *SSJ=* ENTRY POINT
LX2 59-50
NG X2,RSC IF *SSJ=* ENTRY POINT
* ABORT UNAUTHORIZED UCP WITH NO EXIT OR REPRIEVE PROCESSING.
* *1MA* CALLED TO ISSUE *ILLEGAL USER ACCESS* ERROR MESSAGE
* AND SET *SYET* ERROR FLAG.
SSC2 MX0 1 FORCE UCP INTO RECALL
SA2 RA1 RA+1 ADDRESS
ERX5 X2
LX0 40-59
BX6 X5+X0
EWX6 X2
LX0 18-59-40+59 SET *1MA* MESSAGE INDEX
SX2 B1+B1 SET *1MA* FUNCTION CODE
SX5 B7 SET UCP CP ADDRESS
EQ SSC15 CALL *1MA* TO ISSUE MESSAGE AND SET ERROR
* PROCESS SUBSYSTEM NOT PRESENT.
SSC3 SX6 ES1+1 * SUBSYSTEM NOT PRESENT.*
SSC3.1 SA1 RA RA OF USER
SX3 B5 PARAMETER ADDRESS
IX3 X3+X1 ABSOLUTE ADDRESS
ERX1 X3 SET ERROR STATUS AND COMPLETION BIT
BX6 X6+X1 MERGE ERROR STATUS
LX1 59-13 CHECK ABORT DESIRED
BX7 X7-X7
EWX6 X3
PL X1,CPE IF ABORT
EQ MTRP EXIT TO STORE OUTPUT REGISTER
* RETURN FROM *RSC* WITH -
*
* (A2) = SUBSYSTEM *STSW* WORD IN CP AREA.
* (B5) = RELATIVE ADDRESS OF USER PARAMETER AREA.
* (X0) = -7777B.
* (X3) = SUBSYSTEM RA.
* (X5) = SHIFT COUNT AND SUBSYSTEM IDENTIFICATION.
* (X6) = SUBSYSTEM FL.
* (X7) = -(NUMBER OF WORDS ALLOWED FOR PARAMETER AREA.)
*
* *RSC* ERROR EXIT ADDRESSES -
+ VFD 12/SSC3-SSC4,18/SSC12,12/SSC10-SSC4,18/SSC10
SSC4 SX4 SSIW CHECK SUBSYSTEM IDENTIFICATION WORD
IX4 X4+X3
ERX4 X4
BX4 X4-X5
SX1 X4
NZ X1,SSC3 IF SUBSYSTEM NOT INITIALIZED AS SCP
SA4 A2-STSW+EECW GET REPRIEVE STATUS
LX4 59-58
LX1 X4,B1
PL X4,SSC4.1 IF NOT EXTENDED REPRIEVE MODE
NG X1,SSC10 IF INTERRUPT HANDLER ACTIVE
SSC4.1 SA4 A2-STSW+SSOW GET OUTSTANDING CONNECTION COUNT
SX1 SSCR
IX1 X1+X3
ERX1 X1 READ SUBSYSTEM RECEIVING BUFFER POINTER
BX2 X0+X4
SB6 X6 (B6) = SUBSYSTEM FL
SA4 B7+SEPW CHECK FOR SSJ= ENTRY POINT
LX6 X1,B1
LX4 59-50
PL X6,SSC5 IF NO RESTRICTION ON UCP ACCESS
* ALLOW PRIVILEGED PROGRAM UCP ONLY (SSJ= ENTRY POINT OR
* SUBSYSTEM).
NG X4,SSC5 IF SSJ= ENTRY POINT
SA4 B7+JCIW CHECK FOR SUBSYSTEM
LX4 36
BX4 -X0*X4
ZR X4,SSC2 IF NOT AUTHORIZED UCP
SSC5 SB3 X1 RECEIVING BUFFER ADDRESS
ZR X2,SSC10 IF MAXIMUM NUMBER OF REQUESTS OUTSTANDING
AX1 18
NG X1,SSC10 IF SUBSYSTEM NOT READY FOR DATA
BX2 -X0*X1 LENGTH OF PARAMETER AREA (LP)
ZR B3,SSC10 IF NO SUBSYSTEM RECEIVING BUFFER POINTER
LE B3,B1,SSC13 IF AP OUT OF RANGE
SB4 X1-HDRL (B4) = LP - HDRL
AX1 18 EXTRACT XP
SA4 RA
SX6 B5
IX4 X6+X4
ERX4 X4 READ VARIABLE LENGTH WORD COUNT
MX6 -6
SB3 B3+HDRL DATA ADDRESS
PL B4,SSC6 IF NOT VARIABLE LENGTH WORD COUNT
LX4 -18
BX4 -X6*X4 VARIABLE LENGTH OF BUFFER (WC)
SX6 X4+HDRL
IX6 X6-X2
PL X6,CPE IF WC .GT. LP
SB4 X4+B1 (B4) = VARIABLE LENGTH WORD COUNT
SSC6 SX4 B4-MAXB-1
SX6 B4+X7
SX7 B3-B6
PL X6,CPE IF PARAMETER BLOCK BEYOND UCP FL
SX2 X7+B4
BX4 X4*X2
SX1 X1+
SX2 B5+ FWA OF PARAMETER BLOCK
PL X4,SSC13 IF LP .GE. FL(SS) OR LP .GT. MAXIMUM
ZR X1,SSC8 IF NO XP TO MOVE
* MOVE EXCHANGE PACKAGE.
PX2 X2,B4 SAVE (B4)
IX0 X1+X3 ABSOLUTE ADDRESS OF XP MOVE
SB4 20B NUMBER OF WORDS TO TRANSFER
SB5 X1+B4 LWA+1 OF XP MOVE
SX6 B2 ADDRESS OF EXCHANGE PACKAGE
GE B5,B6,SSC13 IF XP MOVE BEYOND FL
SB6 SSC7 *MSM* *MSR* RETURN ADDRESS
IX1 X6-X0 COMPUTE INCREMENT
SX0 B2 FWA TO TRANSFER
TJP (/CME/MSR,CME,/MONITOR/MSM,CMUMTR,/MONITOR/MSR)
SSC7 UX2,B4 X2 (B4) = LENGTH OF PARAMETER BLOCK
SB5 X2+ (B5) = FIRST WORD OF PARAMETER BLOCK
* MOVE PARAMETER BLOCK.
SSC8 SA1 RA USER RA
SX6 B5
IX0 X6+X1 FWA OF TRANSFER
SX1 B3+
IX1 X3+X1 FWA OF DATA BUFFER
IX1 X0-X1
SB6 SSC9 *MSM* *MSR* RETURN ADDRESS
TJP (/CME/MSR,CME,/MONITOR/MSM,CMUMTR,/MONITOR/MSR)
* STORE HEADER INFORMATION.
SSC9 SA1 B7+TFSW GET EJT ORDINAL
SA4 B7+SEPW
MX0 -12
SX6 10000B
LX1 12
LX4 12-52
BX1 -X0*X1
BX6 X6*X4
CX4 X1,EJT CONVERT EJT ORDINAL TO OFFSET
BX1 X6+X1 MERGE *DMP=* FLAG AND EJT ORDINAL
TA4 X4+JSNE,EJT GET JOB SEQUENCE NUMBER
SX6 4000B
MX7 24
BX7 X7*X4
BX6 X4+X6 SET SCP CONNECTION FLAG
SA6 A4
BX7 X7+X1
SX1 B3-B1
IX1 X1+X3
EWX7 X1 STORE SECOND HEADER WORD
UX2,B3 X5 (B3) = SHIFT COUNT, (X2) = SSID
SX6 B1
SA5 RA1
ERX5 X5 READ (RA+1)
IX1 X1-X6
SX6 X5 ADDRESS OF UCP PARAMETER BLOCK
EWX6 X1 STORE FIRST HEADER WORD
* SET CPU INTERLOCK BIT.
SX1 SSCR
IX7 X1+X3
ERX1 X7
MX0 1
BX6 X0+X1
TIC DCPC INVALIDATE OTHER CPU CACHE IF PRESENT
EWX6 X7
* UPDATE CPA-S.
SX3 B1
SA4 A2-STSW+SSOW INCREMENT NUMBER OF OUTSTANDING REQUESTS
IX7 X4+X3
SA1 B7+SSCW
SA7 A4
LX1 B3 POSITION WAIT RESPONSE INDICATORS
SX6 X2-LSSI ADD SUBSYSTEM INDEX TO *SSCW*
LX6 6
BX6 X1+X6
IX6 X3+X6 INCREMENT WAIT RESPONSE INDICATORS
SB6 60
SB3 B6-B3
LX6 B3
BX7 X5
SA6 A1
MX0 -36
LX7 59-40 CHECK AUTO RECALL DESIRED
SA1 RC BUILD *RCLP* REQUEST
BX5 -X0*X5
AX7 59
BX6 X1+X5
BX6 X7*X6 CLEAR (RA+1) IF RECALL NOT SELECTED
SB3 SSC9.1 *RCC* RETURN ADDRESS
SA1 RA1
EWX6 X1
MX1 -3
SA2 A2+ CHECK CPU STATUS
LX2 3
BX2 -X1*X2
SX2 X2-XCPS
NZ X2,SSC9.2 IF NOT *X* STATUS
SA7 T1 SAVE (X7)
SB6 A2-STSW SET EXCHANGE PACKAGE ADDRESS
EQ RCC RECALL SCP
SSC9.1 SA1 T1 RESTORE (X7)
BX7 X1
SSC9.2 NG X7,MTR IF RECALL DESIRED
EQ MTRX EXIT
* PROCESS SUBSYSTEM BUSY.
SSC10 SA1 RA
SX2 B5
IX2 X2+X1 CHECK RECALL DESIRED
ERX1 X2
SX4 ES2+1 * SUBSYSTEM BUSY.*
BX6 X1+X4
LX1 59-12
BX7 X7-X7
PL X1,SXS IF RECALL DESIRED
EWX6 X2
EQ MTRP EXIT
* PROCESS SPECIAL SUBSYSTEM INITIALIZATION CALL.
SSC11 SB6 SSC12 SET RETURN ADDRESS FOR *RSI*
EQ RSI RETURN SUBSYSTEM INFORMATION
* PROCESS ILLEGAL SUBSYSTEM IDENTIFICATION.
SSC12 SX7 ES3+1 *SUBSYSTEM ID ILLEGAL.*
EQ SSC12.1 SET ERROR STATUS
* RETURN FROM *RSI* WITH SUBSYSTEM INFORMATION.
+ SX7 B1+ SET COMPLETION BIT
SB6 X3+11 SET SUBSYSTEM ACTIVE FLAG IN *SSCT*
LX6 X7,B6
BX6 X2+X6
SA6 A2+
SSC12.1 SA1 RA SET RETURN CODE
SX2 B5
IX2 X2+X1
ERX1 X2
BX6 X1+X7
MX7 0
EWX6 X2
EQ MTRP EXIT
* ABORT SUBSYSTEM FOR ILLEGAL XP, AP, OR LP PARAMETERS.
*
* (B5) = ADDRESS OF UCP PARAMETER AREA.
* (X3) = SUBSYSTEM RA.
* (A2) = *STSW* WORD IN SUBSYSTEM CP AREA.
SSC13 SX6 B5 SAVE UCP PARAMETER ADDRESS
LX3 30 SAVE SCP RA
BX6 X3+X6
SX0 B0 FORCE SCP ABORT
SA6 T2
SX5 A2-STSW SUBSYSTEM CP ADDRESS
SX2 2 SET *1MA* FUNCTION CODE
* CALL *1MA*. (ALSO ENTERED HERE FROM *SSF*.)
*
* (X0) = 36/0, 6/INDX, 18/ADDR
* INDX = SUBSYSTEM INDEX, OR MESSAGE INDEX IF ADDR = 0.
* ADDR = RELATIVE ADDRESS OF SUBSYSTEM PARAMETER WORD.
* = 0, IF *CPUMTR* REQUESTING ABORT.
* (X2) = *1MA* FUNCTION CODE.
* (X5) = CP ADDRESS.
SSC15 SA4 X5+STSW CHECK ROLLOUT REQUESTED
SX6 3R1MA BUILD *1MA* REQUEST
BX7 X0 SAVE *1MA* PARAMETER
SA7 T1
LX6 59-17
SB3 SSC17 SET RETURN ADDRESS
LX2 24
BX6 X6+X0
LX4 59-24
BX6 X6+X2
NG X4,SSC19 IF ROLLOUT REQUESTED
SX0 B7 SAVE CONTROL POINT ADDRESS
SB7 X5
SB4 -1 PROHIBIT QUEUING
MX1 1 SET CHECK ACTIVITY FLAG
BX0 X0+X1
SB6 SSC16 SET RETURN IF NOT AT ACTIVITY LIMIT
EQ CAL CHECK ACTIVITY LIMIT
SSC16 SX0 X0 CLEAR CHECK ACTIVITY FLAG
TJP (/DCP/APQ,DCPC,/MONITOR/APQ) ASSIGN PP
SSC17 SB5 B7+ SAVE CPA ADDRESS
SB7 X0 RESTORE (B7)
BX7 X7-X7
NG X0,SSC19 IF TOO MUCH ACTIVITY
NZ X1,SSC17.2 IF PP ASSIGNED
MX7 1 SETUP TO QUEUE THE REQUEST
SA2 APQA
SB7 B5 RESTORE CONTROL POINT ADDRESS
BX7 X7+X2
SX2 NPQ
SA7 AQRA
SB3 SSC17.1
EQ AQR QUEUE AS A NO ROLL REQUEST
SSC17.1 SB7 X0+ RESTORE (B7)
SX7 B0+
SSC17.2 SA1 T1 CHECK *1MA* PARAMETER
NZ X1,SSC18 IF NOT SCP ABORT
SA3 T2 GET UCP PARAMETER ADDRESS AND SCP RA
SA1 RA GET UCP RA
SX2 X3
AX3 30
IX2 X1+X2
ERX1 X2 SET ERROR STATUS IN UCP PARAMETER BLOCK
ERRNZ ES1-2 CODE DEPENDS ON VALUE OF *ES1*
MX6 -2
BX6 -X6+X1
EWX6 X2
SX2 SSIW CLEAR SUBSYSTEM IDENTIFICATION WORD
IX2 X3+X2
TIC DCPC INVALIDATE CACHE ON OTHER CPU, IF PRESENT
EWX7 X2
SSC18 SA2 RA1
ERX5 X2 GET CALL ADDRESS
MX6 -36
BX0 -X6*X5
LX5 59-40
SA4 RC BUILD *RCLP* REQUEST
SA1 B5+STSW UPDATE *STSW*
SA3 SSFG
BX6 X1+X3
SA6 A1
PL X5,MTRP IF NOT AUTO RECALL
BX7 X4+X0 SET *RCLP* REQUEST
EWX7 X2
EQ MTR ENTER RECALL STATUS
SSC19 SA1 APQA CLEAR BUFFER INTERLOCK
SA2 RA1
ZR X1,SSC20 IF NO BUFFER
BX6 X6-X6
SA6 X1
SSC20 SA4 SSTA
ERX1 X2 GET RA+1 REQUEST
ZR X4,SXS IF NO FNT INTERLOCK TO CLEAR
LX1 17-59 POSITION REQUEST NAME
SX1 X1-3RSST
ZR X1,SST9 IF *SST* REQUEST
EQ SXS SET *X* STATUS
* THE FOLLOWING CHECKS ARE MADE TO INSURE THAT THESE TAGS
* ARE BENEATH RA+100B OF SUBSYSTEM FL.
ERRNG 77B-SSIW
ERRNG 77B-SSCR
SSF SPACE 4,10
*** *SSF*.
* PROCESS SUBSYSTEM FUNCTION CALLS.
*
*T 18/ *SSF*,1/ ,1/R,4/ ,18/0,18/ ADDR
*
*T ADDR 6/ RC,12/ FP,18/ UCPA,18/ SCPA,6/ FC
*T ADDR+1 24/ JSEQ,23/0,1/D,12/ JEJT
*T ADDR+2 1/U,1/S,10/ 0,24/ EUCPA,24/ ESCPA
*
* FC FUNCTION CODE -
* 02 SEND DAYFILE MESSAGE AND/OR ABORT USER.
* 04 UPDATE USER JOB ACCOUNTING.
* 06 COMPLETE USER REQUEST.
* 10 READ USER JOB MEMORY.
* 12 RETURN USER JOB STATUS.
* 14 WRITE USER JOB MEMORY.
* 16 EXIT FROM SYSTEM CONTROL POINT STATUS.
* 24 ALLOW USER SWAPPING.
* 26 SWAP IN USER JOB.
* 30 SET LONG TERM CONNECTION.
* 32 CLEAR LONG TERM CONNECTION.
* 34 ALLOW MULTIPLE REQUEST CAPABILITY.
* 40 EXTENDED READ USER JOB CM/ECS.
* 42 EXTENDED MULTIPLE REQUEST PROCESSING.
* 44 EXTENDED WRITE USER JOB CM/ECS.
* 46 RETURN USER JOB IDENTIFICATION.
* 50-66 RESERVED FOR CDC.
* 70-76 RESERVED FOR INSTALLATIONS.
* SCPA A DATA ADDRESS WITHIN THE SUBSYSTEM MEMORY.
* UCPA A DATA ADDRESS WITHIN A USER JOB MEMORY.
* FP A PARAMETER MEANINGFUL TO A PARTICULAR FUNCTION.
* RC SYSTEM REPLY - (SEE *COMSSCP*)
* 34-37 RESERVED FOR INSTALLATIONS.
* 40 AT LEAST ONE ERROR ENCOUNTERED IN LIST.
* 41 JOB IDENTIFIER IS INVALID.
* 42 SCP CM/ECS ADDRESS OUT OF RANGE.
* 43 UCP CM/ECS ADDRESS OUT OF RANGE.
* 44 USER JOB IS SWAPPED OUT.
* 45 USER JOB IS NOT IN THE SYSTEM.
* 46 SWAP IN REQUEST TEMPORARILY PROHIBITED.
* 47-55 RESERVED FOR CDC.
* 56 ECS ABORT/PARITY ERROR.
* 57 CONNECTION PREVIOUSLY ESTABLISHED.
* 60 CONNECTION REJECTED.
* 61 CONNECTION NOT PREVIOUSLY ESTABLISHED.
* 62 WORD TRANSFER TOO LONG.
* 63 UCP NOT ESTABLISHED WITH SUBSYSTEM.
* 64 SUBSYSTEM IS ESTABLISHED WITH RECEIVER.
* 65 ATTEMPT TO SET ILLEGAL ERROR FLAG.
* 66 ILLEGAL DAYFILE PROCESSING FLAG.
* 67-73 RESERVED FOR CDC.
* 74-77 RESERVED FOR INSTALLATIONS.
* JEJT JOB EJT ORDINAL.
* D IF SET, UCP MUST BE *DMP=* PROGRAM, OTHERWISE UCP MUST
* NOT BE *DMP=* PROGRAM.
* JSEQ JOB SEQUENCE NUMBER.
* EUCPA UCP CM OR ECS ADDRESS, FOR SF.XRED (40) AND
* SF.XWRT (44) FUNCTIONS ONLY.
* ESCPA SCP CM OR ECS ADDRESS, FOR SF.XRED (40) AND
* SF.XWRT (44) FUNCTIONS ONLY.
* U IF SET, EUCPA IS UCP ECS ADDRESS, OTHERWISE EUCPA
* IS UCP CM ADDRESS.
* S IF SET, ESCPA IS SCP ECS ADDRESS, OTHERWISE ESCPA
* IS SCP CM ADDRESS.
SSF BSS 0 ENTRY
* CHECK CALL ARGUMENTS.
SA2 B7+JCIW CHECK SUBSYSTEM CALL
SB6 X5 CHECK ADDR WITHIN RANGE
LX2 -24
LE B6,B1,CPE IF ADDR .LE. 1
SA3 B3 RA OF SUBSYSTEM
SX1 SSIW SUBSYSTEM IDENTIFICATION WORD
IX1 X3+X1
ERX1 X1
BX7 -X0*X1 SUBSYSTEM IDENTIFICATION FROM RA+SSIW
GE B6,B4,CPE IF ADDR .GE. FL
BX4 -X0*X2 SUBSYSTEM IDENTIFICATION FROM CPA
SX1 B6
IX6 X3+X1
ERX3 X6 READ (ADDR)
SA6 T1 ABSOLUTE *ADDR*
BX7 X4-X7
SX4 X4-LSSI-1
NZ X7,CPE IF SUBSYSTEM CODE NOT INITIALIZED
NG X4,CPE IF CALLER NOT SUBSYSTEM
MX2 -18
BX4 -X2*X1
SX6 MSFO*10B SET MAXIMUM SFCALL OVERHEAD
SA6 SSFE
* CHECK USER JOB.
* (X0) = -7777B.
* (X3) = SFCALL FUNCTION WORD.
* (X4) = LIST PROCESSING FLAG.
* (B3) = (RA).
* (B4) = SUBSYSTEM FL.
SSF1 MX7 -6 CHECK FUNCTION CODE (FC) FOR LEGALITY
SA1 SSFB CHECK IF SCPA VALIDITY CHECKING NEEDED
BX7 -X7*X3
SA2 SSFE DECREMENT REMAINING MONITOR TIME
LX3 59-0
SB5 X7 FUNCTION CODE (FC)
TX6 X2,-SFFO
SA6 A2
LX1 X1,B5
NG X3,CPE IF COMPLETION BIT ALREADY SET
SX6 B5-EXIT
SX2 B5-REGR
ZR X6,S16 IF *SF.EXIT* REQUEST
LX3 59-41-59+0 EXTRACT FUNCTION PARAMETER
BX7 -X0*X3 FP
LX3 -6-12-6 EXTRACT SCPA
PX7,B5 X7 SAVE FC AND FP
SB6 X3 SCPA
LE B5,B1,CPE IF ILLEGAL FC
SB5 X7+B6
PL X1,SSF3 IF NO SCPA CHECKING REQUIRED
* CHECK SCPA OUT OF RANGE.
NZ X2,SSF2 IF NOT *SF.REGR*
ZR B6,SSF3 IF NO MESSAGE ADDRESS SPECIFIED
SB5 B6+MESL CHECK MESSAGE LENGTH
SSF2 LE B6,B1,SSF20 IF SCPA .LE. 1
NG B5,SSF20 IF (SCPA + FP) EXCEED 17 BITS
GT B5,B4,SSF20 IF SCPA LWA .GT. FL
* CHECK OTHER USER JOB INFORMATION.
SSF3 NG X4,SSF4 IF LIST PROCESSING IN EFFECT
SB6 SSF21 SET RETURN ADDRESS IF INVALID EJT ORDINAL
SB5 SSF3.1 SET NORMAL RETURN ADDRESS FOR *CUI*
EQ CUI CHECK UCP IDENTIFICATION
SSF3.1 NZ X6,SSF18 IF NO MATCH ON JOB SEQUENCE NUMBER
SX6 A1 SAVE UCP EJT ENTRY ABSOLUTE ADDRESS
ERX3 X3 READ PARAMETER WORD
SA6 SSFF
NZ X2,SSF14 IF UCP NOT AT CONTROL POINT
SA2 CMCL CHECK FOR STORAGE MOVE
AX2 48
LX2 7
BX2 X5-X2
ZR X2,SXS IF UCP JOB MOVING
LX3 -6
LX5 18
BX4 X4+X5 SAVE UCP CPA
LX1 59-6
NG X1,SSF14.1 IF JOB ADVANCE SET
BX5 X3 SAVE REGISTERS
SB5 B4
SA2 B7+JCIW GET SSID
LX2 -24
BX2 -X0*X2
LX4 -18
SA3 X4+SSCW
SB4 SSF3.2 RETURN ADDRESS FOR *CSC*
EQ CSC CHECK SUBSYSTEM CONNECTION
SSF3.2 LX4 -18 SAVE SHIFT COUNT
SX1 B6+
BX3 X5 RESTORE (X5)
BX4 X4+X1
SB4 B5+ RESTORE (B4)
LX4 36
* CHECK IF SWPO HAS BEEN ISSUED BY REQUESTING SCP.
* IF SO RETURN *ROLLED OUT* STATUS (RC=44).
SSF4 UX1,B5 X7 EXTRACT FC
SX5 B5-SWPI
ZR X5,SSF5 IF SF.SWPI FUNCTION
BX5 X5-X5
LX4 -18
SA2 X4+SSCW GET UCP CONTROL WORD
LX4 -18
SB6 X4
LX4 36
ZR B6,SSF5 IF NO CONNECTION
LX5 X2,B6 POSITION ROLLOUT ALLOWED FLAG
LX5 59-4
* CHECK UCPA OUT OF RANGE
SSF5 SA2 SSFC CHECK IF UCPA VALIDITY CHECKING NEEDED
LX2 X2,B5
LX1 X2,B1
SX6 B5-ENDT CHECK FOR SF.ENDT FUNCTION
LX3 -18
SB6 X3 UCPA
LX3 18
NZ X6,SSF6 IF NOT SF.ENDT REQUEST
SX6 B6
NG B6,SSF8 IF SPECIAL SF.ENDT (UCPA .LT. 0)
NG X5,SSF15 IF SF.SWPO ISSUED, RETURN RC44 STATUS
ZR B6,SSF8 IF SPECIAL SF.ENDT (UCPA = 0)
BX7 X0*X7 CLEAR FUNCTION PARAMETER FIELD
SSF6 NG X5,SSF15 IF SF.SWPO ISSUED, RETURN RC44 STATUS
PL X2,SSF8 IF NO UCPA CHECKING REQUIRED
PL X1,SSF7 IF NOT EXTENDED UCPA
MX5 2
BX5 X5*X4 CALCULATE EXTENDED ADDRESS WORD BIAS
SX1 B1+B1
LX5 2
BX1 X5-X1 0 = LIST, 1 = XLST, 2 = XRED/XWRT
SB6 X1
ZR X1,CPE IF SF.XRED/SF.XWRT IN SF.LIST
SA5 B3 RA
SX1 X4+B6
IX6 X5+X1
ERX1 X6 GET EXTENDED UCPA ADDRESS
SA6 T2
NG X1,SSF8 IF EUCPA IS ECS ADDRESS
LX1 -24 VALIDATE EXTENDED UCP CM ADDRESS
SB6 X1
SSF7 LX4 -18
SA5 X4+FLSW GET UCP RA AND FL
LX4 18
BX2 -X0*X5 FL/100
MX0 -RMSK
AX5 RSHF
LE B6,B1,SSF11 IF UCP ADDRESS OUT OF RANGE
BX6 -X0*X5 UCP RA/100
MX0 -12
LX2 6 FL
SX5 X7+B6 UCPA LWA + 1
LX6 6
IX2 X2-X5 FL - (LWA+1)
NG X5,SSF11 IF (UCPA + FP) EXCEED 17 BITS
SX1 B6
IX6 X1+X6 X6 = UCPA ABSOLUTE
NG X2,SSF11 IF UCPA OUT OF RANGE
* EXIT TO FUNCTION PROCESSOR.
SSF8 LX4 -36
SB6 X4 SHIFT COUNT
MX5 -3
LX4 18
SA2 X4+SSCW GET SCP CONTROL WORD OF UCP
LX4 18
LX2 B6
BX1 -X5*X2 WAIT RESPONSE INDICATOR FOR THIS SUBSYSTEM
SX5 B5-2 CHECK FUNCTION CODE
LX5 -2
SX3 X3+ EXTRACT SCPA
SB5 X5-MXSF
PL B5,CPE IF ILLEGAL FUNCTION CODE
NZ B6,SSF8.1 IF VALID *SSCW*
SX1 B0+ CLEAR WAIT RESPONSE INDICATORS
SX2 B0+ CLEAR *SSCW*
SSF8.1 JP B5+SSFA+MXSF PROCESS FUNCTION
SPACE 4
* EXIT TO FUNCTION PROCESSOR WITH -
*
* (T2) = ABSOLUTE ADDRESS OF EXTENDED ADDRESS WORD.
* IF EXTENDED ADDRESS FUNCTION.
* (A2) = *SSCW* ADDRESS IN UCP CPA.
* (T1) = ABSOLUTE ADDRESS OF FUNCTION PARAMETER WORD.
* ((B3)) = SUBSYSTEM RA.
* (B4) = SUBSYSTEM FL.
* (B5) = JUMP POSITION IN TABLE.
* (B6) = SUBSYSTEM INDICATOR SHIFT COUNT.
* (X0) = -7777B.
* (X1) = WAIT RESPONSE INDICATORS FOR THIS UCP.
* (X2) = *SSCW* WORD OF UCP CPA SHIFTED TO SCP BYTE.
* (X3) = SCPA (RELATIVE ADDRESS).
* (X4) = LIST PROCESSING FLAG.
*T 1/L,1/E,1/A,3/0,18/ INDX,18/ CPA,18/ SFA
* L = SET IF LIST PROCESSING IN EFFECT (SF.LIST
* OR SF.XLST FUNCTION).
* E = SET IF EXTENDED LIST PROCESSING IN EFFECT
* (SF.XLST WITH 2 WORDS PER LIST ENTRY).
* A = SET IF NO ADVANCE ON FUNCTIONS IN LIST.
* INDX = SHIFT COUNT.
* CPA = UCP CONTROL POINT ADDRESS.
* SFA = CURRENT FUNCTION RELATIVE ADDRESS.
* OR LIST ENTRY).
* (X6) = UCPA ABSOLUTE.
* (X7) = 12/FC,30/ ,18/FP
* FC = FUNCTION CODE.
* FP = FUNCTION PARAMETER WORD.
*
* FUNCTION JUMP TABLE. TWO FUNCTIONS PER WORD.
SSFA BSS 0
LOC 0
+ PL X5,S02 SF.REGR (02)
EQ SSF19 SF.TIM (04) - NOT IMPLEMENTED
+ PL X5,S06 SF.ENDT (06)
EQ S10 SF.READ (10)
+ PL X5,S12 SF.STAT (12)
EQ S10 SF.WRIT (14)
+ PL X5,S16 SF.EXIT (16)
EQ CPE SF.INUF (20) - NOT IMPLEMENTED
+ PL X5,CPE SF.RTUF (22) - NOT IMPLEMENTED
EQ S24 SF.SWPO (24)
+ PL X5,S24 SF.SWPI (26)
EQ S30 SF.SLTC (30)
+ PL X5,S30 SF.CLTC (32)
EQ S34 SF.LIST (34)
+ PL X5,CPE SF.RERN (36) - NOT IMPLEMENTED
EQ S40 SF.XRED (40)
+ PL X5,S42 SF.XLST (42)
EQ S40 SF.XWRT (44)
PL X5,S46 SF.CPID (46)
EQ CPE (50) - NOT IMPLEMENTED
LOC *O
MXSF EQU *-SSFA
* FUNCTION 02 - SEND MESSAGE TO USER JOB.
S02 MX6 -4
SA1 A2-SSCW+JCIW CHECK SUBSYSTEM CONNECTED WITH UCP
BX7 -X6*X2
LX1 36
ZR X7,SSF16 IF UCP NOT ESTABLISHED WITH SUBSYSTEM
BX2 -X0*X1 CHECK IF UCP IS A SUBSYSTEM
SX1 X2-LSSI-1
NG X1,S022 IF UCP NOT A SUBSYSTEM
* NOTE - IF TWO SUBSYSTEMS ARE CONNECTED TO ONE ANOTHER,
* THE UCP CANNOT ISSUE AN SF.REGR REQUEST ON THE SCP.
SB5 B4 SAVE REGISTERS
BX5 X3
SA3 B7+SSCW
SB4 S021 RETURN ADDRESS FOR *CSC*
EQ CSC CHECK SUBSYSTEM CONNECTION
S021 SA3 A3 CHECK SCP CONNECTED TO UCP
LX3 B6
MX6 -4
BX2 -X6*X3
BX3 X5 RESTORE REGISTERS
SB4 B5
ZR B6,S022 IF NOT CONNECTED
SX5 RC64 * UCP IS ESTABLISHED WITH RECEIVER.*
NZ X2,SSF12 IF SUBSYSTEM (SCP) ESTABLISHED WITH UCP
S022 SX5 A1-JCIW UCP CP ADDRESS
EQ SSF9 FORMAT 1MA REQUEST
* FUNCTION 06 - COMPLETE USER REQUEST.
S06 ZR X3,S062 IF NO UCP ACCOUNT PROCESSING
SB5 X3 VALIDATE ADDRESS
SA5 B3 RA OF SCP
LT B5,B1,SSF20 IF SCPA .LT. 0
SB5 B5+4 ADD PARAMETER BLOCK LENGTH
GT B5,B4,SSF20 IF PARAMETER BLOCK OUTSIDE FL
IX2 X5+X3 SET ABSOLUTE PARAMETER BLOCK ADDRESS
SA6 S06A SAVE UCPA ABSOLUTE
MX7 -18 GET UCP CP ADDRESS
LX7 18
BX7 -X7*X4
AX7 18
BX6 X4 SAVE LIST PROCESSING FLAG
SA6 S06B
SX6 B3 SAVE SUBSYSTEM RA ADDRESS
LX6 18
SX4 B4 SAVE SUBSYSTEM FL
BX6 X6+X4
LX6 18
SX4 B6 SAVE SHIFT COUNT
BX6 X6+X4
SA6 S06C
SX6 B7 SAVE SCP CP ADDRESS
SA6 S06D
BX5 X1 SAVE WAIT RESPONSE INDICATORS
SB7 X7 SET UCP CP ADDRESS
SB3 S061 SET EXIT ADDRESS
EQ IAA INCREMENT AUC ACCUMULATOR
S061 SA2 B7+SSCW RESTORE REGISTERS
SA3 S06D
SB7 X3
SA3 S06C
SB6 X3
AX3 18
SB4 X3
AX3 18
SB3 X3
SA4 S06B
SA1 S06A
BX6 X1
BX1 X5
MX0 -12
LX2 B6
NE B5,B0,SSF22 IF EXCESSIVE AUC INCREMENT
S062 SX3 B1
IX7 X2-X3 DECREMENT WAIT RESPONSE INDICATORS
PL X6,S063 IF ONLY ONE FUNCTION TO SET COMPLETE
LX3 3
BX5 X3*X2 LONG TERM CONNECTION INDICATOR
LX5 -3
IX1 X1+X5 COUNT OF CONNECTION INDICATORS
LX3 X1
BX7 X0*X2 CLEAR ALL CONNECTION INDICATORS
S063 ZR X1,SSF16 IF NO CONNECTION INDICATORS SET
MX5 -4
BX1 -X5*X7 NEW CONNECTION INDICATORS
NZ X1,S064 IF STILL CONNECTIONS TO THIS SCP
BX7 X0*X2 CLEAR ALL CONNECTION INDICATORS
S064 SB5 60
SB5 B5-B6
LX7 B5 UPDATE *SSCW*
SA7 A2+
SA1 B7+SSOW UPDATE OUTSTANDING CONNECTION COUNT
IX7 X1-X3
BX5 X5-X5 REPLY CODE (NO ERRORS)
SA7 A1+
SB5 A2-SSCW UCP CONTROL POINT ADDRESS
SB6 -B5
ZR X6,SSF12 IF NO COMPLETION BIT TO SET
NG X6,SSF12 IF NO COMPLETION BIT TO SET
ERX1 X6 SET COMPLETION BIT
BX7 X3+X1
EWX7 X6
TIC DCPC INVALIDATE CACHE ON OTHER CPU, IF PRESENT
EQ SSF12 COMPLETE REQUEST
S06A CON 0 SAVE UCPA ABSOLUTE
S06B CON 0 SAVE LIST PROCESSING FLAG
S06C CON 0 SAVE B REGISTERS
S06D CON 0 SAVE SCP CP ADDRESS
* FUNCTIONS 10 AND 14 - READ/WRITE DATA.
S10 ZR X1,SSF16 IF NO WAIT RESPONSE INDICATORS SET
SX5 B5+MXSF-WRIT/4+1
SX7 X7 WORD COUNT
SA1 B3 RA OF SCP
LX6 30
IX1 X1+X3 ABSOLUTE SCPA
IX6 X6+X1 30/UCPA ABS, 30/SCPA ABS
SX1 X7-MAXB-1 CHECK TRANSFER SIZE
NG X1,S401 IF TRANSFER SIZE NOT TOO LARGE
SX5 RC62 * WORD TRANSFER TOO LONG.*
EQ SSF12 SET COMPLETE BIT AND ERROR CODE
* FUNCTIONS 40 AND 44 - EXTENDED READ/WRITE DATA.
S40 ZR X1,SSF16 IF NO WAIT RESPONSE INDICATORS SET
SX5 B5+MXSF-XWRT/4+1 CHECK FOR READ OR WRITE FUNCTION
SX7 X7 WORD COUNT
SA2 T2
ERX2 X2 VALIDATE SCPA CM ADDRESS
LX1 X2,B1
BX3 X1*X2
SB5 X2+ ESCPA
NG X3,CPE IF BOTH ECS ADDRESSES
SX3 X2
TNG X1,(/SCPUEC/SFE1,UEC,/MONITOR/SSF20) IF SCP ECS
SB6 B5+X7 VALIDATE SCP EXTENDED CM ADDRESS
LE B5,B1,SSF20 IF ESCPA .LE. 1
SA1 B3
LX6 30
IX1 X1+X3 ABSOLUTE SCP CM ADDRESS
IX6 X6+X1 UCP/SCP
GT B6,B4,SSF20 IF ESCPA + FP .GT. FL
TNG X2,(/SCPUEC/SFE,UEC,/MONITOR/SSF11) IF UCP ECS
S401 SB6 S402 SET RETURN ADDRESS FOR *CWT*
EQ CWT CALCULATE WORD TRANSFER SIZE
S402 BX2 X4 SAVE LIST FLAG
NZ X5,S403 IF SF.READ
LX6 30 REVERSE PARAMETERS FOR WRITE
S403 MX5 30
BX1 -X5*X6 ADDRESS TO MOVE TO
LX6 30
BX0 -X5*X6 ADDRESS TO MOVE FROM
IX1 X0-X1 DIFFERENCE
SB6 S404 SET *MSM*/*MSR* RETURN ADDRESS
SX5 B4 SAVE TRANSFER SIZE
TJP (/CME/MSR,CME,/MONITOR/MSM,CMUMTR,/MONITOR/MSR)
* RESTORE REGISTERS. UPDATE REMAINING WORD COUNT AND
* SCP/UCP ADDRESSES FOR EXTENDED MODE READ/WRITE.
*
* (X2) = LIST PROCESSING FLAG.
* (X3) = SCP FL.
* (X5) = TRANSFER SIZE.
S404 TIC DCPC INVALIDATE CACHE ON OTHER CPU, IF PRESENT
BX4 X2 RESTORE LIST PROCESSING FLAG
SB4 X3 RESTORE SUBSYSTEM FL
SA1 B3 RA
SX2 X4 RELATIVE ADDRESS
IX2 X2+X1
ERX1 X2 GET FUNCTION PARAMETER WORD
MX2 -6
BX2 -X2*X1 FUNCTION CODE
MX0 -12
SX2 X2-XRED CHECK FOR EXTENDED MODE READ/WRITE
NG X2,SSF19 IF NOT EXTENDED READ/WRITE
LX1 18 DECREMENT WORD COUNT
IX6 X1-X5
BX3 -X0*X6 CHECK IF TRANSFER COMPLETE
SA2 T2
ERX2 X2 ADVANCE UCP AND SCP ADDRESSES
LX6 -18
IX7 X2+X5
SA2 B3 RA
SX0 X4 REL ADDRESS
IX2 X2+X0
EWX6 X2
MX0 -12
LX5 24
IX7 X7+X5
SA2 T2
TIC DCPC INVALIDATE CACHE ON OTHER CPU, IF PRESENT
EWX7 X2
MX2 1
ZR X3,SSF19 IF TRANSFER COMPLETE
LX2 -2
BX4 X4+X2 SET NO ADVANCE ON LIST
EQ SSF19 SET COMPLETE BIT AND NO ERROR
* FUNCTION 12 - RETURN STATUS OF USER JOB.
*
* ENTER HERE TO COMPLETE FUNCTION 46 (SF.CPID) SUBFUNCTION TO
* RETURN APPLICATION ACCESS LEVEL TO A PRIVILEGED USER.
* (B4) = 1.
S12 MX6 -4 RETURN LONG TERM CONNECTION, WAIT RESPONSE
SA1 SSFF GET UCP EJT ENTRY ADDRESS
SA1 X1+SCLE GET JOB ORIGIN
LX1 -48
BX1 -X6*X1
BX5 -X6*X2 1/LONG TERM CONNECTION, 3/WAIT RESPONSE
* CHECK FOR PRIVILEGED PROGRAM AND PRIVILEGED USER.
* A PRIVILEGED PROGRAM IS ONE WITH AN SSJ= ENTRY POINT
* OR A SUBSYSTEM. A PRIVILEGED USER IS A SYSTEM
* ORIGIN JOB OR A USER WITH SYSTEM ORIGIN PRIVILEGES
* WHEN THE SYSTEM IS IN *DEBUG* MODE.
BX7 X3
SX3 X1-SYOT CHECK FOR SYSTEM ORIGIN JOB
SA1 B3 RELATIVE ADDRESS
IX7 X7+X1 SCPA
SA2 A2+JCIW-SSCW CHECK FOR SUBSYSTEM IDENTIFICATION
SA1 A2+SEPW-JCIW CHECK FOR SSJ= ENTRY POINT
LX2 36
BX6 -X0*X2
SA2 A2+AACW-JCIW CHECK FOR SYSTEM ORIGIN PRIVILEGES
LX1 59-50
SX6 X6-LSSI-1
BX1 -X6+X1
PL X1,S121 IF NOT SUBSYSTEM AND NOT SSJ=
SX5 X5+40B SET PRIVILEGED PROGRAM STATUS
S121 ZR X3,S122 IF *SYOT* JOB
SA1 SSTL CHECK FOR *DEBUG* MODE
LX2 59-4
LX1 59-12
BX3 X1*X2 CHECK FOR *SYOT* PRIVILEGES AND *DEBUG*
BX3 -X3
S122 NG X3,S123 IF NOT PRIVILEGED USER
SX5 X5+20B SET PRIVILEGED USER STATUS
S123 EQ B4,B1,S124 IF SF.CPID SUBFUNCTION
SA1 B3 RA
SX2 X4 RELATIVE ADDRESS
IX2 X2+X1
ERX1 X2 RETURN STATUS INFORMATION
LX1 18
BX1 X0*X1
BX6 X1+X5
LX6 -18
EWX6 X2
TIC DCPC INVALIDATE CACHE ON OTHER CPU, IF PRESENT
EQ SSF19 SET COMPLETE BIT AND NO ERROR
* COMPLETE FUNCTION 46 (SF.CPID) WITH *FP* = 1.
S124 SB4 X5 SAVE PRIVILEGES
SB3 A2 SAVE PRIVILEGES ADDRESS
SB6 CPE SET ERROR ADDRESS FOR *CUI*
SB5 S125 SET RETURN ADDRESS FOR *CUI*
EQ CUI GET JSN
S125 SA2 B3+ RESTORE PRIVILEGES ADDRESS
MX6 24
BX6 X6*X1 JSN
SA1 A2+AALW-AACW ADD APPLICATION ACCESS LEVEL
MX3 -6
BX1 -X3*X1
BX6 X6+X1
SX5 B4 SET PRIVILEGES
LX5 6
BX6 X6+X5
EWX6 X7
EQ SSF19 SET COMPLETE BIT AND NO ERROR
* FUNCTION 16 - EXIT FROM SYSTEM CONTROL POINT STATUS.
S16 SB6 S16 SET RETURN ADDRESS FOR *RSI*
EQ RSI RETURN SUBSYSTEM IDENTIFICATION
* RETURN FROM *RSI* WITH SUBSYSTEM INFORMATION.
+ SX6 B1 CLEAR SUBSYSTEM ACTIVE FLAG
SB6 X3+11
LX6 B6
BX6 -X6*X2
SA1 B7+SSOW CHECK FOR OUTSTANDING CONNECTION
SA6 A2
SA3 B3
SX6 SSIW
IX3 X3+X6
BX6 X6-X6
BX5 -X0*X1
EWX6 X3 CLEAR SUBSYSTEM IDENTIFICATION WORD
ZR X5,SSF19 IF SCP HAS NO OUTSTANDING CONNECTIONS
SA5 B3+B1 ADDRESS OF RA+1
MX7 1
ERX3 X5 READ RA+1
LX7 40-59
BX7 X7+X3
SX2 4 SET *1MA* FUNCTION CODE
EWX7 X5
SX3 -B1 INDICATE NO DATA FOR MESSAGE BUFFER
SX5 B7 SCP CPA
EQ SSF9 CALL *1MA*
* FUNCTION 24 AND 26 - SET/CLEAR ROLLOUT ALLOWED.
S24 SX3 1S4 SET ROLLOUT ALLOWED BIT
ZR X2,SSF16 IF NOT CONNECTED
BX7 X3+X2
LX2 X1
SB5 B5+MXSF-SWPO/4+1
SA1 A2+STSW-SSCW
BX5 X5-X5 REPLY CODE COMPLETE, NO ERRORS
ZR B5,S241 IF SWAPOUT ALLOWABLE (SF.SWPO) REQUEST
LX1 59-29
NG X1,SSF14.1 IF USER JOB IN PROCESS OF ROLLOUT
BX6 -X3*X7 CLEAR ROLLOUT ALLOWED INDICATOR
SB5 60
SB5 B5-B6
LX6 B5
SA6 A2
EQ SSF12 COMPLETE REQUEST
S241 ZR X2,SSF16 IF NO WAIT RESPONSE INDICATORS SET
SA1 A2+FLSW-SSCW READ UCP STATUS WORD IN CP AREA
BX2 -X0*X1
SB5 60
SB5 B5-B6
LX7 B5
SA7 A2 SET ROLLOUT ALLOWED INDICATOR
MX6 -RMSK
AX1 RSHF
BX6 -X6*X1
LX6 6
ZR X2,SSF12 IF UCP HAS NO FL
SA1 RC *RCLP*
BX3 X1
SX1 B1
IX6 X6+X1
ERX1 X6 READ (RA+1)
BX3 X3-X1
AX3 36
NZ X3,SSF12 IF UCP NOT IN RECALL ON *CALLSS* REQUEST
SB5 5
MX1 1
LX1 -1 LONG TERM CONNECTION MASK
SX3 176B SUBSYSTEM ID MASK
BX1 X1+X3
MX3 5 ROLLOUT AND WAIT RESPONSE MASK
LX7 7
S242 BX7 -X1*X7 CLEAR LTC FLAG
PL X7,S243 IF NO ROLLOUT ALLOWED
BX7 -X3*X7 CLEAR ROLLOUT AND WAIT RESPONSE
S243 LX7 12
SB5 B5-B1
NZ B5,S242 IF MORE BYTES TO CHECK
NZ X7,SSF12 IF ANY WAIT RESPONSE INDICATORS SET
SX6 B1
SA1 A2+JCIW-SSCW CHECK IF UCP IS SUBSYSTEM
LX1 36
BX7 -X0*X1
SB5 X7-LSSI-1
PL B5,SSF12 IF UCP IS A SUBSYSTEM
SX5 A2-SSCW UCP CP ADDRESS
LX6 29-0
BX3 X3-X3
SA6 SSFG
EQ SSF9 CALL *1MA*
* FUNCTIONS 30 AND 32 - SET/CLEAR LONG TERM CONNECTION.
S30 SX6 1S3
BX7 X6*X2 LONG TERM CONNECTION INDICATOR
PL X5,S301 IF CLEAR LTC FUNCTION
SX3 B1+
ZR X1,SSF16 IF WAIT RESPONSE NOT SET
SX5 RC57 * CONNECTION PREVIOUSLY ESTABLISHED.*
NZ X7,SSF12 IF LTC ALREADY SET
EQ S302 CONTINUE
S301 SX3 -1
SX5 RC61 * CONNECTION NOT PREVIOUSLY ESTABLISHED.*
ZR X7,SSF12 IF LTC ALREADY CLEAR
S302 LX5 X1
SA1 B7+SSOW INCREMENT/DECREMENT CONNECTION COUNT
IX7 X1+X3
BX6 X6-X2 SET/CLEAR LONG TERM CONNECTION
SA7 A1
LX7 X6
NZ X5,S303 IF WAIT RESPONSE REMAINING FOR SCP
BX6 X0*X7 CLEAR CONNECTIONS TO THIS SCP
S303 SB5 60
SB5 B5-B6
LX6 B5 UPDATE *SSCW*
SA6 A2
EQ SSF19 COMPLETE
* FUNCTION 42 - EXTENDED LIST PROCESSING (2 WORDS PER
* LIST ENTRY).
S42 MX2 1 SET EXTENDED LIST PROCESSING FLAG
LX2 -1
BX4 X2+X4
* EQ S34 INITIATE LIST PROCESSING
* FUNCTION 34 - PROCESS LIST OF REQUESTS.
S34 SX5 RC40 * AT LEAST ONE ERROR ENCOUNTERED IN LIST.*
NG X4,SSF12 IF NESTED SF.LIST FUNCTION
SX5 RC42 * SCPA NOT WITHIN SUBSYSTEM FL.*
UX7 X7 EXTRACT FUNCTION PARAMETER WORD (FP)
MX2 1 SF.LIST PROCESSING IN PROGRESS FLAG
ZR X7,SSF12 IF NO ENTRIES IN LIST
SA1 B3+ RA
IX1 X3+X1
SX5 X3
ERX1 X1 READ FILE SF.XXXX PARAMETER WORD
BX4 X2+X4
MX6 -54
SA3 T1
BX7 X3
ERX3 X3 CLEAR LIST REPLY CODE
MX2 42 SAVE RELATIVE ADDRESS OF FIRST LIST ENTRY
BX6 -X6*X3
BX4 X2*X4
LX3 X1
BX5 -X2*X5
EWX6 X7
BX4 X4+X5
EQ SSF1 PROCESS FIRST FUNCTION IN LIST
* FUNCTION 46 - RETURN USER JOB IDENTIFICATION.
S46 SB5 X3+2 VALIDATE SCPA CM ADDRESS
GE B5,B4,SSF20 IF SCPA LWA .GE. FL
SB4 X7
ZR B4,S461 IF *FP* EQUALS 0
NE B4,B1,SSF19 IF *FP* NOT EQUAL TO 1
EQ S12 VALIDATE SCPA
S461 SA1 A2-SSCW+PFCW FIND USER FAMILY NAME
LX1 -12
MX2 -12
BX2 -X2*X1
CX1 X2,EST CONVERT EST ORDINAL TO OFFSET
TA1 X1+EQDE,EST READ EST ENTRY
BX1 -X0*X1
LX1 3
SA1 X1+PFGL READ FAMILY NAME FROM MST
MX2 42
BX6 X2*X1
SA1 B3 RA
IX5 X1+X3 ABSOLUTE SCPA
EWX6 X5 RETURN FAMILY NAME
SA1 A2+UIDW-SSCW USER NUMBER FROM CP AREA
SX3 B1
IX5 X5+X3
BX6 X2*X1
EWX6 X5 RETURN USER NUMBER
IX5 X5+X3
SA1 A2-SSCW+AACW GET ACCESS WORD
MX6 -1
LX1 0-18
BX6 -X6*X1 PROVIDE *NVE* ACCESS WORD BIT
EWX6 X5 RETURN VALIDATION WORD
EQ SSF19 SET COMPLETE BIT AND NO ERROR
SPACE 4,10
* THESE FUNCTIONS ARE PROCESSED BY 1MA.
* FUNCTION 02 - SEND DAYFILE MESSAGE AND/OR ABORT USER JOB.
* FUNCTION 16 - EXIT FROM SCP STATUS.
* FUNCTION 24 - SWAP OUT USER JOB.
*
* (B3) = (RA).
* (T1) = ABSOLUTE ADDRESS OF SF.XXXX FUNCTION.
* (X3) .LT. 0, IF NO DATA TO BE PASSED IN MESSAGE BUFFER.
* = 0, IF ONLY FUNCTION PARAMETER WORD AND UCP JOB
* IDENTIFIER TO BE PASSED IN MESSAGE BUFFER.
* = MESSAGE ADDRESS (RELATIVE TO SCP) IF MESSAGE TO
* BE PASSED IN MESSAGE BUFFER IN ADDITION TO
* FUNCTION PARAMETER WORD AND UCP JOB IDENTIFIER.
* (X5) = CP ADDRESS.
* (X4) = LIST PROCESSING FLAG.
SSF9 SA1 B3 ADDRESS OF RA
BX7 X1
SA1 T1
IX7 X1-X7 RELATIVE ADDRESS OF PARAMETER WORD
SA1 B7+JCIW GET SSID
LX1 -24
BX6 -X0*X1
SX0 X6-LSSI SET INDEX FOR *1MA*
LX0 18
BX0 X7+X0
NG X3,SSC15 IF NO DATA TO PASS
SB3 SSF9.1 SET *ACB* RETURN ADDRESS
EQ ACB ASSIGN COMMUNICATION BUFFER
SSF9.1 ZR X1,SXS IF NO BUFFER AVAILABLE
BX7 X1 SET PARAMETER WORD
SB6 X1
SA7 APQA
SA1 T1
SX7 B1
IX7 X1+X7
SA1 RA GET RA
SX4 X4 LIST PROCESSING FLAG
IX1 X4+X1 ABSOLUTE ADDRESS OF CURRENT SFCALL
ERX1 X1 CURRENT SFCALL FUNCTION
BX6 X1
SA6 B6+B1 STORE IN COMMUNICATION BUFFER
ERX4 X7 JOB IDENTIFIER
LX7 X4
SX2 B1+B1 SET *1MA* FUNCTION CODE
SA7 A6+B1
ZR X3,SSC15 IF NO MESSAGE FOR MESSAGE BUFFER
SA4 RA GET RA
IX7 X4+X3
ERX4 X7
SB6 MESL SET MESSAGE LENGTH
* SET MESSAGE INTO MONITOR COMMUNICATION BUFFER.
SSF10 BX6 X4
SB6 B6-B1
SA6 A6+B1
SX4 B1
IX7 X7+X4
ERX4 X7
NZ B6,SSF10 IF MORE DATA TO PASS
EQ SSC15 CALL *1MA*
SSF11 SX5 RC43 * UCP CM/ECS ADDRESS OUT OF RANGE.*
SB6 B1 INDICATE NO ERROR
MX0 -12
* EQ SSF12
* COMPLETE.
*
* (T1) = ABSOLUTE ADDRESS OF FUNCTION PARAMETER WORD.
* (X0) = -7777B.
* (X4) = LIST PROCESSING FLAG.
* (X5) = REPLY CODE.
* (B6) = -CPA, IF SF.ENDT REQUEST.
* = -1, IF FATAL ERROR.
* .GE. 0 IF NO ERROR CONDITION.
SSF12 SA3 T1
ERX1 X3 SET COMPLETION AND RETURN STATUS
MX6 -54
LX5 54 RC
SX2 B1
BX7 -X6*X1 CLEAR STATUS
SB5 X4 SAVE LAST FUNCTION ADDRESS
PL X4,SSF13 IF LIST PROCESSING NOT IN EFFECT
* PROCESS NEXT FUNCTION IN LIST.
BX3 X1
SX7 X4 RELATIVE ADDRESS
SA1 B3+ RA
IX7 X7+X1
SA7 T2
ERX1 X7 GET CURRENT ENTRY IN LIST
BX7 X3
LX3 X4
LX3 2
NG X3,SSF13 IF NO ADVANCE ON LIST FUNCTION
LX7 -6
BX3 X2*X3 GET EXTENDED LIST INDICATOR
IX3 X3+X2 LIST ADDRESS INCREMENT
IX7 X7+X3 POINT SCPA TO NEXT ENTRY IN LIST
LX7 6+18
IX7 X7-X2 DECREMENT NUMBER OF FUNCTIONS LEFT IN LIST
BX1 -X6*X1 CLEAR STATUS
IX4 X4+X3 ADVANCE LIST ABSOLUTE ADDRESS
BX3 -X0*X7 NUMBER OF ENTRIES REMAINING IN LIST
BX1 X5+X1 SET STATUS IN SF.XXXX
BX6 X1+X2 SET SF.XXXX COMPLETE BIT
LX7 -18
SX5 RC40 * AT LEAST ONE ERROR ENCOUNTERED IN LIST.*
SA1 T2
EWX6 X1
LX5 54
NG X6,SSF13 IF ERRORS ENCOUNTERED
SX5 B0+
ZR X3,SSF13 IF NO MORE ENTRIES IN LIST
SA1 SSFE CHECK IF MONITOR MODE TIME EXHAUSTED
TX3 X1,-SFFO SFCALL FUNCTION OVERHEAD
NG X3,SSF13 IF MONITOR MODE TIME EXHAUSTED
SA1 B3
SX3 X4
IX1 X3+X1 RA + RELATIVE LIST ADDRESS
ERX3 X1 READ NEXT ENTRY
SA1 T1
EWX7 X1 UPDATE SF.LIST FUNCTION WORD
PL B6,SSF1 IF NOT FATAL ERROR OR SF.ENDT
SSF13 BX6 X5+X7 INSERT REPLY CODE
BX6 X2+X6 SET COMPLETION BIT
SA1 T1
BX7 X7-X7
EWX6 X1
PL B6,MTRP IF NO ERROR
SA1 B3
SX2 B5
IX1 X2+X1
ERX1 X1 GET FUNCTION JUST PROCESSED
SB6 -B6
LE B6,B1,CPE IF FATAL ERROR
* THE *SF.ENDT* REQUEST ENTERS HERE TO CHECK TO SEE IF THE
* UCP IS IN RECALL ON THIS REQUEST.
SA3 B3+B1
EWX7 X3 CLEAR (RA+1)
SA2 RC CHECK *RCLP* REQUEST
BX7 X1
AX1 18+6
SA4 B6+FLSW READ UCP RA
SX3 X1 GET UCPA
BX2 X3+X2
BX3 -X0*X4
MX0 -RMSK
AX4 RSHF
BX4 -X0*X4
MX0 -12
LX4 6
ZR X3,MTRX IF NO UCP FL
LX0 18
SX3 B1
IX3 X3+X4
ERX3 X3 READ UCP (RA+1)
BX3 X0*X3
BX6 X2-X3
LX7 59-42
NZ X6,MTRX IF NO RECALL FOR THIS REQUEST
SA1 B6+STSW CHECK CPU STATUS
MX2 -3
LX1 3
BX2 -X2*X1
SX2 X2-XCPS
NZ X2,MTRX IF NOT *X* STATUS
SB3 MTRX SET *RCC* RETURN ADDRESS
EQ RCC RECALL CPU
SSF14 UX3,B5 X7 GET FUNCTION CODE
LX1 59-6
SX3 B5-SWPI
NZ X3,SSF14.1 IF NOT SF.SWPI
NG X1,SSF14.1 IF JOB ADVANCE SET
LX1 59-0-59+6
NG X1,SSF14.1 IF JOB EJT INTERLOCK SET
SX3 X2-SIJS+EXJS
LX1 0-59
LX3 1
SX7 X2-ROJS+EXJS
ZR X7,SSF14.2 IF UCP JOB STATUS = SCHEDULER ROLLOUT
SX7 X2-TOJS+EXJS
ZR X7,SSF14.2 IF UCP JOB STATUS = TIMED/EVENT ROLLOUT
SX7 X2-SOJS+EXJS
ZR X7,SSF14.2 IF UCP JOB STATUS = SCP ROLLOUT
SX5 RC46 *SWAP-IN REQUEST TEMPORARILY PROHIBITED.*
NZ X3,SSF12 IF UCP JOB STATUS NOT SCP ROLLIN
SSF14.1 SX5 RC44 * USER JOB SWAPPED OUT.*
SB6 B1+ INDICATE NO FATAL ERROR
EQ SSF12 SET REPLY CODE
SSF14.2 IX6 X1-X3 CHANGE JOB STATUS TO SCP ROLLIN
SA5 B3 GET RA
SA3 T1 GET ABSOLUTE ADDRESS OF PARAMETER BLOCK
SA2 B7+JCIW GET SUBSYSTEM IDENTIFICATION
SA6 A1
LX2 36
IX6 X3-X5 RELATIVE ADDRESS OF PARAMETER WORD
BX2 -X0*X2
LX6 12
SA1 A1+B1 CHANGE SCHEDULING DATA IN EJT ENTRY
ERRNZ SCHE-JSNE-1 CODE DEPENDS ON VALUE
MX3 30
BX6 X6+X2
BX1 X3*X1
BX6 X6+X1
SA6 A1
MX6 59
SA1 A1+SCLE-SCHE CLEAR FORCED ROLLOUT FLAG
LX6 53-0
SB5 B7 (B5) = CP ADDRESS FOR *SSC*
BX6 X6*X1
SA6 A1
EQ SSC18 EXIT
SSF15 SA1 SSFC CHECK CONNECTIONS REQUIRED FOR FUNCTION
UX2,B5 X7
LX1 B5
PL X1,SSF14.1 IF NO CONNECTION CHECKING NECESSARY
LX4 -18
SA2 X4+SSCW GET UCP CONTROL WORD
LX4 -18
SB6 X4 SHIFT COUNT
LX4 36
MX6 -4
LX2 B6
BX6 -X6*X2
ZR B6,SSF16 IF NO CONNECTION
NZ X6,SSF14.1 IF CONNECTIONS ESTABLISHED
SSF16 SX5 RC63 * UCP NOT ESTABLISHED WITH SUBSYSTEM.*
EQ SSF12 SET REPLY CODE
SSF18 SX5 RC45 * USER JOB IS NOT IN SYSTEM.*
EQ SSF12 SET REPLY CODE
SSF19 BX5 X5-X5 RC = COMPLETE, NO ERRORS
SB6 B1
EQ SSF12 COMPLETE REQUEST
SSF20 SX5 RC42 * SCP CM/ECS ADDRESS OUT OF RANGE.*
SB6 -B1 SET FATAL ERROR
MX0 -12
EQ SSF12 COMPLETE REQUEST
SSF21 SX5 RC41 * JOB IDENTIFIER INVALID.*
EQ SSF12 COMPLETE REQUEST
SSF22 SX5 RC67 * EXCESSIVE ACCUMULATOR INCREMENT.*
EQ SSF12 COMPLETE REQUEST
* TABLE OF FUNCTIONS WHICH REQUIRE SCPA VALIDITY CHECKING.
*
* 2 BITS PER SFCALL FUNCTION - 1/A, 1/R
* A IF SET, SCPA VALIDATION IS REQUIRED.
* R RESERVED.
*
* NOTE - INSTALLATION RESERVED SFCALL FUNCTIONS (70-76)
* SHOULD USE ADDITIONAL VALIDATION WORD.
SSFB BSS 0
POS 60-REGR SF.REGR
VFD 1/1
POS 60-READ SF.READ
VFD 1/1
POS 60-WRIT SF.WRIT
VFD 1/1
POS 60-LIST SF.LIST
VFD 1/1
POS 60-XLST SF.XLST
VFD 1/1
POS 60-CPID SF.CPID
VFD 1/1
POS 1
VFD 1/0 AVOID *PASS* INSTRUCTIONS
BSS 0 FORCE UPPER
* TABLE OF FUNCTIONS WHICH REQUIRE UCPA VALIDITY CHECKING.
*
* 2 BITS PER SFCALL FUNCTION - 1/A, 1/B
* A IF SET, UCPA VALIDATION IS REQUIRED.
* B IF SET, UCPA TO BE VERIFIED IS EXTENDED ADDRESS.
*
* NOTE - INSTALLATION RESERVED SFCALL FUNCTIONS (70-76)
* SHOULD USE ADDITIONAL VALIDATION WORD.
SSFC BSS 0
POS 60-ENDT SF.ENDT
VFD 1/1
VFD 1/0
POS 60-READ SF.READ
VFD 1/1
VFD 1/0
POS 60-WRIT SF.WRIT
VFD 1/1
VFD 1/0
POS 60-XRED SF.XRED
VFD 1/1
VFD 1/1
POS 60-XWRT SF.XWRT
VFD 1/1
VFD 1/1
POS 1
VFD 1/0 AVOID *PASS* INSTRUCTIONS
BSS 0 FORCE UPPER
SSFE CON 0 SFCALL REMAINING MONITOR MODE TIME
SSFF CON 0 UCP EJT ENTRY ABSOLUTE ADDRESS
SSFG CON 0 *STSW* FLAGS FOR FUNCTION 24
EJECT
SST SPACE 4,10
*** *SST*
* PROCESS FILE SWITCHING.
*
*T 18/ *SST*,1/ ,1/R,10/ ,12/ SS,18/ ADDR
*
* SS SUBSYSTEM IDENTIFICATION OF PARTNER (FCN = 1 OR 2).
*
*T ADDR 12/ FNTR,12/ FNTS,18/ RSV,6/ FCN,11/ ST,1/C
*T ADDR+1 24/ JSN,24/ 0,12/ JEJT
*
* C COMPLETION BIT.
* FCN FUNCTION CODE -
* CUSU = 1 CALLER UCP - SCP TO UCP SWITCH.
* CUUS = 2 CALLER UCP - UCP TO SCP SWITCH.
* CSUS = 3 CALLER SCP - UCP TO SCP SWITCH.
* CSSU = 4 CALLER SCP - SCP TO UCP SWITCH.
* FNTR FNT ORDINAL IN RECEIVER-S FNT (RETURNED PARAMETER).
* (SET TO PARTNER CPA BY *CPUMTR* FOR *1MA*.)
* FNTS FNT ORDINAL IN SOURCES FNT.
* JEJT PARTNERS EJT ORDINAL (FCN = 3 OR 4).
* JSN JOB SEQUENCE NUMBER FOR PARTNER (FCN = 3 OR 4).
* RSV RESERVED FOR CDC.
* ST RETURN STATUS CODE -
* 00 SWITCH COMPLETED NORMALLY.
* 01 FILE BUSY.
* 02 PARTNER ROLLED OUT.
* 03 INCORRECT FILE TYPE.
* 04 PARTNERS IDENTIFICATION NOT KNOWN.
* 05 NO SPACE IN RECEIVER-S NFL.
* 06 LOCAL FILE LIMIT (MAXIMUM NFL).
* 07 FILE *FNTS* NOT FOUND.
* GET FUNCTION CODE.
SST SB6 X5 CHECK *ADDR* WITHIN RANGE
LE B6,B1,CPE IF *ADDR* .LE. 1
MX2 -6
GT B6,B4,CPE IF *ADDR* .GE. FL
SX3 X5
SA1 B3 RA
IX6 X3+X1
ERX1 X6 GET (ADDR)
SA6 T1 SAVE ABSOLUTE ADDRESS OF PARAMETER BLOCK
LX1 59-0
NG X1,CPE IF COMPLETION BIT ALREADY SET
LX1 49 VALIDATE FUNCTION CODE
BX3 -X2*X1
SB5 X3-FCNM
ZR X3,CPE IF *FCN* INVALID
SX7 X3-1 FUNCTION CODE - 1
SX3 X3-CSUS
PL B5,CPE IF *FCN* INVALID
PL X3,SST2 IF CALL FROM SCP
* PROCESS REQUEST FROM UCP TYPE CALLER.
LX5 -18 GET SUBSYSTEM CODE
BX1 -X0*X5
LX5 18
SX2 X1-LSSI-1
NG X2,CPE IF NOT SUBSYSTEM
SA2 B7+AACW CHECK VALIDATION OF CALLER AS UCP
LX2 59-11
BX4 X1 SAVE SSID
SB3 SST1 SET EXIT ADDRESS FOR *RSC*
NG X2,RSC IF VALIDATED, RETURN SUBSYSTEM CONTROL
EQ CPE UNAUTHORIZED UCP
* RETURN FROM *RSC* WITH -
* (A2) SUBSYSTEM CPA + STSW.
* (B7) CALLER-S CPA.
* (X0) -7777B.
* (X3) SUBSYSTEM RA.
* (X4) SUBSYSTEM ID.
* (X6) SUBSYSTEM FL.
* (X7) FUNCTION CODE - 1.
* *RSC* ERROR EXIT ADDRESSES -
+ VFD 12/SST7-SST1,18/SST7,12/SST10-SST1,18/SST1
SST1 SX1 SSIW CHECK SUBSYSTEM IDENTIFICATION
IX1 X3+X1
ERX1 X1
SB6 A2-STSW SCP CPA
BX1 X1-X4 COMPARE WITH SUBSYSTEM IDENTIFICATION
SX2 SSCR
IX2 X2+X3
ERX3 X2 SUBSYSTEM RECEIVING BUFFER
BX1 -X0*X1
LX3 1
NZ X1,CPE IF SUBSYSTEM NOT INITIALIZED
SB4 B7 UCP CPA
SA1 B4+JCIW CHECK IF UCP IS SUBSYSTEM
LX1 36
PL X3,SST1.1 IF NO RESTRICTIONS ON UCP ACCESS
* VALIDATE PERMISSION STATUS.
SA2 B4+SEPW READ SPECIAL ENTRY POINT WORD
BX1 -X0*X1
LX2 59-50
NG X2,SST1.1 IF SSJ= ENTRY POINT
ZR X1,CPE IF NOT AUTHORIZED UCP
SST1.1 SA3 T1 GET ABSOLUTE ADDRESS OF PARAMETER BLOCK
SX2 B1
IX2 X2+X3
SA1 B6+TFSW GET SCP EJT ORDINAL
LX1 12
BX7 -X0*X1
EWX7 X2
EQ SST3 CONTINUE PROCESSING
* PROCESS REQUEST FROM SCP TYPE CALLER.
* ENSURE THAT CALLER IS SUBSYSTEM AND
* THAT SUBSYSTEM IDENTIFICATION WORD MATCHES CALLER.
SST2 SA2 B7+JCIW CHECK SUBSYSTEM CALL
LX2 -24 GET SUBSYSTEM IDENTIFICATION
BX4 -X0*X2
SA1 RA
SX7 SSIW READ SUBSYSTEM IDENTIFICATION WORD
IX1 X1+X7
ERX1 X1
BX7 -X0*X1 SUBSYSTEM CODE
BX7 X4-X7
SX2 X4-LSSI-1
NZ X7,CPE IF SUBSYSTEM NOT INITIALIZED
NG X2,CPE IF CALLER IS NOT A SUBSYSTEM
* VALIDATE *JSN* AND *JEJT* FROM (*ADDR*+1).
SB6 CPE SET ERROR RETURN FOR *CUI*
SB5 SST2.1 SET NORMAL RETURN FOR *CUI*
EQ CUI CHECK UCP IDENTIFICATION
SST2.1 BX7 X6 SAVE JOB SEQUENCE NUMBER MATCH STATUS
SX6 RC04 * PARTNERS IDENTIFICATION NOT KNOWN.*
SB4 X5 UCP CPA
NZ X7,SST6 IF JOB SEQUENCE NUMBER MISMATCH
SX6 RC02 * PARTNER ROLLED OUT.*
NZ X2,SST6 IF UCP NOT AT CONTROL POINT
SA2 CMCL CHECK FOR STORAGE MOVE
AX2 48
LX2 7
BX2 X2-X5
ZR X2,SXS IF UCP MOVING, SET *X* STATUS
SA2 X5+STSW
SB6 X5 PARTNERS CPA
LX2 59-24
NG X2,SST6 IF ROLLOUT REQUESTED ON UCP
* CONTINUE PROCESSING ALL FUNCTIONS.
*
* (X3) = ABSOLUTE ADDRESS OF STATUS WORD.
* (X4) = SSID.
* (B4) = UCP CPA.
* (B6) = CPA OF PARTNER.
* (B7) = CPA OF CALLER.
* CHECK LONG TERM CONNECTION.
SST3 BX2 X4 SSID
BX5 X3 SAVE REGISTERS
SB5 B6
SB3 B4
SA3 B4+SSCW
SB4 SST3.1 RETURN ADDRESS FOR *CSC*
EQ CSC CHECK SUBSYSTEM CONNECTION
SST3.1 ZR B6,CPE IF NOT CONNECTED
SA3 A3
LX3 B6
SB6 B5
SB4 B3
LX3 59-3
PL X3,CPE IF NO LONG TERM CONNECTION
BX3 X5
ERX2 X3 READ (ADDR)
* VALIDATE *FNTS* ADDRESS.
LX2 59-12
SB5 B6 GET PARTNER FL STATUS WORD
NG X2,SST4 IF FCN = 1 OR 3
SB5 B7+ GET CALLER FL STATUS WORD
SST4 LX2 59-35-59+12
SA1 B5+FLSW
BX4 -X0*X2 FNTS
LX1 12
SB4 X4
BX2 -X0*X1 NFL SIZE
LX2 6
SB5 X2
MX6 -RMSK
GE B4,B5,CPE IF *FNTS* OUT OF RANGE
SB5 FNTN
LE B4,B5,CPE IF *FNTS* BELOW RANGE
LX1 -24 SHIFT TO RA
BX1 -X6*X1
LX1 6
IX4 X1-X4 READ *FNTS*
SX6 RC07 * FILE NOT FOUND.*
ERX2 X4
ZR X2,SST6 IF FNT EMPTY
* VALIDATE *FNTS* FILE TYPE.
MX6 -6
LX2 0-6
BX1 -X6*X2
SB4 X1+
SX6 RC03
SB5 59
SA1 SLFT SET VALID FILE TYPES MASK
SB4 B5-B4 SET SHIFT BIAS
LX1 X1,B4
PL X1,SST6 IF FILE TYPE NOT VALID
* CHECK FILE BUSY STATUS.
R= X6,RC01 * FILE BUSY.*
IX4 X4+X6
ERRNZ RC01-1
ERX1 X4
LX1 59-0
PL X1,SST6 IF FILE *FNTS* BUSY
LX1 1 SET FILE BUSY
BX7 -X6*X1
ERRNZ RC01-1
R= X6,RC00 NORMAL RETURN
ERX2 X3 GET FUNCTION CODE
LX2 59-12
NG X2,SST5 IF FCN = 1 OR 3
EWX7 X4 UPDATE FST
BX7 X4 SAVE FST ADDRESS FOR *1MA* CALL REJECT
SA7 SSTA
SST5 ERX2 X3 GET PARAMETER WORD
SX1 B6 PARTNER-S CP ADDRESS
MX7 -48
LX1 -12
BX2 -X7*X2 CLEAR *FNTR* FIELD
BX7 X0*X2 CLEAR STATUS FIELD
BX7 X1+X7 INSERT CP ADDRESS (FOR *1MA*)
BX7 X6+X7 INSERT RETURN STATUS
ZR X6,SST8 IF NO ERROR CODE RETURNED
SX6 B1 SET COMPLETION BIT
BX6 X6+X7
EWX6 X3
BX7 X7-X7 CLEAR RA+1
EQ MTRP RETURN TO CALLER
* ERROR PROCESSING.
SST6 SB6 B0 NO *FNTR* (CPA) ENTRY ON ERROR
LX6 1
EQ SST5 COMPLETE PROCESSING
SST7 EQ CPE ERROR EXIT FROM *RSC*
* CALL *1MA* TO PROCESS FILE SWITCH.
SST8 EWX7 X3
SB3 SST8.1 *ACB* RETURN ADDRESS
EQ ACB ASSIGN COMMUNICATION BUFFER
SST8.1 ZR X1,SST9 IF NO BUFFER AVAILABLE
BX6 X1 SET PARAMETER WORD
SA7 X1+B1 SET (*ADDR*) IN BUFFER
SA6 APQA
SA5 RA1 GET (RA+1)
ERX5 X5
SX1 B1 GET (*ADDR*+1)
IX3 X3+X1
ERX1 X3
MX0 -18
BX0 -X0*X5 EXTRACT *ADDR*
BX7 X1
SA7 A7+B1 SET (*ADDR*+1) IN BUFFER
SX5 B7+ SET CPA
SX2 3 *1MA* FUNCTION CODE
EQ SSC15 CALL *1MA*
SST9 ERX2 X4 RESET FILE NOT BUSY
SX6 B1
BX6 X2+X6
EWX6 X4
SST10 EQ SXS SET *X* STATUS
* *SST* REQUEST LEGAL FILE TYPES.
QFFT DECMIC QFFT QUEUE FILE
PMFT DECMIC PMFT DIRECT ACCESS PERMANENT FILE
LOFT DECMIC LOFT LOCAL FILE
LIFT DECMIC LIFT
SLFT CON 1S"QFFT"+1S"PMFT"+1S"LOFT"+1S"LIFT"
SSTA CON 0 FST ADDRESS
TITLE SCP SUBROUTINES.
CSC SPACE 4,20
** CSC - CHECK SUBSYSTEM CONNECTION.
*
* CSC WILL DETERMINE IF THE UCP IS CURRENTLY CONNECTED TO
* THE SPECIFIED SUBSYSTEM AS A UCP, BASED ON WORD *SSCW*.
*
* ENTRY (X0) = -7777B.
* (X2) = SSID.
* (X3) = *SSCW* WORD TO CHECK.
* (B4) = RETURN ADDRESS.
*
* EXIT (B6) = SHIFT COUNT TO SHIFT *SSCW* SO THAT THE
* BYTE FOR THE SPECIFIED SUBSYSTEM IS IN THE
* BOTTOM. IF THE UCP IS NOT CONNECTED TO THE
* SPECIFIED SUBSYSTEM, THE SHIFT COUNT IS
* FOR AN EMPTY BYTE, IF THERE IS ONE.
* (B6) = 0, IF THE UCP IS CURRENTLY CONNECTED TO 5
* SCP-S, NONE OF WHICH IS THE SPECIFIED ONE.
*
* USES X - 1, 2, 3, 6.
* B - 6.
CSC BSS 0 ENTRY
SB6 60 INITIALIZE SHIFT COUNT
SX6 B0+
SX2 X2-LSSI SUBSYSTEM INDEX
CSC1 BX1 -X0*X3
LX3 -12
ZR X1,CSC3 IF NO CONNECTION IN THIS BYTE
AX1 6
IX1 X1-X2
ZR X1,/MONITOR/RB4 IF SPECIFIED SUBSYSTEM
CSC2 SB6 B6-12
NZ B6,CSC1 IF MORE TO CHECK
SB6 X6
JP B4 RETURN
CSC3 NZ X6,CSC2 IF EMPTY BYTE ALREADY FOUND
SX6 B6+
EQ CSC2 CONTINUE
CUI SPACE 4,25
** CUI - CHECK UCP IDENTIFICATION.
*
* ENTRY (B5) = RETURN ADDRESS IF NO ERROR.
* (B6) = RETURN ADDRESS IF INVALID EJT ORDINAL.
* (X0) = -7777B.
* (T1) = ABSOLUTE ADDRESS OF PARAMETER BLOCK.
*
* EXIT (A1) = ABSOLUTE ADDRESS OF UCP EJT ENTRY.
* (X0) = -7777B.
* (X1) = *JSNE* WORD OF UCP EJT ENTRY.
* (X2) = UCP JOB STATUS - EXJS (IF A *DMP=* PROGRAM IS
* EXECUTING AND THE *DMP=* FLAG IS NOT SET IN THE
* REQUEST, THE UCP JOB STATUS WILL BE FLAGGED AS
* MXJS TO INDICATE JOB ROLLED OUT).
* (X3) = ABSOLUTE ADDRESS OF PARAMETER BLOCK.
* (X5) = UCP CONTROL POINT ADDRESS IF (X2) = 0.
* (X6) .NE. 0 IF SPECIFIED JSN DOES NOT MATCH JSN IN
* SPECIFIED EJT ORDINAL OR IF THE *DMP=* FLAG IS
* SET AND A *DMP=* PROGRAM IS NOT EXECUTING.
*
* USES A - 1, 2, 3.
* B - 6.
* X - 0, 1, 2, 3, 5, 6.
CUI BSS 0 ENTRY
SA3 T1 GET UCP IDENTIFICATION
SX1 B1
IX1 X3+X1
ERX2 X1
BX1 -X0*X2 UCP EJT ORDINAL
TX6 X1,-EJTM
ZR X1,RB6 IF NO EJT ORDINAL
PL X6,RB6 IF EJT ORDINAL EXCEEDS MAXIMUM
CX6 X1,EJT CONVERT EJT ORDINAL TO OFFSET
TA1 X6+JSNE,EJT GET UCP EJT ENTRY
MX6 24
BX0 X2
BX2 X6*X2 JOB SEQUENCE NUMBER FROM CALL
SB6 B5 SET NORMAL RETURN ADDRESS
BX5 X6*X1 JOB SEQUENCE NUMBER FROM EJT ENTRY
ZR X5,CUI1 IF EJT ENTRY NOT IN USE
BX6 X2-X5
SA2 A1+SCHE-JSNE
NZ X6,CUI1 IF JOB SEQUENCE NUMBER DOES NOT MATCH
LX0 59-12
LX2 59-32
BX0 X0-X2
MX6 -6
PL X0,CUI0.1 IF NO *DMP=* CONFLICT
PL X2,CUI1 IF *DMP=* REQUEST ON NON-*DMP=* PROGRAM
SX2 MXJS INDICATE *DMP=* ROLLOUT STATUS
EQ CUI0.2 SET EXIT CONDITIONS
CUI0.1 LX2 0-12-59+32
BX0 -X6*X1
BX5 -X6*X2 CP NUMBER IF *EXJS* STATUS
AX2 X0,B1 JOB STATUS
CUI0.2 LX5 7 CP ADDRESS IF *EXJS* STATUS
SX2 X2-EXJS
SX6 B0 SET NO ERROR
CUI1 MX0 -12
JP B6 RETURN
CWT SPACE 4,10
** CWT - CALCULATE WORD TRANSFER SIZE (CM OR ECS).
*
* THE ENTIRE BLOCK WILL BE TRANSFERRED IF .LE. *MAXB* WORDS
* ARE REQUESTED, IF THE REMAINING *SFCALL* MONITOR MODE TIME
* IS SUFFICIENT, OR IF THE REQUESTED DATA TRANSFER SIZE IS
* WITHIN 40B WORDS OF THE AMOUNT THAT CAN BE TRANSFERRED IN
* THE REMAINING TIME. OTHERWISE, THE DATA TRANSFER SIZE WILL
* BE SET TO THE MAXIMUM OF *MAXB* AND THE REMAINING TIME
* TRANSFER SIZE (IN MULTIPLE OF 10B).
*
* ENTRY (X7) = WORD COUNT.
* (B6) = EXIT ADDRESS IF CM TRANSFER.
* = COMPLEMENT OF EXIT ADDRESS IF ECS TRANSFER.
* (B4) = SCP FL.
* (SSFE) = SFCALL REMAINING MONITOR MODE TIME.
*
* EXIT (X3) = SCP FL.
* (B4) = WORD TRANSFER SIZE.
* (SSFE) = MONITOR MODE TIME REMAINING AFTER TRANSFER.
*
* USES X - 1, 2, 3, 7.
* A - 1, 7.
* B - 4, 6.
CWT SX3 B4+ SAVE SCP FL
SA1 SSFE GET REMAINING MONITOR MODE TIME
TB4 SFCS SET CM TRANSFER RATE SHIFT
PL B6,CWT1 IF CM TRANSFER
TB4 SFES SET ECS TRANSFER RATE SHIFT
SB6 -B6 SET RETURN ADDRESS
CWT1 SX2 X7-MAXB-1
NG X2,CWT2 IF .LE. *MAXB* WORDS TO BE TRANSFERRED
AX1 B4 TRANSFER SIZE FOR REMAINING TIME
AX1 3 ROUND DOWN TO MULTIPLE OF 10B
LX1 3
IX2 X7-X1
NG X2,CWT2 IF TIME TO COMPLETE TRANSFER
AX2 5
ZR X2,CWT2 IF WITHIN 40B WORDS OF COMPLETION
SX7 MAXB TRANSFER AT LEAST *MAXB* WORDS
IX2 X1-X7
NG X2,CWT2 IF TRANSFER MINIMUM WORDS
LX7 X1
CWT2 BX2 X7 CALCULATE TRANSFER TIME
SA1 A1
LX2 B4
SB4 X7 SET TRANSFER SIZE
IX7 X1-X2 DECREMENT REMAINING MONITOR MODE TIME
SA7 A1
JP B6 RETURN
SCB SPACE 4,10
** SCB - SET COMPLETION BIT SPECIFIED BY *ADDRESS*.
*
* SCB SETS THE COMPLETION BIT FOR AN SF.XXXX FUNCTION OR
* AN SF.XXXX FUNCTION WITHIN A LIST.
*
* ENTRY (A2) = SUBSYSTEM *STSW* WORD.
* (A5) = PPU OR ADDRESS.
* (X3) = SUBSYSTEM RA.
* (X5) = PPU OUTPUT REGISTER.
* (B3) = SUBSYSTEM FL.
* (B5) = RELATIVE ADDRESS OF COMPLETION BIT WORD.
*
* EXIT TO *PPRX* OR *PPR1* TO COMPLETE PP REQUEST.
SCB GE B5,B3,SCB3 IF WORD TO SET COMPLETE OUTSIDE SCP FL
AX5 18
SX4 B1
MX0 -6
SX1 B5
IX7 X3+X1
ERX1 X7 SET COMPLETION BIT
SA7 T1 SAVE ABSOLUTE ADDRESS
BX5 -X0*X5 REPLY CODE
BX7 X4+X1
SX6 X1-LIST CHECK LIST PROCESSING IN EFFECT
MX2 -54
BX0 -X0*X6
LX5 -6
BX1 -X2*X7
LX7 -6
BX6 X5+X1
ZR X0,SCB0 IF LIST PROCESSING IN EFFECT
SX0 X0-XLST+LIST
NZ X0,SCB2 IF NOT EXTENDED LIST PROCESSING
SX0 B1+
SCB0 ZR X5,SCB1 IF NO ERROR ENCOUNTERED
SX6 RC40 * AT LEAST ONE ERROR ENCOUNTERED IN LIST.*
LX6 54
BX1 X1+X6
SCB1 SB6 X7
BX5 X4+X5 REPLY CODE AND COMPLETION BIT FOR SF.XXXX
GE B6,B3,SCB3 IF WORD TO SET COMPLETE OUTSIDE SCP FL
SX6 B6
IX6 X6+X3
ERX3 X6 FUNCTION PARAMETER WORD
SA6 T2 SAVE ABSOLUTE ADDRESS
IX0 X0+X4 LIST ADDRESS INCREMENT
LX0 6
BX2 -X2*X3
IX6 X0+X1 POINT TO NEXT FUNCTION IN LIST
BX7 X2+X5 SET COMPLETION BIT AND REPLY CODE
LX4 42
SA3 T2
EWX7 X3
IX6 X6-X4 DECREMENT NUMBER OF FUNCTIONS IN LIST
SCB2 BX7 X7-X7 CLEAR OUTPUT REGISTER, NO ERRORS
SA3 T1
EWX6 X3
EQ PPR1 EXIT TO STORE OUTPUT REGISTER
* EXIT FOR INVALID SCP PARAMETERS. (ALSO ENTERED HERE
* FROM *SSR*.)
SCB3 SA2 A2-STSW+TFSW GET SCP EJT ORDINAL
MX0 -12
LX2 12
BX2 -X0*X2
CX1 X2,EJT CONVERT EJT ORDINAL TO OFFSET
TA1 X1+JSNE,EJT GET SCP JOB SEQUENCE NUMBER
SX7 X2+5*10000B STATUS = SCP INVALID PARAMETERS
MX0 24
BX1 X0*X1
BX7 X7+X1
LX7 24
SA7 A5 STORE PP OUTPUT REGISTER
EQ PPRX EXIT
SSR SPACE 4,10
** SSR - SET SPECIAL RECEIVING BUFFER.
*
* SSR SETS UP A DATA TRANSFER TO THE SCP RECEIVING BUFFER
* POINTED TO BY *SSCR* WITHIN THE SUBYSTEM FL.
*
* ENTRY (A2) = SUBSYSTEM *STSW* WORD.
* (A5) = PPU OR ADDRESS.
* (X0) = -7777B.
* (X5) = PPU OUTPUT REGISTER.
* (X3) = SUBSYSTEM RA.
* (X7) = NOT READY FOR DATA STATUS (2).
* (B3) = SUBSYSTEM FL.
*
* EXIT (X7) = NEW PP OUTPUT REGISTER.
* TO *HNG* IF WORD COUNT EXCEEDS MESSAGE BUFFER LENGTH.
* TO *PPR1* IF NOT READY FOR DATA.
* TO *SCB3* IF BUFFER ADDRESS OUTSIDE SCP FL.
* TO *TDA2.3* IF TRANSFER COMPLETE.
* TO *TDA3* IF IDENTIFICATION WORD NOT INITIALIZED.
SSR SX1 SSIW CHECK SUBSYSTEM IDENTIFICATION WORD
SX2 X1+B1 SUBSYSTEM RECEIVING BUFFER POINTER WORD
ERRNZ SSIW+1-SSCR CODE DEPENDS ON VALUE
IX1 X1+X3
MX4 6 EXTRACT WORD COUNT
ERX1 X1
LX5 -24 COMPARE SUBSYSTEM IDENTIFICATIONS
BX4 X4*X5
BX5 X1-X5
LX4 6
IX1 X2+X3
ERX1 X1
SB5 X4
BX2 -X0*X5
LX5 X1
SX1 B1
SX4 X4-7 VALIDATE THE WORD COUNT
NZ X2,TDA3 IF IDENTIFICATION WORD NOT INITIALIZED
PL X4,HNG IF WC .GT. MESSAGE BUFFER
SA4 A5+B1
LX4 59-20
PL X4,SSR1 IF NOT SUBSYSTEM ABORTED *TDAM* CALL
SA4 RC CHECK RCLP REQUEST
IX1 X3+X1
ERX1 X1 RA+1 OF SCP RECEIVING NOTIFICATION
BX6 X4-X1
AX6 18 COMPARE SUBSYSTEM IDENTIFIERS
SA4 A5+2
BX6 X6-X4
SX1 X1 ADDRESS OF RECALL WORD
NZ X6,SSR1 IF RECEIVER NOT IN RECALL ON ABORTED SCP
IX4 X3+X1 ABSOLUTE ADDRESS OF RECALL WORD
ERX1 X4
SX6 ES1+1 SUBSYSTEM NOT PRESENT STATUS
BX6 X1+X6
EWX6 X4
TIC DCPC INVALIDATE CACHE ON OTHER CPU, IF PRESENT
SSR1 NG X5,PPR1 IF NOT READY FOR DATA
SB6 X5
MX6 1
ZR B6,PPR1 IF NOT READY FOR DATA
LE B6,B1,SCB3 IF BUFFER ADDRESS INVALID
SX0 X5+
SB6 X5+B5 CHECK ADDRESS OUT OF RANGE
IX0 X0+X3 ABSOLUTE ADDRESS OF RECEIVING BUFFER
GT B6,B3,SCB3 IF BUFFER ADDRESS OUTSIDE SCP FL
SA4 A5+B1 MOVE 2 WORDS OF DATA TO RECEIVING BUFFER
BX6 X6+X5 SET CPU INTERLOCK BIT
LX7 X4
SA4 A4+B1
EWX7 X0
BX7 X4
SX1 B1
IX0 X1+X0
SB5 B5-2
EWX7 X0
LE B5,B0,SSR3 IF ALL WORDS MOVED
SSR2 SA4 A4+B1 MOVE REMAINING WORDS
IX0 X0+X1
SB5 B5-1
BX7 X4
EWX7 X0
GT B5,B0,SSR2 IF MORE WORDS TO MOVE
SSR3 BX7 X7-X7
SX1 SSCR
IX1 X1+X3
TIC DCPC INVALIDATE CACHE ON OTHER CPU, IF PRESENT
EWX6 X1 SUBSYSTEM RECEIVING BUFFER POINTER WORD
EQ TDA2.3 RESTART SCP CPU
ENDBLK
BLOCK SCPUEC,(SCP FACILITY ECS INTERFACE.)
SFE SPACE 4,10
** SFE - SFCALL SF.READ/SF.WRIT ECS TRANSFER.
*
* SF.READ - TRANSFER DATA FROM UCP CM TO SCP ECS (WRITE ECS)
* OR TRANSFER DATA FROM UCP ECS TO SCP CM (READ ECS).
*
* SF.WRIT - TRANSFER DATA FROM SCP CM TO UCP ECS (WRITE ECS)
* OR TRANSFER DATA FROM SCP ECS TO UCP CM (READ ECS).
*
* ENTRY (A0) = CPU NUMBER (0 OR 1).
* (X0) = -7777B.
* (X2) = EXTENDED ADDRESS WORD.
* (X4) = LIST PROCESSING FLAG.
* (X5) = 0, IF SF.WRIT OR SF.XWRT, .LT. 0 IF SF.READ
* OR SF.XRED.
* (X6) = UCP/SCP ABSOLUTE CM ADDRESS.
* (X7) = WORD COUNT.
* ((B3)) = SCP RA.
* (B4) = SCP FL.
* (B7) = SCP CPA.
*
* EXIT TO */MONITOR/S404* IF ECS TRANSFER COMPLETE.
* (A0) = CPU NUMBER.
* (X2) = LIST PROCESSING FLAG.
* (X3) = SCP FL.
* (X5) = TRANSFER SIZE.
*
* TO */MONITOR/CPE* IF NOT IN CPU 0 FOR ECS TRANSFER.
* (A0) UNCHANGED.
*
* TO */MONITOR/SSF11* IF UCP ECS ADDRESS ILLEGAL.
* (A0), (B4) UNCHANGED.
*
* TO */MONITOR/SSF20* IF SCP ECS ADDRESS ILLEGAL.
* (A0), (B4) UNCHANGED.
*
* TO */MONITOR/SSF12* IF ECS ABORT OR PARITY ERROR.
* (A0), (X0), (B4) RESTORED.
* (X5) = REPLY CODE.
* (B6) .GT. 0 TO INDICATE NOT FATAL OR FORCED ERROR.
*
* USES A - 0, 1.
* B - 4, 5, 6.
* X - ALL.
*
* CALLS /MONITOR/CWT.
*
* MACROS PER, RUE, WUE.
* PROCESS UCP ECS TO/FROM SCP CM TRANSFER.
SFE LX4 -18 GET UCP CONTROL POINT ADDRESS
SA1 X4+ECSW GET UCP ECS RA AND FL
LX4 18
LX2 -24
SB5 /MONITOR/SSF11-/MONITOR/SSF20 SET ADDRESS ERROR EXIT
EQ SFE2 VALIDATE UCP ECS ADDRESS
* PROCESS UCP CM TO/FROM SCP ECS TRANSFER.
SFE1 SB5 B0 SET ADDRESS ERROR EXIT BIAS
SA1 B7+ECSW GET SCP ECS RA AND FL
BX5 -X5 SET WE FOR SF.READ, RE FOR SF.WRIT
* VALIDATE SCP OR UCP ECS ADDRESS.
SFE2 BX3 -X0*X1 SCP OR UCP ECS FL/*UEBS*
LX1 -12
BX1 -X0*X1 SCP OR UCP ECS RA/*UEBS*
TLX3 9,UESC
MX0 -24
TLX1 9,UESC
BX2 -X0*X2 SCP OR UCP RELATIVE ECS ADDRESS
IX3 X3-X2 CHECK BLOCK LWA .GT. ECS FL
IX0 X2+X1 SCP OR UCP ABSOLUTE ECS ADDRESS
SB6 SFE3 SET RETURN ADDRESS FOR *CWT*
IX3 X3-X7
SB6 -B6 INDICATE ECS TRANSFER
PL X3,/MONITOR/CWT IF ECS ADDRESS LEGAL
JP B5+/MONITOR/SSF20 EXIT TO SET ERROR CODE
SFE3 SB5 A0 SAVE CPU NUMBER
SA0 X6 SET SCP OR UCP CM ADDRESS
TNZB5 /MONITOR/CPE,NOTDCE IF NOT CPU 0
MX2 -24
BX0 -X2*X0
SB6 SFE5 SET RETURN ADDRESS
BX6 -X2*X6
LX6 30
BX0 X6+X0
BX2 X4 SAVE LIST PROCESSING FLAG
PL X5,SFE4 IF WRITE ECS
RUE MONITOR READ (B4) WORDS FROM USER ECS
PER /SCPUEC/SFE6,/ECS/PER IF PARITY ERROR
EQ SFE5 RESTORE REGISTERS AND EXIT
SFE4 WUE MONITOR WRITE (B4) WORDS TO USER ECS
PER /SCPUEC/SFE6,/ECS/PER IF PARITY ERROR
SFE5 SA0 B5 RESET CPU NUMBER
SX5 B4 SET TRANSFER LENGTH
EQ /MONITOR/S404 EXIT
SFE6 SX5 RC56 * ECS ABORT/PARITY ERROR.*
SA0 B5 RESET CPU NUMBER
MX0 -12
SB4 X3 RESTORE SCP FL
SB6 B1 INDICATE NO ERROR
EQ /MONITOR/SSF12 SET COMPLETE BIT AND ERROR CODE
ENDBLK
BLOCK SUBCP,(SUB-CONTROL POINT PROCESSING.),MONITOR
BCE SPACE 4,15
** BCE - BEGIN CONTROL POINT EXECUTIVE.
*
* ENTRY (B7) = CONTROL POINT ADDRESS.
*
* EXIT TO *ESC0*.
*
* USES X - 0, 2, 4.
* A - 2.
* B - 3.
*
* CALLS CPT.
BCE SB3 BCE1 *CPT* RETURN ADDRESS
TJP (/NVE/CPT,NVE,/CME/CPT,CME,/MONITOR/CP76,CP176,/MONITOR
,/CPT)
BCE1 SA2 B7+STSW
MX4 1
SX0 B1 SET CP EXEC AS NEXT JOB
LX4 56-59 SUB-CP BIT
EQ ESC0 END SUB-CONTROL POINT
ESC SPACE 4,25
** ESC - END SUB-CONTROL POINT.
*
* CLEAR SUB-CONTROL POINT ACTIVE STATUS, RELATIVIZE SUB-CONTROL
* POINT EXCHANGE PACKAGE, AND RETURN CONTROL TO NEW JOB OR
* CONTROL POINT EXECUTIVE.
*
* IF ENTERED AT *ESC*, THE CPU WILL BE SWITCHED TO A NEW JOB
* ON EXIT TO *BNJ*. IF ENTERED AT *ESC0*, CONTROL WILL BE
* RETURNED TO THE CONTROL POINT EXECUTIVE.
*
* ENTRY (X2) = STSW OF CONTROL POINT.
* (X4) = SUB CONTROL POINT ACTIVE BIT.
* (A2) = ADDRESS OF STSW IN CONTROL POINT AREA.
* (X1 BITS 0-17) = CONTROL POINT ADDRESS IF ENTERED AT
* *ESC*.
*
* EXIT TO *BNJ3* TO START NEW JOB IF ENTERED AT *ESC*.
* (CPAL+A0) SET WITH USER EXCHANGE PACKAGE ADDRESS IF
* ENTERED AT *ESC*.
* TO *BNJ20* TO RESTART CONTROL POINT EXECUTIVE IF
* ENTERED AT *ESC0*.
*
* USES X - 1, 2, 3, 4, 5, 6, 7.
* A - 2, 3, 4, 6, 7.
* B - 2, 3, 6, 7.
ESC SB3 B0+ SET NEW JOB AS NEXT ONE
SB7 X1+ SET CONTROL POINT ADDRESS
* ENTRY FROM *BCE*.
ESC0 BX7 -X4*X2 CLEAR SUBCP ACTIVE BIT
SA7 A2
* RELATIVIZE SUB-CONTROL POINT P, RA, AND RAX.
SA3 B7+4 READ RAX(CP)
SA4 B2+4 READ RAX(S)
MX2 24
BX3 X2*X3
IX7 X4-X3
SA3 B7+B1 READ RA(CP)
SA7 A4+
SA4 B2+1 READ RA(S)
BX1 X2*X3
IX7 X4-X1
SA7 A4+
SA3 RTCL CHECK FOR TIME LIMIT
SA4 ACPL+A0
BX3 -X2*X3
BX4 -X2*X4
AX1 36
IX4 X3-X4
SA3 A2-2 READ X6
SX5 B1 READ RA+1
IX5 X5+X1
ERX2 X5
MX6 -18
BX7 -X6*X2
IX1 X7+X1 ADDRESS OF USER EXCHANGE PACKAGE
UX3,B6 X3 CHECK ERROR FLAG
NZ B3,ESC1 IF TO RETURN TO CP EXECUTIVE
NZ B6,ESC1 IF ERROR FLAG
NG X4,ESC2 IF NOT TIME LIMIT
SB6 TLET
* TERMINATE SUB-CONTROL POINT ACTIVITY.
ESC1 SA4 A3-16B+12B READ START TIME
PX7 X3,B6
BX6 X4
SA4 B7+CPTW
IX6 X4-X6 COMPUTE TIME USED
SA6 A3+B1
SA7 A3+
BX7 X7-X7 CLEAR RA+1
EWX7 X5
ZR B3,ESC3 IF NOT TO RETURN TO CP EXECUTIVE
* EXIT TO CONTROL POINT EXECUTIVE.
SA2 B7+1 GET CONTROL POINT RA
SX3 B7
SX7 B7 SET EXCHANGE PACKAGE ADDRESS
LX3 24
BX7 X3+X7 SET CONTROL POINT ADDRESS
MX6 24
SA7 CPAL+A0 UPDATE *CPAL*
SX3 B2 SET EXCHANGE ADDRESS
BX6 X6*X2 SET CONTROL POINT RA
IX1 X3-X1 SET EXCHANGE PACKAGE MOVE DIFFERENTIAL
SA6 ACPL+A0 UPDATE *ACPL*
SB2 B7 SET CP EXECUTIVE EXCHANGE ADDRESS
EQ /MONITOR/BNJ20 COPY EXCHANGE PACKAGE
* SET REMAINING TIME IN RA+1.
ESC2 LX4 18 SET REMAINING TIME REQUESTED IN XJP CALL
LX6 18
BX6 X6*X2 CLEAR OLD TIME
BX6 -X4+X6 SET NEW TIME
EWX6 X5
* EXIT TO BEGIN NEW JOB.
ESC3 SA3 CPAL+A0 SET *CPAL* FOR EXCHANGE PACKAGE COPY
MX6 36
BX7 X6*X3
BX7 X7+X1 INSERT USER EXCHANGE PACKAGE ADDRESS
SA7 A3
EQ /MONITOR/BNJ3 SELECT NEXT JOB
TITLE CPU REQUEST PROCESSORS.
SSE SPACE 4,10
** SSE - SET SUBCONTROL POINT ERROR.
*
* ENTRY (X7) = ERROR FLAG.
* (B7) = CP ADDRESS.
*
* EXIT TO *SEF1* IF NOT ALLOWABLE SUBCP ERROR.
* TO *BCE* IF SUBCP ERROR ALLOWED.
*
* USES X - 1, 2, 6.
* B - 3.
* A - 2, 6.
SSE SA2 SSEA
SB3 X7
LX1 X2,B3
PL X1,SEF1 IF ERROR NOT ALLOWED
SA2 B7+16B SET ERROR IN X6 OF XP
PX6 X2,B3
SA6 A2
EQ BCE BEGIN CONTROL POINT EXECUTIVE
SSEA BSS 0 ALLOWABLE SUBCP ERROR FLAGS
POS 60-ARET
VFD 1/1
POS 60-PSET
VFD 1/1
POS 60-TLET
VFD 1/1
BSS 0
XJP SPACE 4,25
*** *XJP*.
* INITIATE SUB-CONTROL POINT.
*
*T 18/ *XJP*,6/ ,18/ TIML,18/ ADDR
* TIML CPU TIME LIMIT FOR SUB-CONTROL POINT IN MILLISECONDS.
* ADDR ADDRESS OF SUB-CONTROL POINT EXCHANGE PACKAGE.
*
* RESPONSE AFTER CONTROL RETURNED TO CALLER.
*T, X2 60/ CPTW BEFORE SUBCP INITIATION.
*T, X6 12/ 200B+EF,48/ RA OF SUBCP.
*T, X7 60/ CPU TIME USED BY SUBCP.
* THIS TIME HAS THE ACCOUNTING MULTIPLIERS APPLIED
* AND IS IN QUARTER NANO SECONDS.
* EF ERROR FLAG CAUSED BY SUB-CONTROL POINT.
*
* IF AN ERROR IS ENCOUNTERED DURING PROCESSING OF THE
* *XJP* REQUEST, CERTAIN VALUES MAY HAVE ALREADY BEEN
* ALTERED BY CPUMTR. THESE INCLUDE:
* RA, EM, AND RAX IN THE SUB-CP EXCHANGE PACKAGE.
* X2, AND X6 OF THE REQUESTING PROGRAM.
XJP SB5 X5 ADDR
MX0 24
SB6 X5+20B
LE B5,B1,CPE IF ILLEGAL ADDRESS
GE B6,B4,CPE IF ILLEGAL ADDRESS
NG B6,CPE IF ILLEGAL ADDRESS
SA4 A0+TXJP READ EXCHANGE PACKAGE ADDRESS AND (MA)
* MOVE EXCHANGE PACKAGE TO SUB CONTROL POINT EXCHANGE AREA.
SA5 B3 RA
SX6 B5 EXCHANGE ADDRESS
IX5 X5+X6 ABSOLUTE ADDRESS OF SUBCP XP
ERX3 X5 READ P
LX2 36 POSITION RA
BX6 X3
SX3 B1
IX5 X5+X3 RA ADDRESS
ERX3 X5 READ RA
SA6 X4
IX7 X2+X3 RA(S) + RA(CP)
BX3 X0*X3
LX3 24
PX6 X3
SA7 X4+B1
IX1 X1-X3 FL(CP) - RA(S)
SX3 B1
IX5 X5+X3 FL ADDRESS
ERX3 X5 FL(S)
SA6 B2+16B SET EXIT CONDITION IN (X6)
BX2 X0*X3
BX7 X3
LX2 24
SA7 A7+B1
IX1 X1-X2 FL(CP) - RA(S) - FL(S)
SX3 B1
IX5 X5+X3
ERX3 X5 EM
SX7 B1 CLEAR COPY FLAG
LX7 56-0
TSX2 UEM SET COPY FLAG IF REQUIRED
BX3 -X7*X3
LX2 56-0
BX7 X2+X3
SA2 B2+4 READ RAX(CP)
SX3 B1
IX5 X5+X3
ERX3 X5 RAX(S)
NG X1,CPE IF RA(S) + FL(S) .GT. FL(CP)
SA1 A2+B1 FLX(CP)
BX2 X0*X2
BX1 X0*X1
IX6 X2+X3 RAX(S) + RAX(CP)
BX3 X0*X3
SA7 A7+B1
IX1 X1-X3 FLX(CP) - RAX(S)
SX3 B1
IX5 X5+X3
ERX3 X5 FLX(S)
SA6 A7+B1
BX7 X3
BX3 X0*X3
LX4 36
IX1 X1-X3 FLX(CP) - RAX(S) - FLX(S)
SX3 B1
IX5 X5+X3
ERX3 X5 MA
LX1 24
NG X1,CPE IF RAX(S) + FLX(S) .GT. FLX(CP)
BX3 -X0*X3
SA7 A6+B1
BX7 X4+X3
MX6 -11B SET LENGTH OF MOVE
SA7 A7+B1
SX3 B1
IX5 X5+X3
ERX3 X5
BX3 -X0*X3
BX3 X4+X3
* MOVE REMAINDER OF EXCHANGE PACKAGE.
XJP1 BX7 X3
AX6 1
SA7 A7+B1
SX3 B1
IX5 X5+X3
ERX3 X5
NZ X6,XJP1 IF NOT END OF MOVE
SA3 B7+STSW SET SUBCP ACTIVE BIT
SX7 B1
LX7 56
BX7 X7+X3
SA7 A3
SB3 XJP2 *CPT* RETURN ADDRESS
TJP (/NVE/CPT,NVE,/CME/CPT,CME,/MONITOR/CP76,CP176,/MONITOR
,/CPT)
XJP2 SA2 RA1 CHECK FOR INITIAL CALL
SX1 B1
ERX5 X2
LX1 41
BX7 X1+X5
BX1 X1*X5
EWX7 X2 SET NON-INITIAL CALL FLAG
NZ X1,XJP3 IF NOT INITIAL CALL
SA6 B2+12B SET (X2) TO START TIME
XJP3 SA2 A0+TXJP
SA1 RTCL
SX7 B7 CONTROL POINT ADDRESS
LX5 -18
MX0 -36
LX7 24
MX6 -18
SA4 X2+B1 RA(S)
BX7 X7+X2 SET CP AND EXCHANGE PACKAGE ADDRESSES
BX1 -X0*X1 MILLISECOND CLOCK
BX5 -X6*X5 REQUESTED TIME LIMIT
SA7 CPAL+A0 UPDATE *CPAL*
IX5 X5+X1
BX4 X0*X4 SUBCP RA
SX3 B2 SET OLD EXCHANGE ADDRESS
BX6 X5+X4
SX1 B2-B7 SET EXCHANGE PACKAGE MOVE DIFFERENTIAL
SA6 ACPL+A0 UPDATE *ACPL*
SB2 X2+ SET SUBCP EXCHANGE ADDRESS
EQ /MONITOR/BNJ20 CHECK EXCHANGE PACKAGE COPY
TXJP SPACE 4,10
** TXJP - TABLE OF SUB-CONTROL POINT EXCHANGE PACKAGES.
*
* INDEXED BY CPU NUMBER.
TXJP VFD 42/0,18/SCX
VFD 42/0,18//DCP/SCX1
SPACE 4
** SCX - SUB-CONTROL POINT EXCHANGE PACKAGE.
SCX EXP
ENDBLK
BLOCK CSE,(CLEAR CM STORAGE VIA ECS.),PROGRAM
CSE SPACE 4,10
** CSE - CLEAR CM STORAGE VIA ECS. (PROGRAM MODE)
*
* ENTRY (A5) = PPU OUTPUT REGISTER ADDRESS.
* (X1) = BITS 0 - 47 OF OUTPUT REGISTER.
* (X5) = PPU OUTPUT REGISTER.
*
* USES X - 0, 1, 2, 3, 5.
* A - 0, 1, 2, 3.
* B - 3, 4, 5.
CSE TA2 EEN GET ECS EST ENTRY
LX2 59-49
TNG X2,(/PROGRAM/CSC,CMU,/PROGRAM/CSP) IF EM OFF OR DOWN
* ENTRY FOR CME MAINFRAMES.
* THE UEM FAKE READ IS USED ON ALL CYBER 170-8X5
* MAINFRAMES WHEN NO EXTERNAL ECS DEVICE IS DEFINED.
* NOTE THAT EVEN WHEN EXTERNAL ECS IS DEFINED ON A
* CYBER 170-865/875, THE SMU DOES NOT ACCESS THE DEVICE
* IF A FAKE READ IS ISSUED, SO NO CHECK IS NEEDED FOR EM
* DEVICE LOGICALLY TURNED OFF.
CSE1 LX5 59-43
TNG X5,(/PROGRAM/CEC,UEC,/PROGRAM/HNG) IF CLEAR USER ECS
LX5 -24-59+43
SB3 X5 (B3) = 0 IF LIST PRESENT
NZ B3,CSE2 IF NOT LIST OPTION
SA1 A5+B1 GET LIST ENTRY
CSE2 SA0 X1
MX5 -21
TSX0 (LCCB-1,CP176,1-1)
SAC 18,CCMB ADD CLEAR CENTRAL MEMORY BUFFER
NZ X0,CSE3 IF NOT A 990
SA3 ECRL GET RAE FOR ZERO UEM BLOCK
LX3 0-12
MX0 -24
BX0 -X0*X3
TLX0 9-21+60,UESC
CSE3 BX5 -X5*X1 GET CM ADDRESS
AX1 24
SB5 X1
TLX0 (0,CP176,21)
TLX0 (3,ESM170,0)
TLX0 (4,UEM180,0)
LX5 30
BX0 X0+X5 COMBINE CM AND EM ADDRESSES
SB4 MECB SET WORD CLEAR COUNT
SX5 B4
LX5 30
CSE4 GE B5,B4,CSE5 IF MORE THAN 400B WORDS LEFT
SB4 B5+ PICK UP REMAINDER
CSE5 RE B4 CLEAR MEMORY FROM EM
SB0 B0+ HALF EXIT FOR FAKE READ
SB5 B5-B4 DECREMENT WORD COUNT
SA0 A0+B4 INCREMENT ADDRESS
IX0 X0+X5
GT B5,CSE4 IF MORE WORDS TO CLEAR
TNZ B3,(/MCE/CSTX,MCE,/PROGRAM/PRG1) IF NOT LIST
SA1 A1+1 GET NEXT LIST ENTRY
NZ X1,CSE2 IF NOT END OF LIST
TEQ (/MCE/CSTX,MCE,/PROGRAM/PRG1) EXIT
ENDBLK
BLOCK UEC,(USER ECS PROCESSING ROUTINES.)
SPACE 4
** ASSEMBLE CONSTANTS.
MECB EQU 400B
SPACE 4
** MONITOR/UEC BLOCK EQUIVALENCES.
CPE EQU /MONITOR/CPE
MTRX EQU /MONITOR/MTRX
SFL2 EQU /MONITOR/SFL2
UMT1 EQU /MONITOR/UMT1
UMTA EQU /MONITOR/UMTA
MFX SPACE 4,10
** MFX - CHANGE FL FOR USER EXTENDED MEMORY.
*
* ENTRY (X0) = INCREMENT.
* (B3) = ADDRESS OF CP USING CURRENT CPU.
* (B6) = EXCHANGE PACKAGE ADDRESS.
* (B7) = CP/PCP ADDRESS.
*
* USES X - 1, 2, 3, 4, 6, 7.
* A - 1, 2, 3, 4, 6, 7.
MFX BSS 0 ENTRY
SA3 B7+ECSW READ FL CONTROL WORD
TX6 UEM
SA4 B7+3 SET UEM ENABLED FLAG
LX6 56-0
BX6 X4+X6
SA6 A4
IX7 X3+X0
SA7 A3+ UPDATE FLX IN FL CONTROL WORD
SA1 B6+4
MX2 -36
SA4 A1+B1
BX4 -X2*X4
MX2 -12
BX6 -X2*X7 PICK UP INCREMENTED CP FLE
TLX6 0,UESC
TLX6 (36+3,ESM170,36+9)
MX2 -24 MASK FOR RAE FROM *ECSW*
BX7 X6+X4
SA7 A4 WRITE UPDATED FLE TO EXCHANGE PACKAGE
AX3 RSHF
ZR X6,MFX1 IF FLX = 0
BX6 -X2*X3
MFX1 SA4 UMTA
SA3 UEML FETCH UEM PRESENT STATUS
TA2 X4+1,MCT
IX7 X2-X0 ADJUST UNASSIGNED XM ABOVE CP/PCP
BX4 X3
SA7 A2 UPDATE MCT ENTRY
MX2 -36
LX4 59-1
BX7 -X2*X1 XP RAX = *ECSW* RAX + UEM BASE ADDRESS
MX2 12
NG X4,MFX2 IF UEM PRESENT
SX3 B0
MFX2 BX3 X2*X3 EXTRACT UEM BASE ADDRESS
LX3 -3
TLX6 36+9,UESC
IX6 X3+X6
TLX6 (60-6,ESM170,0)
IX6 X7+X6
ZR B7,SFL2 IF SYSTEM EXTENDED MEMORY REQUEST
SA6 A1+
EQ SFL2 CHECK CPU ACTIVITY
MRX SPACE 4,10
** MRX - CHANGE RA FOR USER EXTENDED MEMORY.
*
* ENTRY (X0) = INCREMENT.
* (B4) = EXIT ADDRESS FOR *UMT*.
* (B7) = CP/PCP ADDRESS.
*
* USES X - 2, 7.
* B - 5.
* A - 2, 7.
MRX BSS 0 ENTRY
SA2 B7+ECSW READ FL CONTROL WORD
LX0 12
IX7 X2+X0 INCREMENT RAX
SB5 1
LX0 -12 RESTORE INCREMENT
SA7 A2
EQ UMT1 UPDATE MEMORY CONTROL TABLE
EJECT
TITLE USER ECS PROGRAM MODE ROUTINES.
QUAL PROGRAM
MECB SPACE 4,10
** DEFINE BLOCK SIZE FOR USER ECS OPERATIONS.
MECB EQU 400B
CEC SPACE 4,10
** CEC - CLEAR USER ECS STORAGE.
* SET THE SPECIFIED AREA OF USER ECS TO ZERO. THIS ROUTINE IS
* EXECUTED IN PROGRAM MODE AND UTILIZES THE PROGRAM MODE
* BUFFER FOR CLEARING ECS.
*
* ENTRY (A5) = PPU OUTPUT REGISTER ADDRESS.
*
* EXIT CLEAR OUTPUT REGISTER.
*
* USES X - 0, 1, 2, 3, 4, 6, 7.
* A - 0, 1, 2, 3, 7.
* B - 4, 6.
*
* MACROS PER, WUE.
CEC TSX0 (LCCB-1,CP176,1-1)
SAC 18,CCMB ADD CLEAR CENTRAL MEMORY BUFFER
NZ X0,CEC1 IF NOT CYBER 990 TYPE MAINFRAME
SA2 ECRL GET RAE FOR ZERO UEM BLOCK
LX2 0-12
MX0 -24
BX0 -X0*X2
TLX0 9-21+60,UESC
CEC1 SA0 PBUF SET FWA OF CM BUFFER
TLX0 (0,CP176,21)
SB4 MECB SET WORD COUNT
TLX0 (3,ESM170,0)
TLX0 (4,UEM180,0)
SA2 A5
SX1 A0
LX1 30
BX0 X0+X1
+ RE B4 CLEAR CM BUFFER
* NOTE - HALF EXIT WILL BE TAKEN ON EXTENDED MEMORY READ
* BECAUSE OF OUT-OF-RANGE ADDRESS SPECIFIED
* TO CAUSE ZEROES TRANSFER TO CM.
SB0 B0+
SX0 X2 ECS ADDRESS/1000B
LX2 59-42
TLX0 9,UESC
MX6 -RMSK
PL X2,CEC2 IF ABSOLUTE ADDRESS
SA3 B7+ECSW GET RAE
LX3 -RSHF
BX4 -X6*X3
TLX4 9,UESC RAE*(UEBS)
IX0 X4+X0
CEC2 LX2 -24-59+42
SX3 X2 BLOCK COUNT
ZR X3,HNG IF ZERO BLOCK COUNT
TLX3 9,UESC WORD COUNT
BX0 X1+X0
SX6 B4+
SB6 CEC4 SET RETURN ADDRESS
CEC3 WUE PROGRAM WRITE (B4) WORDS TO USER EM
PER /PROGRAM/CEC5
CEC4 IX3 X3-X6 DECREMENT WORD COUNT
IX0 X0+X6 INCREMENT ECS ADDRESS
NZ X3,CEC3 IF MORE TO CLEAR
* STORAGE CLEARED, CLEAR PPU OR AD EXIT.
CEC5 BX7 X7-X7
TEQ (/MCE/CSTX,MCE,/PROGRAM/PRG1) EXIT
MEC SPACE 4,8
** MEC - MOVE ECS STORAGE.
*
* ENTRY (B7) = CP/PCP ADDRESS.
*
* USES X - ALL.
* B - 5.
* A - ALL.
*
* CALLS PER.
MEC BSS 0 ENTRY
* INITIALIZE MOVE PARAMETERS.
SA2 B7+ECSW GET RAE AND FLE
TSA1 (UEML,UEM,ZERL) GET UEM BASE ADDRESS
SA5 SMIN
MX0 -12
MX6 -RMSK
BX4 -X0*X2
LX1 12
AX2 RSHF
BX1 -X0*X1
BX2 -X6*X2
LX1 9 UEM BASE ADDRESS IF UEM PRESENT
TLX2 9,UESC
TLX4 9,UESC FLE IN WORDS
IX2 X1+X2 RAE WORD ADDRESS
TLX5 9,UESC INCREMENT IN WORDS
BX3 X5
SX6 -MECB WORD COUNT
IX0 X2+X4
IX0 X0+X6 SET FWA ECS TO READ FROM (RA+FL-BLOCK SIZE)
SA0 UBUF CM BUFFER ADDRESS
PL X5,MEC1 IF MOVING CP UP ( TOWARDS HIGH CORE )
LX1 X0
BX6 -X6
LX0 X2 SET FWA ECS TO RAE FOR LOWER MOVE
BX2 X1
MEC1 IX6 X6-X3
SX5 A0+
LX5 30
BX0 X5+X0
MX5 -24
* MAIN MOVE LOOP.
MEC2 RE MECB READ ECS
RJ MEC3 IF EXTENDED MEMORY ERROR
IX4 X0-X2
IX0 X0+X3 SET FWA ECS TO WRITE TO
WE MECB WRITE ECS
RJ MEC3 IF EXTENDED MEMORY ERROR
IX0 X0+X6 SET NEXT ADDRESS TO READ FROM
BX1 -X5*X4
NZ X1,MEC2 IF MORE BLOCKS TO MOVE
* MOVE COMPLETED.
TNO /MCE/MEC,MCE IF MEMORY CLEARING ENABLED
MEC2.1 TA2 EMMS,SDA GET EM MOVE COUNT
SA5 SMIN GET MOVE INCREMENT
SA1 B7+ECSW GET *ECSW*
TSA3 (UEML,UEM,ZERL) GET UEM BASE ADDRESS
SA4 B7+4 GET EXCHANGE PACKAGE RAE
SX7 B1
MX0 -RMSK
MX6 12
LX0 12
IX7 X7+X2 COUNT MOVE
LX5 RSHF
SA7 A2 UPDATE EM MOVE COUNT
IX7 X1+X5 SET NEW RA IN *ECSW*
BX3 X6*X3
SA7 A1 UPDATE *ECSW*
BX7 -X0*X7
LX3 24 UEM BASE ADDRESS IF UEM PRESENT
TLX7 0,UESC
MX0 -36
IX7 X7+X3
BX4 -X0*X4
TLX7 (24+3,ESM170,24+9)
BX6 X4+X7
BX7 X7-X7 CLEAR REPLY
SA6 A4 UPDATE EXCHANGE PACKAGE RAE
EQ SMPX RETURN
* PROCESS EXTENDED MEMORY ERROR.
MEC3 PS ENTRY/EXIT
SX1 400B WORD COUNT
RJ /ECS/RSE REPORT STORAGE MOVE EXTENDED MEMORY ERROR
SA1 SMRL SET EXTENDED MEMORY ERROR STATUS
SX7 B1
LX7 36
SB5 MEC3 *MSC* RETURN ADDRESS
BX7 X1+X7
SA7 A1
SX1 MSEA * EXTENDED MEMORY ERROR - STORAGE MOVE.*
EQ /MONITOR/MSC ISSUE ERROR MESSAGE
TEC SPACE 4,10
** TEC - PERFORM USER ECS TRANSFER FOR *ECXM* FUNCTION.
*
* USES X - ALL.
* B - 3, 4, 5, 6, 7.
* A - 0, 1, 2, 4, 6, 7.
*
* MACROS PER, RUE, WUE.
TEC SA4 A5+B1 READ PARAMETERS
AX2 24
MX6 48
SB7 X2 SET CP/PCP ADDRESS
SX0 X4 ECS ADDRESS/1000B
LX4 12 GET WORD COUNT
BX3 -X6*X4
LX0 9 ECA*1000B
LX4 24 GET CM ADDRESS
SB3 X3 SET WC FOR ECS TRANSFER
BX4 -X6*X4
MX7 1
SA2 B7+ECSW GET CP/PCP RAE,FLE
LX7 -12
BX7 X7+X2 SET *ECXM* STORAGE MOVE INTERLOCK
SA7 A2
BX7 -X6*X2 FLE
LX2 -RSHF
BX2 -X6*X2 RAE
TLX7 9,UESC FLE*(UEBS)
IX3 X0+X3 ECA+WC
TLX2 9,UESC RAE
IX0 X2+X0 RAE+ECA=ABSOLUTE ECS ADDRESS
SA2 B7+FLSW
IX1 X7-X3 FLE - (ECA + WC)
BX7 -X6*X2 CM FL
MX6 -RMSK
AX2 RSHF
BX2 -X6*X2 CM RA
LX7 6 FL*100B
LX4 6 CMA*100B
SX3 X4+B3 CMA + WC
IX7 X7-X3 FL-(CMA+WC)
BX7 X1+X7
NG X7,HNG IF CMA OR ECA OUT OF RANGE
LX2 6 RA*100B
IX4 X2+X4 RA+CMA
BX7 X7-X7
SA0 X4 SET ABSOLUTE FWA OF CM BUFFER
LX4 30
BX0 X4+X0
SB5 X5+ SAVE RESPONSE ADDRESS
SB4 MECB
SB6 TEC3 SET RETURN ADDRESS
LX5 59-18
SA7 A5 CLEAR PP OUTPUT REGISTER NOW
TEC1 GE B3,B4,TEC2 IF NOT LAST SHORT BLOCK
SB4 B3+
TEC2 NG X5,TEC4 IF WRITE
RUE PROGRAM READ (B4) WORDS FROM USER ECS
PER /PROGRAM/TEC6 PARITY ERROR PROCESSOR
TEC3 EQ B3,B4,TEC5 IF END OF BLOCK
SB3 B3-B4 DECREMENT WORD COUNT
SX2 B4 INCREMENT ADDRESSES
SA0 A0+B4
IX0 X0+X2
LX2 30
IX0 X0+X2
EQ TEC1 LOOP FOR NEXT TRANSFER
TEC4 WUE PROGRAM WRITE (B4) WORDS TO USER ECS
PER /PROGRAM/TEC6 PARITY ERROR PROCESSOR
TEC5 NE B3,B4,TEC3 IF NOT END OF BLOCK
SA1 B7+ECSW CLEAR *ECXM* STORAGE MOVE INTERLOCK
MX6 59
LX6 47-0
BX6 X6*X1
SA6 A1
SA7 B5 SET RESPONSE
EQ PRG EXIT
TEC6 MX7 12 RETURN ERROR STATUS
LX7 -12
EQ TEC5 RETURN
UBUF SPACE 4,10
* USER ECS STORAGE MOVE BUFFER.
UBUF BSS MECB
SPACE 4
QUAL UEC
ENDBLK
BLOCK VMS,(VALIDATE MASS STORAGE.)
VMSM SPACE 4,10
** VMSM - VALIDATE MASS STORAGE.
*
* ENTRY (A5) = PPU OUTPUT REGISTER ADDRESS.
VMS SX4 X1
AX4 12
SB3 VMS1 *CTR* RETURN ADDRESS
ZR X4,/PROGRAM/CTR IF INTERLOCKING MST/TRT
AX4 1
SB6 B0
ZR X4,/PROGRAM/CTR IF VALIDATE WITH NO INTERLOCK
SB3 VMS8 *CTR* RETURN ADDRESS
EQ /PROGRAM/CTR
* VALIDATE EQUIPMENT.
VMS1 BX2 -X5*X3 AVAILABLE TRACKS
MX0 -4 (X0) = PRESERVED BIT MASK
SA4 A3+B1 READ PRESERVED FILE COUNT
SA1 B6 READ FIRST WORD OF TRT
AX3 24
AX4 24
BX3 -X5*X3 TRT LENGTH
BX4 -X4+X5 - PRESERVED FILE COUNT
SB4 X3 (B4) = LENGTH OF TRT
LX0 8
SB2 B6+X3 (B2) = LWA+1 OF TRT, *VTC* ENTRY CONDITION
LX3 2
SB5 X4 (B5) = - PRESERVED FILE COUNT
IX7 X2-X3
MX4 -4 (X4) = RESERVATION BIT MASK
SB3 X7 (B3) = - TRACKS RESERVED
* COUNT RESERVATION AND PRESERVED FILE BITS.
VMS2 SB7 X4 (B7) = -15 = LOOP COUNTER
BX7 X7-X7
SB4 B7+B4
BX6 X6-X6
PL B4,VMS3 IF NOT LAST SHORT LOOP
SB7 B7-B4 SET TO SHORT LOOP WORD COUNT
VMS3 LX7 4
BX5 -X0*X1 EXTRACT PRESERVED FILE BITS
SB7 B7+B1
BX6 X6+X5
BX5 -X4*X1 EXTRACT RESERVATION BITS
LX6 4
SA1 A1+B1
BX7 X7+X5
NZ B7,VMS3 IF NOT END OF LOOP
CX6 X6 COUNT PRESERVED FILE BITS
CX7 X7 COUNT RESERVATION BITS
SB5 B5+X6
SB3 B3+X7
GT B4,B0,VMS2 IF NOT END OF TRT
SX3 B1
MX0 -8
SA4 A3+PUGL CHECK FOR CATALOGS ON DEVICE
BX7 X7-X7
ZR B3,VMS4 IF RESERVATION BIT COUNT OK
BX7 X7+X3 SET ERROR FLAG
VMS4 LX7 -1
ZR B5,VMS5 IF PRESERVATION BIT COUNT OK
BX7 X7+X3 SET ERROR FLAG
VMS5 BX2 -X0*X4 EXTRACT DEVICE MASK
LX7 -4
ZR X2,VMS7 IF NO CATALOGS ON DEVICE
* VALIDATE PERMIT, LABEL-CATALOG, IAF TRACK CHAINS.
SB7 B1+B1
SA2 A4-B7 READ FIRST TRACK OF CHAINS
MX4 -11
AX2 12
SB3 VMS6 *VTC* RETURN ADDRESS
LX7 4
MX0 -2
* VALIDATE INDIRECT ACCESS FILE CHAIN.
VMS6 AX2 12
LX7 -1
BX6 -X0*X2
BX1 -X4*X2
SB7 B7-1
NZ X2,VTC IF MORE CHAINS TO VALIDATE
* RETURN STATUS, INTERLOCK DEVICE IF ERRORS.
VMS7 SX3 B1 SET *CDI* ENTRY CONDITIONS
BX1 X1-X1
SX5 B1
SB4 B0
SB5 /PROGRAM/PRG
TZR X7,(/ISD/VMS1,ISD,/PROGRAM/CDI) IF NO ERRORS
LX3 4
SA2 A3+B1 SET DEVICE ERROR IDLE
BX6 X2+X3
LX7 5+36
SA6 A2
TEQ (/LSPMMF/VMS,LSPMMF,/ISD/VMS1,ISD,/PROGRAM/CSM1) EXIT
* VALIDATE TRACK CHAIN.
VMS8 AX3 24 SET TRT LENGTH
SB3 VMS9
BX3 -X5*X3
MX4 -11
SB2 B6+X3 (B2) = LWA + 1 OF TRT
MX0 -2
BX7 X7-X7
SB7 B1
EQ VTC1 VALIDATE TRACK CHAIN
VMS9 LX7 36 RETURN STATUS
SA7 A5
EQ /PROGRAM/PRG EXIT
VTC SPACE 4,15
** VTC - VALIDATE TRACK CHAIN.
* VTC VALIDATES A TRACK CHAIN TO INSURE ALL TRACKS ARE RESERVED,
* NO CIRCULAR CHAIN EXISTS AND ALL TRACKS ARE WITHIN THE TRT.
*
* ENTRY ENTER AT VTC1 IF NOT TO CHECK PRESERVED FILE BIT.
* (X0) = -3
* (X1) = FIRST TRACK.
* (X2) = TRACK IF ENTERED AT VTC.
* (X4) = -3777B
* (X6) = BITS 0 AND 1 OF TRACK IF ENTERED AT VTC.
* (B2) = LWA + 1 OF TRT.
* (B3) = EXIT ADDRESS.
* (B6) = FWA OF TRT.
* (B7) = 0 IF CHECKING CATALOG CHAIN.
* (A3) = ADDRESS OF TDGL IN MST.
*
* EXIT (X7) = BIT 0 SET IF ERROR DETECTED IN CHAIN.
*
* USES X - 1, 3, 5, 6, 7.
* B - 4, 5, 7.
* A - 1.
VTC AX1 2
SB4 X6+48 PRESERVATION BIT SHIFT COUNT
SA1 B6+X1
LX6 X1,B4
PL X6,VTC6 IF PRESERVATION BIT NOT SET
BX1 -X4*X2
* ENTER HERE IF NOT CHECKING PRESERVATION BIT.
VTC1 SX3 B6-B2 SET NUMBER OF TRACKS
BX1 -X4*X1
LX3 2
SB4 X1
* TRACK VALIDATION LOOP.
VTC2 BX1 -X4*X1 TRACK
SX3 X3+B1
BX6 -X0*X1 BYTE NUMBER
SB5 X1
NZ B7,VTC3 IF NOT CHECKING CATALOG CHAIN
NE B4,B5,VTC5 IF TRACKS NON-CONTIGUOUS
VTC3 SX1 B5
SB5 X6+56 RESERVATION BIT SHIFT COUNT
LX6 2 TRACK LINK SHIFT COUNT * 4
SB4 X1+B1
AX1 2
SA1 B6+X1 READ TRT WORD
LX5 X1,B5 POSITION RESERVATION BIT
SB5 X6
LX6 1 TRACK LINK SHIFT COUNT * 8
BX5 X5*X3
SB5 B5+X6 TRACK LINK SHIFT COUNT * 12
SX6 A1-B2 CHECK OUT OF TRT
LX1 X1,B5 POSITION TRACK LINK BIT
BX6 X6*X5
AX1 48
PL X6,VTC6 IF NOT RESERVED, OUT OF TRT, OR CIRCULAR
NG X1,VTC2 IF TRACK LINKED
NZ B7,VTC4 IF NOT CHECKING CATALOG CHAIN
SA1 A3+ALGL
SX5 B6-B2 TRT LENGTH
LX1 -12
LX5 2 SET NUMBER OF TRACKS
BX1 -X4*X1 CATALOG TRACK COUNT FROM MST
IX5 X3-X5 NUMBER OF TRACKS IN CATALOG CHAIN
CX3 X1
IX6 X1-X5
SB4 X3
PL X6,VTC6 IF NOT ENOUGH CATALOG TRACKS
NE B4,B1,VTC6 IF CATALOG TRACK COUNT NOT POWER OF TWO
VTC4 JP B3 RETURN
VTC5 SA1 A3+PUGL CHECK CATALOG CHAIN CONTIGUOUS/OVERFLOW
LX1 59-17
PL X1,VTC3 IF CATALOG CHAIN NON-CONTIGUOUS
SA1 A3+ACGL
LX1 59-57
NG X1,VTC3 IF CATALOG TRACK OVERFLOW
VTC6 SX3 B1 RETURN ERROR STATUS
BX7 X3+X7
JP B3 RETURN
ENDBLK
BLOCK EUE,(ECS AND USER ECS PROCESSING ROUTINES.),ECS
ECSM SPACE 4
** ECSM - ECS TRANSFER.
*
* ENTRY (A5) = PPU OUTPUT REGISTER ADDRESS.
*
* USES X - 0, 1, 2, 3, 4, 5, 6.
* B - 3, 4, 5, 6.
* A - 0, 1, 2, 3, 6.
*
* CALLS CFR, EAB, SFR.
*
* MACROS PER, RUE, WUE.
ECS SB3 A0 SAVE CPU NUMBER
LX5 59-23
PL X5,ECS2 IF OPTIONS 0 - 3
LX1 -42
LX2 X5,B1
SB4 X1 LIST SIZE/BIT NUMBER
LX5 X2,B1
NG X2,ECS1 IF OPTION 6 OR 7
SB6 ECSX *SFR*/*CFR* RETURN ADDRESS
TPL X5,(/ECS/SFR,EEC,/MONITOR/HNG) IF *SFRS* FUNCTION
TEQ (/ECS/CFR,EEC,/MONITOR/HNG) PROCESS *CFRS* FUNCTION
ECS1 NG X5,/MONITOR/HNG IF OPTION 7
LX5 1 NEGATIVE = WRITE ECS, POSITIVE = READ ECS
MX2 1
BX3 X2*X5
LX2 -1
BX2 X2*X5
LX2 2
SB5 X2 0 = ABS SYSTEM ECS, 1 = ABS USER ECS
LX1 18
SA1 X1 GET FIRST LIST ENTRY
SX4 B4 INDICATE LIST SUBFUNCTION
ZR B4,/MONITOR/HNG IF NO ENTRIES IN LIST
MX5 -18
SX2 A1+B4 CM ADDRESS OF DATA BUFFER
BX2 -X5*X2
BX5 X3+X2
SX2 B0+
EQ ECS11 PRESET LIST REGISTERS
ECS2 LX1 -24 CM ADDRESS OF BUFFER
MX3 -17
LX5 2 NEGATIVE = WRITE ECS, POSITIVE = READ ECS
SX4 B1
BX4 -X5*X4
MX2 1
BX5 X2*X5
LX4 1
SB5 X4 0 = ABS SYSTEM ECS, 2 = RELATIVE USER ECS
BX3 -X3*X1
LX1 -18
MX6 -RMSK
PL X1,ECS3 IF ABSOLUTE CM ADDRESS
SA2 B7+FLSW ABSOLUTIZE CM BUFFER ADDRESS
AX2 RSHF
BX2 -X6*X2 RA/100
LX2 6
IX3 X3+X2
ECS3 BX5 X5+X3
LX1 42
SX4 B0+ INDICATE NOT LIST SUBFUNCTION
SB4 B1+ BIAS FOR WORD COUNT
MX3 -21 ADDRESS MASK
ECS4 MX6 -21
BX0 -X3*X1 ECS ADDRESS
MX3 -6
LX1 -42
BX1 -X3*X1 WORD COUNT
SB4 X1+B4 WORD COUNT OF TRANSFER
BX1 -X6*X5 CM ADDRESS OF BUFFER
SA0 X1
TX3 MECNF MACHINE ECS FL / 1000B
TLX3 60-0,-UESC
ZR B5,ECS6 IF ABSOLUTE SYSTEM ECS ADDRESS
EQ B5,B1,ECS5 IF ABSOLUTE USER ECS ADDRESS
SA3 B7+ECSW GET ECS RA AND FL
MX2 -12
BX6 -X2*X3
AX3 RSHF
TLX6 9,UESC
MX2 -RMSK
BX3 -X2*X3
SX2 B4-B1
TLX3 9,UESC
IX2 X0+X2
IX2 X2-X6
IX0 X0+X3 ABSOLUTIZE ECS ADDRESS
PL X2,EAB3 IF ECA + WC .GT. FLX
ECS5 TA3 ECSW,SCA SET LWA+1 USER ECS / 1000B
MX2 -12
BX6 -X2*X3
AX3 RSHF
MX2 -RMSK
BX3 -X2*X3
IX3 X3+X6
ECS6 TLX3 9,UESC
SX2 B4-B1
LX1 30
IX2 X0+X2 LWA OF TRANSFER
BX0 X1+X0
IX2 X2-X3
SX3 B1+
SX6 A1 SAVE LIST ENTRY ADDRESS
SA6 ECSA
BX6 X6-X6
PL X2,EAB10 IF ILLEGAL ADDRESS
SB6 ECS10 SET RETURN ADDRESS
NZ B5,ECS8 IF USER EXTENDED MEMORY READ/WRITE
NG X5,ECS7 IF WRITE SYSTEM ECS
+ RE B4 READ (B4) WORDS FROM SYSTEM ECS
PER EAB PROCESS EXTENDED MEMORY ERROR
EQ ECS10 COMPLETE PROCESSING
ECS7 WE B4 WRITE (B4) WORDS TO SYSTEM ECS
PER EAB PROCESS EXTENDED MEMORY ERROR
EQ ECS10 COMPLETE PROCESSING
ECS8 NG X5,ECS9 IF WRITE USER ECS
RUE MONITOR READ (B4) WORDS FROM USER ECS
PER EAB PROCESS EXTENDED MEMORY ERROR
EQ ECS10 COMPLETE PROCESSING
ECS9 WUE MONITOR WRITE (B4) WORDS TO USER ECS
PER EAB PROCESS EXTENDED MEMORY ERROR
ECS10 ZR X4,ECSX IF NOT PROCESSING LIST
SA1 ECSA GET LIST ENTRY ADDRESS
SA6 X1+ SET/CLEAR ERROR FLAGS
SX2 B4+ ADVANCE CM BUFFER ADDRESS
SA1 A6+B1 GET NEXT LIST ENTRY
IX4 X4-X3
ZR X4,ECSX IF END OF LIST
ECS11 IX5 X5+X2
SB4 B0+
TMX3 (36,ESM170,39)
EQ ECS4 PROCESS NEXT LIST ENTRY
ECSA CON 0 LIST ENTRY ADDRESS
EAB SPACE 4,20
** EAB - ECS ABORT PROCESSOR. (MONITOR MODE)
*
* ENTRY (X0) = ECS ADDRESS OF ERROR.
* (X3) = 1.
* (X4) = 0 IF NOT PROCESSING LIST.
* (X5) .LT. 0 IF WRITE ECS, OTHERWISE READ ECS.
* (X6) = 0.
* (X7) = 0 OR ERROR STATUS.
* (B3) = CPU NUMBER.
* (B4) = WORD COUNT OF TRANSFER.
* (A0) = CM ADDRESS OF TRANSFER.
* (A5) = OUTPUT REGISTER ADDRESS.
*
* EXIT (X6) = ERROR FLAGS FOR LIST ENTRY.
* TO *ECS10* IF PROCESSING LIST.
* TO *PPRX* IF FUNCTION COMPLETE.
*
* USES A - 0, 7.
* B - 6, 7.
* X - 0, 1, 2, 6, 7.
* PROCESS EXTENDED MEMORY ERROR.
EAB NZ X4,EAB4 IF PROCESSING LIST
MX7 12 SET ERROR STATUS
LX7 -12
EAB1 MX6 -24
BX0 -X6*X0
BX7 X7+X0
EAB2 SA0 B3 RESTORE CPU NUMBER
SA7 A5 STORE RESPONSE
EQ /MONITOR/PPRX EXIT
* PROCESS INVALID RELATIVE ADDRESS.
EAB3 SX7 B1 SET ERROR STATUS
LX7 36
EQ EAB1 RETURN ERROR STATUS
* PROCESS EXTENDED MEMORY ERROR DURING LIST PROCESSING.
EAB4 SX1 B1
LX1 30
BX1 X3+X1
SB6 B4
EAB5 SB7 B4-B6
SB6 B6-B1
NG X5,EAB8 IF WRITE ECS
+ RE 1 RETRY READ ONE WORD AT A TIME
EQ EAB9 PROCESS EXTENDED MEMORY ERROR
EAB6 SA0 A0+B1
IX0 X0+X1
NZ B6,EAB5 IF NOT END OF BUFFER
EAB7 MX7 12 INDICATE TRANSFER ABORTED
LX7 -12
EQ ECS10 CONTINUE PROCESSING LIST
EAB8 WE 1 RETRY WRITE ONE WORD AT A TIME
EQ EAB9 PROCESS EXTENDED MEMORY ERROR
EQ EAB6 CONTINUE RETRY FOR ENTIRE BUFFER
EAB9 LX2 X3,B7
BX6 X6+X2 SET ERROR FLAG FOR THIS WORD
EQ EAB6 CONTINUE RETRY FOR ENTIRE BUFFER
* PROCESS INVALID ECS ADDRESS IN LIST.
EAB10 ZR X4,/MONITOR/HNG IF ILLEGAL ADDRESS AND NOT LIST
MX6 60 RETURN ERROR STATUS IN ALL BITS
MX7 12 INDICATE TRANSFER ABORTED
LX7 -12
EQ ECS10 CONTINUE PROCESSING LIST
ECSX EQU EAB2 EXIT ADDRESS FOR *ECS*
ENDBLK
BLOCK ECS,(ECS PROCESSING ROUTINES.)
PIOM SPACE 4,10
** PIO - *PIOM* PP I/O CPU TRANSFERS (MONITOR MODE).
*
* ENTRY (A0) = CPU NUMBER.
* (A5) = *OR* ADDRESS.
* (B2) = EXCHANGE PACKAGE ADDRESS.
* (B7) = CP ADDRESS.
* (B5) = SUBFUNCTION - 1.
* (X2) = MASK OF -12.
* (X5) = (OR).
* (X7) = 0.
* SEE *PIOM* DOCUMENTATION FOR *OR*, *MB* AND *MB*+1
* DESCRIPTION.
*
* EXIT A0, A5, B2, B7 SAME AS ON ENTRY.
* TO /MONITOR/HNG, FOR FOLLOWING CONDITIONS -
* (1) ILLEGAL SUBFUNCTION
* (2) BUFFER PREVIOUSLY RESERVED FOR SUBFUNCTION 0
* (RESERVE WRITE BUFFER)
* (3) PP BUFFER RESERVED BUT NOT INTERLOCKED
* TO THIS PP.
* (4) PP BUFFER NOT PREVIOUSLY RESERVED FOR
* SUBFUNCTION 2 (WRITE PRU).
* (5) BUFFERED I/O REQUEST WITHOUT
* *BUFIO* BLOCK PRESENT.
* (6) FUNCTION FLAG SELECTION NOT LEGAL FOR THIS
* SUBFUNCTION.
* TO /BUFIO/PBF, FOR SUBFUNCTION 5 (I/O BUFFER FLUSH),
* AFTER SWITCH TO PROGRAM MODE.
* TO /PROGRAM/PDT, FOR ECS DIRECT TRANSFER,
* AFTER SWITCH TO PROGRAM MODE.
* TO /BUFIO/PST, FOR BUFFERED DEVICE DIRECT TRANSFER,
* AFTER SWITCH TO PROGRAM MODE.
* TO /BUFIO/PST, IF BUFFERED I/O PRU TRANSFER.
PIO TX1 A5-1,-FP
SA3 CMCL
LX1 PPXES-PPCES
SA4 A5+B1 GET PARAMETERS FROM MESSAGE BUFFER
TA1 X1+ACPP,FPX GET CP ASSIGNMENT
SA7 A4+1
SB4 FLBS-1
BX3 X1-X3
TSB6 (/BUFIO/PBF,BUFIO,/PROGRAM/HNG)
AX3 48
SX1 REIS RETURN STATUS = *PAUSE* REQUIRED
ZR X3,PIOX IF STORAGE MOVE REQUIRED
EQ B5,B4,PIOP IF I/O BUFFER FLUSH
GE B5,B4,/MONITOR/HNG IF ILLEGAL SUBFUNCTION
LX4 24 POSITION EST ORDINAL
BX0 -X2*X4
LX4 -12 POSITION PP I/O BUFFER
CX1 X0,EST CONVERT EST ORDINAL TO OFFSET
TA1 X1+EQDE,EST READ EST ENTRY
BX1 -X2*X1 GET MST ADDRESS FOR EQUIPMENT
LX1 3
SA1 X1+DILL GET BUFFERED DEVICE FLAG
SX0 B1+
BX3 -X2*X4 PP I/O BUFFER INCREMENT
LX1 0-22
BX6 X0*X1
SA6 A4+B1 SAVE DEVICE INDICATOR IN MESSAGE BUFFER
SA1 PFFV VALIDATE FUNCTION FLAGS
SB3 B5+B1
SB6 B3+B3
LX5 18
SB6 B6+B3
SB6 B6+B6
LX1 B6
BX1 X1*X5
MX6 6
BX6 X6*X1
LX5 -18
NZ X6,/MONITOR/HNG IF ILLEGAL FUNCTION FLAGS
BX6 X4
LX6 59-6-12
NG X6,PIO6 IF RECALL AFTER FLUSH
BX6 X2*X4 CLEAR PP I/O BUFFER INCREMENT
LX4 59-0-12
LX6 -12
PL X4,PIO4 IF PP I/O BUFFER NOT RESERVED
* VALIDATE PP I/O BUFFER INTERLOCK.
SX1 A5
TA3 X3,ECSB CHECK PP I/O BUFFER INTERLOCK
NG B5,/MONITOR/HNG IF RESERVE WRITE BUFFER SUBFUNCTION
IX1 X3-X1
BX6 -X0*X6 CLEAR PP I/O BUFFER RESERVED FLAG
NZ X1,/MONITOR/HNG IF NOT RESERVED TO THIS PP
LE B5,B1,PIO6 IF NOT DIRECT TRANSFER
* RELEASE PP I/O BUFFER AND SWITCH TO PROGRAM MODE
* FOR DIRECT TRANSFER (SF = 3, 4).
SA7 A3 CLEAR PP I/O BUFFER INTERLOCK
SA6 A4
PIO2 LX4 59-8-59+0
SA1 A4+B1 GET DEVICE INDICATOR
NG X4,PIO3 IF NOT INITIAL CALL
LX0 8
BX6 X0+X6
SA6 A4+
PIO3 SB6 /PROGRAM/PDT
ZR X1,PIOP IF ECS REQUEST
TSB6 (/BUFIO/PST,BUFIO,/PROGRAM/HNG)
EQ PIOP SWITCH TO PROGRAM MODE
* RESERVE PP I/O BUFFER (SF = 0, 1).
PIO4 GT B5,B1,PIO2 IF DIRECT TRANSFER
EQ B5,B1,/MONITOR/HNG IF SECTOR WRITE
TX1 B0,ECSBL GET PP I/O BUFFER LENGTH
SX7 A5
BX6 X0+X6 SET PP I/O BUFFER RESERVED FLAG
PIO5 SX1 X1-ECBL
NG X1,PIOR IF NO PP BUFFER AVAILABLE
TA3 X1,ECSB CHECK BUFFER INTERLOCK
NZ X3,PIO5 IF BUFFER RESERVED
LX1 -12
BX6 X6+X1 SET PP I/O BUFFER INCREMENT
SA7 A3 SET PP BUFFER INTERLOCK
SA6 A4
* PROCESS ECS PRU TRANSFER.
PIO6 TA1 EQDE,EEN CHECK TRACK COUNT
BX1 -X2*X1
LX1 3
SA1 X1+TDGL
LX4 0-12-59+0+60
SB6 A0 SAVE (A0)
BX3 -X2*X4 SECTOR
LX1 12
BX6 -X2*X1 TRACK COUNT
SA1 A4+B1
TNZ X1,(/BUFIO/PST,BUFIO,/MONITOR/HNG) IF BUFFERED
NG B5,PIOX IF RESERVE BUFFER SUBFUNCTION
TB3 0,-TCNT
SX0 X3+B3
PL X0,PIO6.1 IF SECTOR .GT. LIMIT
LX6 1
LX4 -11
LX7 X3
BX0 -X2*X4 TRACK * 2
LX7 6 SECTOR * 100B
IX1 X0-X6
PL X1,PIO6.1 IF TRACK .GT. LIMIT
SA0 A3+1 LINKAGE WORD ADDRESS
BX6 -X2*X4
TLX0 9,TNSC TRACK * WORDS PER TRACK
IX7 X7-X3 SECTOR * 77B
TLX6 3,TNSC TRACK * SECTORS PER TRACK
TX7 X7,TCNT
IX0 X0+X6 TRACK * WORDS + LINKAGE WORDS
SX1 -DSTE SET *DEVICE ERROR* STATUS
IX0 X0+X3 HEADER ADDRESS = TRACK * WORDS + SECTOR
SX2 A0
LX2 30
BX0 X2+X0
EQ B5,B1,PIO7 IF WRITE SECTOR SUBFUNCTION
RE 1 READ HEADER WORD
PER PIOX3 PROCESS ECS PARITY ERROR
SX1 PARE SET *PARITY ERROR* STATUS
SA0 A0+B1 INCREMENT ADDRESSES
IX0 X0+X7 TRACK*WORDS + SECTOR*100B + TCNT
SX2 B1+
LX2 30
IX0 X0+X2
RE 100B READ SECTOR OF DATA
PER PIOX3 PROCESS ECS PARITY ERROR
SA0 B6 RESTORE (A0)
BX1 X1-X1 RETURN STATUS = NO ERROR
EQ PIOX EXIT
PIO6.1 SX1 -ADDE SET *ADDRESS ERROR* STATUS
EQ PIOX RETURN ERROR STATUS
PIO7 WE 1 WRITE HEADER WORD
PER PIOX3 PROCESS ECS PARITY ERROR
BX2 X5
SX1 PARE SET *PARITY ERROR* STATUS
LX2 59-37 RELEASE PP BUFFER IF FLUSH BIT SET
SA0 A0+B1 INCREMENT ADDRESSES
AX2 59
IX0 X0+X7 DATA ADDRESS=TRACK*2020B+SECTOR*100B+20B
BX1 X1-X2
SX3 B1+
LX3 30
IX0 X0+X3
WE 100B WRITE SECTOR OF DATA
PER PIOX3 PROCESS ECS PARITY ERROR
SA0 B6 RESTORE (A0)
BX1 X2 RETURN STATUS = NO ERROR
EQ PIOX EXIT
PFFV VFD 6/4,6/7,6/4,6/3,6/5,30/0 FUNCTION FLAG VALIDATIONS
PIOX SPACE 4,10
** PIOX - EXIT FROM *PIOM*.
*
* ENTRY (A5) = PP *OR* ADDRESS.
* (A0) = CPU NUMBER, IF ENTRY AT *PIOX*, *PIOX1*,
* OR *PIOX2* FROM MONITOR MODE.
* (B6) = CPU NUMBER, IF ENTRY AT *PIOX3*.
* (X0) = ADDRESS OF UNRECOVERED ECS PARITY ERROR,
* IF ENTRY AT *PIOX3*.
* (X1) = RETURN STATUS.
* (X1) = COMPLEMENT OF RETURN STATUS,
* IF PP BUFFER TO BE RELEASED.
* (X5) = (OR), IF ENTRY AT *PIOX1*, *PIOX2*, OR *PIOX3*.
* (MB+1) .LT. 0, IF PROGRAM MODE EXIT.
PIOX3 MX2 30 RETURN ECS PARITY ERROR ADDRESS
BX6 X2*X5
BX0 -X2*X0
BX6 X6+X0
SA6 A5+
SA0 B6+ RESTORE (A0)
PIOX SA5 A5+
MX2 -36
LX1 -24
BX5 -X2*X5
PL X1,PIOX2 IF NO RELEASE OF PP BUFFER
BX1 -X1
PIOX1 SA4 A5+B1
BX7 X7-X7
MX2 12
BX3 X2*X4 PP I/O BUFFER INCREMENT
BX4 -X2*X4 CLEAR PP I/O BUFFER INCREMENT
LX4 59-0
PL X4,PIOX2 IF NO PP BUFFER ASSIGNED
LX3 12
MX2 -59
BX6 -X2*X4 CLEAR BUFFER RESERVATION FLAG
LX6 0-59
TX3 X3,ECSB FWA PP BUFFER
SA6 A4
SA7 X3
PIOX2 SX6 B1
BX7 X5+X1
SX3 A5+B1
LX6 46-0
+ SA3 X3+B1 **** PERFORM IN ONE WORD ****
BX6 X6*X3 **** PERFORM IN ONE WORD ****
BX6 X7+X6 **** PERFORM IN ONE WORD ****
SA6 A3 **** PERFORM IN ONE WORD ****
NG X3,/PROGRAM/PRG1 IF EXIT FROM PROGRAM MODE
EQ /MONITOR/PPR1 EXIT FROM MONITOR MODE
PIOR SPACE 4,10
** PIOR - REISSUE *PIOM* REQUEST.
*
* ENTRY (A5) = PP *OR* ADDRESS.
* (B5) = *PIOM* SUBFUNCTION - 1.
* (MB+1) .LT. 0, IF EXIT FROM PROGRAM MODE.
*
* EXIT TO /ECS/PIOX1, IF PP BUFFER NOT TO BE RELEASED.
* TO /ECS/PIOX2, IF PP BUFFER TO BE RELEASED.
PIOR SA5 A5 SET BIT 59 OF *OR* FOR REISSUE
MX1 1
EQ B5,B1,PIOX2 IF WRITE PRU FUNCTION
EQ PIOX1 RELEASE PP BUFFER
PIOP SPACE 4,10
** PIOP - SWITCH TO PROGRAM MODE *PIOM*.
*
* ENTRY (A0) = CPU NUMBER.
* (A5) = PP *OR* ADDRESS.
* (B6) = PROGRAM MODE PROCESSOR ADDRESS.
*
* EXIT TO /PROGRAM/PMR.
PIOP SX6 B6 SAVE PROGRAM MODE RETURN ADDRESS
SA3 A5+2 SET PROGRAM MODE FLAG
LX6 18
MX1 1
BX6 X6+X3
SA5 A5
BX6 X6+X1
SA6 A3
EQ /MONITOR/PMR SWITCH TO PROGRAM MODE
TITLE ECS PROGRAM MODE ROUTINES.
QUAL PROGRAM
PDT SPACE 4,10
** PDT - *PIOM* ECS DIRECT TRANSFER (SF = 3, 4).
*
* ENTRY IN PROGRAM MODE ONLY.
* REFER TO *PIP* EXIT CONDITIONS.
*
* EXIT TO /PROGRAM/HNG, IF ILLEGAL SECTOR OR A SHORT SECTOR
* WAS ENCOUNTERED AND NOT READING TO EOR.
* TO /ECS/PIOX, IF UNRECOVERED HARDWARE ERROR, ADDRESS
* ERROR OR TRANSFER COMPLETE.
PDT11 SX1 ADDE SET *ADDRESS ERROR* STATUS
EQ /ECS/PIOX RETURN ERROR
PDT SA5 A5 VALIDATE *OR* PARAMETERS
SB7 X5
TA4 EQDE,EEN CHECK TRACK COUNT
MX0 -12
BX4 -X0*X4
LX4 3
SA4 X4 + TDGL
ERRNZ TDGL
LX5 -18
LX4 12
BX0 -X0*X4 TRACK COUNT
SX6 X5
NG B7,HNG IF ILLEGAL ADDRESS
LX0 1
MX2 -12
SA4 A5+B1 FETCH *MB* PARAMETERS
NG X6,HNG IF ILLEGAL SECTOR COUNT / LWA+1
LX4 -12
BX3 -X2*X4 CURRENT SECTOR
SB7 B1+B1
LX4 -11
SB3 X3
BX4 -X2*X4 CURRENT TRACK * 2
IX0 X0-X4
TB6 TCNT
NG X0,PDT11 IF TRACK .GT. LIMIT
BX0 X4
SX7 B5-B7
GE B3,B6,PDT11 IF ILLEGAL SECTOR
SA2 RWEI+X7 GET ECS TRANSFER INSTRUCTION
TLX0 4-1,TNSC TRACK * SECTOR LIMIT
TA0 TKLB,TCNT = *TKLW*
TLX4 10-1,TNSC
BX7 X2
IX0 X0+X4 WORDS/TRACK + LINK WORDS
LX5 59-38+18
AX6 24-18
SA7 PETA STORE READ / WRITE INSTRUCTION
SX1 DSTE SET *DEVICE ERROR* STATUS
SX7 B0+ CLEAR EOR READ INDICATOR
SA7 PAS4
EQ B5,B7,PDT1 IF READ REQUEST
SB4 B6-B3 SECTOR COUNT TO END OF TRACK
SB2 A0-B6 (B2) = *TKLB*
SX2 A0+
LX2 30
BX0 X2+X0
RE B6 PRESERVE LINKAGE WITHIN TRACK
PER /ECS/PIOX PROCESS PARITY ERROR
SB3 B0
IX0 X0+X3
SA0 B2+X3
MX7 -24
BX0 -X7*X0
SX2 A0
LX2 30
BX0 X2+X0
WE B4 TRANSFER LINKAGE WORDS THRU ECS
PER /ECS/PIOX PROCESS PARITY ERROR
ZR X3,PDT6 IF FILE ON TRACK BOUNDARY
SB3 B6 SET LINKAGE BUFFER OFFSET
SA0 A0+B6
BX0 -X7*X0
SX2 A0
LX2 30
BX0 X2+X0
RE B4 ASSEMBLE LINKAGE BUFFER
PER /ECS/PIOX PROCESS PARITY ERROR
PDT1 PL X5,PDT6 IF NOT READ TO EOR
MX6 59 (X6) = -1
SB4 B6 SET TO READ LINKAGE
BX2 X4
SB2 60-7
EQ PDT3 SEARCH FOR EOR
PDT2 SB3 B0+ RESET LINKAGE INDEX
LX1 42-59
MX7 -11-4
AX1 48-4
PL X1,HNG IF BAD SECTOR LINKAGE
BX2 -X7*X1
SX0 X2+ TRACK * 20B
SA6 A1
TLX0 0,TNSC COMPUTE LINK WORDS PER TRACK
TLX2 6,TNSC COMPUTE WORDS PER TRACK
SX1 -DSTE SET *DEVICE ERROR* STATUS
IX0 X0+X2 LINKAGE ADDRESS
PDT3 MX5 -24
BX0 -X5*X0
SX5 A0+
LX5 30
BX0 X5+X0
RE B4 READ LINKAGE
PER /ECS/PIOX PROCESS PARITY ERROR
PDT4 EQ B3,B6,PDT2 IF END OF TRACK
TA1 B3+TKLB,TCNT CHECK SECTOR LINKAGE
SB3 B3+B1 ADVANCE SECTOR NUMBER
BX0 X1
LX1 59-42
SX6 X6+B1 ADVANCE SECTOR COUNT
BX7 X7-X7
AX0 48-0
ZR X0,PDT4.1 IF EOF OR EOI TRACK
NG X1,PDT4 IF NOT EOR
AX7 X1,B2 SHORT SECTOR WORD COUNT
PDT4.1 TLX2 36-10,-TNSC POSITION EOR TRACK
SX5 B3-B1
IX7 X2+X7
LX5 18 POSITION EOR SECTOR
BX7 X7+X5
SA7 A2-B7 SAVE WORD COUNT + EOR TRACK AND SECTOR
ERRNZ PAS4+2-RWEI CODE DEPENDS ON VALUE
NE B3,B6,PDT5 IF NEXT SECTOR WITHIN TRACK
LX1 42-59
MX7 -11-4
SB3 B0 SET NEXT SECTOR
AX1 48-4
BX2 -X7*X1 EXTRACT NEXT TRACK
LX2 36-4
PDT5 SX5 B3 SAVE FILE POSITION AFTER EOR
AX2 36-12
BX7 X2+X5
SA7 A7+B1
PDT6 SB2 X3 CURRENT SECTOR
BX5 X6 SECTOR COUNT
SX1 B1
BX6 X6-X6
ZR X3,PDT7 IF CURRENT POSITION ON TRACK BOUNDARY
SX6 B6-B2 SECTOR COUNT FOR PASS 1
IX2 X5-X6
PL X2,PDT7 IF PASS 1 .GE. TOTAL REQUEST
BX6 X5
SX1 B0
PDT7 IX2 X5-X6 SECTORS REMAINING AFTER PASS 1
BX7 X2
SA6 PAS1
TLX7 3,-TNSC TRACK COUNT FOR PASS 2
AX7 7
IX1 X1+X7
SA7 A6+B1
TLX7 4,TNSC
IX7 X2-X7 SECTOR COUNT FOR PASS 3
TLX4 60-10,-TNSC
BX2 X1+X7
SA7 A6+B7
NZ X2,PDT8 IF PASS 2 AND/OR PASS 3 SET
SA7 A6 CLEAR PASS 1
SA6 A6+B7 SET PASS 3 = PASS 1
PDT8 TX1 A5-1,-FP
SB4 MECB BLOCK TRANSFER SIZE
LX1 PPXES-PPCES
BX6 X5 SECTOR COUNT
TA1 X1+ACPP,FPX GET CP/PCP ASSIGNMENT
SA5 A5+
MX2 -12
AX1 24
SA3 X1+FLSW GET RA AND FL OF CP/PCP
BX1 -X2*X3 FL/100B
LX3 -RSHF
MX2 -RMSK
BX3 -X2*X3 RA/100B
LX1 6 FL
BX7 X5 OUTPUT REGISTER
LX3 6 RA
SB2 X5 RELATIVE CM ADDRESS
LX7 59-38
BX2 X6
SB6 X1 FL
SA0 X3+B2 ABSOLUTE CM ADDRESS
SX0 X5
IX3 X3+X0
SX0 X6+
PL X7,PDT10 IF NOT READ TO EOR
SA1 PAS4
SX0 X1+
ZR X0,PDT9 IF NO SHORT SECTOR
SX2 X2+B1 ADVANCE SECTOR COUNT
IX5 X5+X1 ADVANCE CM ADDRESS
PDT9 AX7 59-38+18
SB2 X7
GT B2,B6,PET7 IF LWA+1 OF TRANSFER .GT. FL
BX0 X0-X0
ZR B2,PDT10 IF LWA+1 OF TRANSFER NOT SPECIFIED
SB6 X7 CHANGE FL CHECK
PDT10 LX6 6 WORD COUNT = SECTOR COUNT * 100B
IX5 X5+X6 ADVANCE CM ADDRESS IN *OR*
LX0 24
SB2 X5
GT B2,B6,PET7 IF LWA+1 OF TRANSFER .GT. FL
IX7 X5-X0 DECREMENT SECTOR COUNT IN *OR*
SA1 A5+B1
NG B2,HNG IF ILLEGAL LWA+1 SPECIFICATION
LX2 48
SA7 A5
MX5 12
IX6 X1+X2 UPDATE SECTORS TRANSFERED IN *MB*
BX6 X5*X6 CLEAR POSSIBLE OVERFLOW INTO *CHRV*
BX2 -X5*X1 CLEAR OLD SECTOR COUNT
BX6 X6+X2 MERGE NEW SECTOR COUNT
SX5 B7+B7
TLX5 0,TNSC
SB6 X5 BLOCK COUNT
ERRNZ 2000B/MECB-4 CODE DEPENDS ON VALUE
SA6 A1+
SX7 PET2 SET RETURN FROM READ/WRITE PROCESSOR
SA7 PETB
SA2 PAS2
MX7 12
SB2 X2 TRACK COUNT FOR PASS 2
LX7 -36
SA2 A2-B1
BX5 X7*X6 EXTRACT CURRENT SECTOR
AX5 12-6
ZR X2,PET IF NO PASS 1
SB2 B2+B1
BX6 -X7*X6 CLEAR CURRENT SECTOR
SB6 X2 SECTOR COUNT FOR PASS 1
SB4 100B BLOCK TRANSFER SIZE
SA6 A6
* PROCESS ECS TRANSFER.
PET ZR B2,PET3 IF END OF FULL TRACK TRANSFERS
TX0 X5,TCNT
TLX4 4,TNSC TRACK * LINKAGE WORDS PER TRACK
IX0 X0+X4
LX4 6 TRACK * WORDS PER TRACK
IX0 X0+X4
PET1 MX7 -24
BX0 -X7*X0
BX7 X3
LX7 30
BX0 X0+X7
SX1 PARE SET *PARITY ERROR* STATUS
SB6 B6-B1 DECREMENT BLOCK COUNT
PETA RE B4 READ ECS BLOCK
* WE B4 (WRITE ECS BLOCK)
PER /ECS/PIOX PROCESS PARITY ERROR
SX7 B4
IX3 X7+X3 ADVANCE CM ADDRESS
SA0 X3
IX0 X0+X7 ADVANCE ECS ADDRESS
NZ B6,PET1 IF NOT END OF TRANSFER
SA1 PETB
BX5 X5-X5 SET NEXT SECTOR = 0
SB4 X1 RETURN ADDRESS
JP B4 EXIT TO POST PROCESSOR
* SET NEXT TRACK.
PET2 TLX4 60-10,-TNSC REPOSITION TRACK NUMBER
MX6 -2
BX7 -X6*X4 TRT BYTE INDEX
AX2 B7,X4 TRT WORD INDEX
SB4 MECB WORD COUNT PER ECS ACCESS
TA4 TRLL,EMS CALCULATE TRT ADDRESS
IX4 X2+X4
SA2 X4 READ TRT WORD
SB2 B2-B1 DECREMENT TRACK COUNT
LX7 2 BYTE INDEX * 4
LX4 B1,X7 BYTE INDEX * 8
IX4 X7+X4 BYTE INDEX * 12
SB6 X4 SET SHIFT COUNT
MX6 -11
LX4 B6,X2 POSITION NEXT TRACK
AX4 48
PL X4,HNG IF NO NEXT TRACK
SX1 B7+B7
TLX1 0,TNSC
SB6 X1 BLOCK COUNT
ERRNZ 2000B/MECB-4 CODE DEPENDS ON VALUE
BX4 -X6*X4 REMOVE TRACK BIT
EQ B5,B7,PET IF READ REQUEST
MX6 1
LX4 48
SA0 B3+TKLB ADDRESS OF LINKAGE BUFFER
BX1 X6+X4
LX6 1-18 WORD COUNT = 100B
SX7 2020B
TLX7 0,TNSC
IX0 X0-X7 ECS ADDRESS FOR SECTOR LINKAGE
BX6 X1+X6
R= X1,ERRS RETURN STATUS = UNRECOVERABLE ERROR
TA6 A0-1,TCNT
MX7 -24
BX0 -X7*X0
SX7 A0
SB7 B4
LX7 30
BX0 X0+X7
TB4 0,TCNT
WE B4
PER /ECS/PIOX PROCESS PARITY ERROR
SB3 B0+
AX4 48 REPOSITION TRACK NUMBER
SA0 X3 RESTORE CM ADDRESS
SB4 B7
SB7 B1+B1
PET3 NZ B2,PET IF MORE TRACKS
MX6 12
SA2 A5+B1 FETCH *MB* PARAMETERS
LX6 -24
SX7 X4+4000B
BX6 -X6*X2 CLEAR TRACK
SB4 100B
SA2 PAS3 CHECK PASS 3
SB6 X2+ PASS 3 SECTOR COUNT
LX7 24
BX6 X6+X7 SET CURRENT TRACK
LX2 12
IX6 X6+X2 UPDATE CURRENT SECTOR
SX7 PET6 SET RETURN FROM PASS 3
SA7 PETB
SA6 A5+1
PET4 SB2 B1
NZ B6,PET IF PASS 3 PRESENT
SA1 A2+B1 FETCH PASS 4
ZR X1,/ECS/PIOX IF NOT READ TO EOR
BX7 X7-X7
SA7 A1 CLEAR PASS 4 INDICATOR
SB4 X1 SET WORD COUNT
AX1 18
BX4 X1
SB6 B1 SET BLOCK COUNT FOR FINAL READ
SX5 X1 SECTOR NUMBER FOR FINAL READ
MX7 24
SA1 A1+B1 FETCH FILE POSITION AFTER EOR
SX2 B1
LX7 -24
BX6 -X7*X6 REMOVE CURRENT TRACK AND SECTOR
LX2 35
LX1 12
BX2 X2+X1 ADD TRACK BIT
LX5 6 SECTOR * 100B
BX6 X6+X2 SET FILE POSITION AFTER EOR
AX4 18 TRACK NUMBER FOR FINAL READ
SX7 PET4 SET RETURN FROM FINAL READ
SA7 PETB
SA6 A6 STORE *MB* PARAMETERS
NZ B4,PET IF NOT EMPTY SECTOR
BX1 X1-X1 RETURN STATUS = NO ERROR
JP /ECS/PIOX EXIT - FUNCTION COMPLETE
PET6 EQ B5,B7,PET4 IF READ REQUEST
LX6 -12
MX2 -12
BX0 X4
AX4 10-4
BX2 -X2*X6 EXTRACT CURRENT SECTOR
IX0 X0+X4 ECS ADDRESS OF LINKAGE
SX2 X2+B3
BX7 X7-X7
SA3 X2+TKLB SAVE LINKAGE WORD
SA0 B3+TKLB
SX1 DSTE SET *DEVICE ERROR* STATUS
SA7 A3+ SET EOI IN LINKAGE BLOCK
SX7 A0
LX7 30
BX0 X7+X0
LX6 X3
TB4 0,TCNT
WE B4
PER /ECS/PIOX PROCESS PARITY ERROR
BX1 X1-X1 RETURN STATUS = NO ERROR
SA6 A3 RESTORE LINKAGE WORD
JP /ECS/PIOX EXIT - FUNCTION COMPLETE
PET7 SA5 A5 CHECK REQUEST
R= X1,IFLS SET STATUS = INSUFFICIENT FL FOR LOAD
LX5 59-38
NG X5,/ECS/PIOX IF READ TO EOR
JP HNG HANG PP
PETB BSS 1 RETURN ADDRESS
PAS1 CON 0 PASS 1 SECTOR COUNT
PAS2 CON 0 PASS 2 TRACK COUNT
PAS3 CON 0 PASS 3 SECTOR COUNT
PAS4 CON 0,0 PASS 4 WORD COUNT (READ TO EOR ONLY)
RWEI RE B4
PER /ECS/PIOX PROCESS PARITY ERROR
+ WE B4
PER /ECS/PIOX PROCESS PARITY ERROR
SPACE 4,10
* TRACK LINKAGE BUFFERS.
*
* SPACE IS ALLOCATED FOR A MAXIMUM TRACK SIZE (200B SECTORS).
* *CPUMLD* WILL REDUCE THE BLOCK *LWA* FOR SMALLER TRACK SIZES.
* *TKLW* IS NOW REFERENCED BY *TKLB+TCNT*.
TKLB BSS 0
.A SET 1
.B DUP 200B
VFD 12/.A,12/100B,36/0
.A SET .A+1
.B ENDD
BSS 200B *TLKW*
QUAL ECS
ENDBLK
BLOCK EEC,(EXTERNAL ECS PROCESSING ROUTINES.),ECS
SPACE 4,10
** ASSEMBLY CONSTANTS.
FRWC EQU 1 FLAG REGISTER FUNCTION WORD COUNT
CFR SPACE 4
** CFR - CLEAR FLAG REGISTER BIT.
*
* ENTRY (B3) = CPU NUMBER TO BE RESTORED TO (A0).
* (B4) = BIT NUMBER TO CLEAR.
* (B6) = EXIT ADDRESS.
*
* EXIT (A0) = CPU NUMBER = (B3).
*
* USES X - 0, 2.
* A - 0.
CFR SA0 ZERL SET WORD TO WRITE TO ECS
TX0 B4+ETLT*100B+FRET,ECLT
TX0 X0,TCNT
SX2 A0+
LX2 30
BX0 X0+X2
WE 1 CLEAR WHO HAS BIT INTERLOCKED
RJ ECH HANG ON WRITE ERROR
SX2 B1+
TSX0 (403B,ESM,7B)
LX0 21
LX2 X2,B4 POSITION FLAG BIT
BX0 X0+X2
RE FRWC CLEAR FLAG REGISTER BIT
RJ ECH HANG ON HALF EXIT
SA0 B3 RESTORE CPU NUMBER
JP B6 RETURN
SFR SPACE 4
** SFR - SET FLAG REGISTER BIT.
*
* ENTRY (B3) = CPU NUMBER TO BE RESTORED TO (A0).
* (B4) = BIT NUMBER TO SET.
* (B6) = EXIT ADDRESS.
*
* EXIT (X7) = 12/0,12/7777B,36/0 IF BIT ALREADY SET.
* (X7) = 0 IF BIT NOT PREVIOUSLY SET.
* (A0) = CPU NUMBER = (B3).
*
* USES X - 0, 2, 7.
* A - 0.
SFR SX2 B1
TSX0 (400B,ESM,4B)
LX0 21 SET FLAG REGISTER FUNCTION
LX2 X2,B4 POSITION BIT TO SET
BX0 X0+X2
SA0 MMFL ENSURE (A0) .LT. FL FOR FLAG OPERATION
SX2 A0
MX7 12
LX2 30
LX7 -12
RE FRWC TEST AND SET FLAG BIT
EQ SFR1 IF BIT PREVIOUSLY SET
TX0 B4+ETLT*100B+FRET,ECLT
TX0 X0,TCNT
SX7 B0
BX0 X2+X0
WE 1 WRITE INDICATION OF WHICH MACHINE HAS INTER
RJ ECH HANG ON WRITE ERROR
SFR1 SA0 B3 RESTORE CPU NUMBER
JP B6 RETURN
TITLE EXTERNAL ECS PARITY ERROR PROCESSING.
SPACE 4,10
** MC - INPUT REGISTER FOR ECS PARITY ERROR PROCESSING ROUTINE.
MC VFD 18/0L1MC
TVFD 6/,SC
TVFD 12/,EEM
VFD 24/0
ECH SPACE 4,10
** ECH - EXTENDED MEMORY ERROR HANG.
*
* ENTRY IS VIA RETURN JUMP FROM THE LOWER HALF OF THE ECS
* INSTRUCTION IN THE CASE OF A FLAG REGISTER CLEAR FUNCTION.
* IN THE CASE OF AN WRITE ERROR REPORTING IS DONE BY *RPE*
* WHICH THEN EXITS TO *ECH1* IF THE ERROR IS UNRECOVERED.
ECH PS ENTRY
ECH1 SX1 ECHM SET ERROR MESSAGE ADDRESS
SB5 ECH2 SET *MSC* RETURN
EQ /MONITOR/MSC SEND MESSAGE TO SYSTEM CONTROL POINT
ECH2 EQ * HANG CPUMTR
PER SPACE 4
** PER - PROCESS ECS PARITY ERROR. (MONITOR MODE)
*
* ENTRY IS VIA RETURN JUMP FROM THE LOWER HALF OF THE ECS
* INSTRUCTION.
*
* EXIT RETURNS TO CALLER IF ERROR RECOVERED ON RETRY.
* (X0) = ADDRESS OF ECS PARITY ERROR, IF UNRECOVERED.
*
* USES X - NONE.
* B - NONE.
* A - 1, 2, 6, 7.
*
* CALLS RPE.
PERX SB7 X1+ RESTORE (B7)
SA1 A1+1 RESTORE (X1)
PER PS 0 ENTRY/EXIT
SA7 PERA SAVE REGISTERS
BX7 X5
SX5 B7
SB7 PERX *RPE* RETURN ADDRESS
EQ RPE
PERA BSS 9 REGISTER SAVE BUFFER
RPE SPACE 4
** RPE - RECOVER AND REPORT ECS PARITY ERROR.
* THE WORD COUNT FOR ECS READ/WRITES MUST BE EXPRESSED AS
* A CONSTANT OR AS A CONSTANT + (B4).
*
* ENTRY (X5) = VALUE TO BE RESTORED TO B7.
* (X7) = VALUE TO BE RESTORED TO X5.
* (B7) = EXIT ADDRESS.
* (B7)+1 = WORD RETURN JUMPED TO FROM ECS INSTRUCTION.
* (A7) = FIRST WORD ADDRESS OF REGISTER SAVE BUFFER.
* (X0) = ADDRESS OF ECS PARITY ERROR, IF UNRECOVERED.
*
* EXIT (X1) = VALUE TO BE RESTORED TO B7.
RPE SA6 A7+B1 SAVE REGISTERS - (X6)
LX6 X4
SA7 A6+B1 SAVE (X5)
SA6 A7+B1 SAVE (X4)
BX7 X3
LX6 X2
SA7 A6+B1 SAVE (X3)
SA6 A7+B1 SAVE (X2)
SX7 A0
MX2 -18
SX3 B3
BX7 -X2*X7
SX4 B4
BX3 -X2*X3
LX7 18
BX4 -X2*X4
BX7 X3+X7
SX3 B6
BX6 -X2*X5
LX7 18
BX3 -X2*X3
LX6 18
BX7 X7+X4
SX4 B5
SA7 A6+B1 SAVE (A0), (B3), (B4)
BX4 -X2*X4
BX6 X6+X3
LX6 18
BX6 X6+X4
SA6 A7+B1 SAVE (B7), (B6), (B5)
BX7 X1
SA7 A6+B1 SAVE (X1)
SA1 B7+B1 FIND ECS INSTRUCTION
SB6 PERX
AX1 30
SA2 X1-1 READ INSTRUCTION
AX2 30
SX3 X2 SET CONSTANT PORTION OF WORD COUNT
LX2 59-20 POSITION REGISTER PORTION OF WORD COUNT
PL X2,RPE1 IF (B4) NOT USED IN WORD COUNT
SX3 X3+B4
RPE1 SA1 MC
BX1 X1+X3 MERGE WORD COUNT IN CALL
MX6 -3
BX6 -X6*X2 EXTRACT READ/WRITE PORTION OF INSTRUCTION
LX6 18
BX5 X1+X6 *1MC* CALL
BX1 X5
BX6 X5
SA6 RPEA SAVE *1MC* CALL
SB3 RPE2 *APS* RETURN ADDRESS
NE B6,B7,/PROGRAM/APS IF IN PROGRAM MODE
SX7 B7 SAVE (B7)
SB3 RPE1.1 *CAL* *ACB* RETURN ADDRESS
BX1 X1-X1 PRESET NO BUFFER AVAILABLE
SA7 /MONITOR/T1
SB6 /MONITOR/ACB *CAL* RETURN ADDRESS
TB7 SCA SET SYSTEM CONTROL POINT ADDRESS
EQ /MONITOR/CAL CHECK ACTIVITY LIMIT
RPE1.1 ZR X1,RPE1.3 IF NO BUFFER AVAILABLE
SB3 RPE1.2 *APQ* RETURN ADDRESS
BX7 X1
BX6 X5 *1MC* CALL
SA7 /MONITOR/APQA PARAMETER WORD
SB4 B0 SET LIBRARY SEARCH NEEDED
EQ /MONITOR/APQ ASSIGN PP
RPE1.2 SA1 /MONITOR/APQA GET BUFFER ADDRESS
RPE1.3 SA2 /MONITOR/T1 RESTORE (B7)
SB7 X2+ RESTORE (B7)
RPE2 SA2 RPEA *1MC* PP CALL
SB5 X2 WORD COUNT
LX2 -2
BX5 X0
SB4 X2 READ/WRITE FLAG
SB3 B0+ SET NO ERRORS REPORTED
ZR X1,RPE6 IF NO BUFFER ASSIGNED
SX6 B0+ INITIALIZE BUFFER
SA6 X1+4
SA6 X1+7
SA6 X1+1
* RETRY WITH SINGLE WORD TRANSFERS.
RPE6 LX0 30 READ DATA
ERX2 X0
SX3 501B SET UNRECOVERED WITH GOOD DATA PRESENT
LX0 30
BX6 X2 POSSIBLE BAD DATA (READ OPERATION)
* GOOD DATA (WRITE OPERATION)
NG B4,RPE8 IF WRITE
SX3 601B SET UNRECOVERED WITH BAD DATA PRESENT
RE 1
EQ RPE7 IF ERROR
LX0 30
ERX2 X0 VERIFY DATA
LX0 30
BX7 X2-X6
SX3 301B RECOVERED WITH GOOD AND BAD DATA
CX7 X7
ZR X7,RPE9 IF DATA VERIFIES
RPE7 GT B3,B1,RPE9 IF TWO ERRORS REPORTED
LX3 -18
SB3 B3+B1 INCREMENT ERRORS REPORTED
ZR X1,RPE9 IF NO BUFFER ASSIGNED
LX3 -18
MX4 -24
LX0 30
BX7 -X4*X0 CM ADDRESS OF TRANSFER
LX0 30
BX4 -X4*X0 ECS ADDRESS OF TRANSFER
LX7 24
BX3 X3+X4
BX7 X7+X3
SA7 A6 STATUS WORD
SA6 A7+B1 BAD DATA
BX7 X2
BX6 X6-X6
SA7 A6+B1 GOOD DATA
SA6 A7+B1
EQ RPE9 CONTINUE ONE-WORD TRANSFER
RPE8 WE 1
EQ RPE7
RPE9 SA0 A0+B1 INCREMENT ADDRESSES
SX3 B1
SB5 B5-B1
IX0 X0+X3
LX3 30
IX0 X0+X3
GT B5,B0,RPE6 IF MORE WORDS TO CHECK
ZR X1,RPE9.2 IF NO BUFFER ASSIGNED
NZ B3,RPE9.1 IF NOT ALL ERRORS RECOVERED
MX0 -24
BX7 -X0*X5 ECS ADDRESS
SX3 B1 RECOVERED WITH NO GOOD OR BAD DATA
LX5 -30
LX3 -18
BX0 -X0*X5 CM ADDRESS
BX6 X3+X7
LX0 24
LX5 30
BX6 X6+X0
SA6 A6+ STATUS WORD
RPE9.1 SA1 X1 SET BUFFER FULL FLAG
MX6 1
BX6 X1+X6
SA6 A1
RPE9.2 ZR B3,RPE12 IF ERROR RECOVERED
* SET UNRECOVERED ERROR EXIT ADDRESS.
SA1 TPER-1
MX4 18
SA2 B7+1
LX4 -12
SB5 RPE12 *MSC* RETURN ADDRESS
RPE10 SA1 A1+B1
BX6 X1-X2
BX7 X4*X6
LX1 30
NZ X7,RPE10 IF EXIT ADDRESS NOT FOUND
BX7 X6-X1
SA7 A2 STORE JUMP TO EXIT ADDRESS
SX1 ECEM
JP /MONITOR/MSC SET *EXTENDED MEMORY ERROR.* MESSAGE
* RESTORE REGISTERS.
RPE12 SA1 B7+4
SA2 A1+B1
BX0 X5 RESTORE (X0)
BX7 X1 RESTORE (X7)
LX6 X2 RESTORE (X6)
SA1 A2+B1 RESTORE (X5)
SA2 A1+B1 RESTORE (X4)
BX5 X1
SA1 A2+B1 RESTORE (X3)
LX4 X2
BX3 X1
SA2 A1+B1 RESTORE (X2)
SA1 A2+B1
SB4 X1 RESTORE (B4)
AX1 18
SB3 X1 RESTORE (B3)
AX1 18
SA0 X1 RESTORE (A0)
SA1 A1+B1
SB5 X1 RESTORE (B5)
AX1 18
SB6 X1 RESTORE (B6)
AX1 18
JP B7
RPEA BSS 1 *1MC* PP CALL WORD
ECHM CON 10H HUNG -
ECEM DATA C* EXTENDED MEMORY ERROR.*
RSE SPACE 4,10
** RSE - REPORT STORAGE MOVE EXTENDED MEMORY ERROR.
*
* ENTRY (A0) = CM ADDRESS.
* (X0) = 30/ CM ADDRESS, 30/ ECS ADDRESS.
* (X1) = WORD COUNT.
RSE PS ENTRY/EXIT
SA6 RSEA SAVE (X6)
BX6 X0
SA6 A6+B1 SAVE (X0)
BX6 X2
SA6 A6+B1 SAVE (X2)
BX6 X3
SA6 A6+B1 SAVE (X3)
BX6 X4
SA6 A6+B1 SAVE (X4)
BX6 X5
SA6 A6+B1 SAVE (X5)
SX6 A0+
SA6 A6+1 SAVE (A0)
BX5 X1 WORD COUNT
SA1 SMRL
LX1 59-37
NG X1,RSE5 IF PREVIOUS ERROR
SB3 RSE1 *ACB* RETURN ADDRESS
EQ /MONITOR/ACB ASSIGN COMMUNICATION BUFFER
RSE1 ZR X1,RSE5 IF NO BUFFER ASSIGNED
SB4 X5
LX5 24
BX6 X5+X1
SA6 RSEB DATA FOR *1MC* CALL
SX6 B1
SA2 SMRL SET EXTENDED MEMORY ERROR DURING MOVE
LX6 37
BX6 X6+X2
SA6 A2
SB3 B0 INITIALIZE NO ERRORS
BX6 X6-X6
SA6 X1+B1
RSE2 SX3 601B UNRECOVERED WITH BAD DATA
LX0 30
ERX2 X0 READ BAD DATA
LX0 30
RE 1
EQ RSE6 IF ERROR
LX0 30
ERX4 X0 READ GOOD DATA
LX0 30
SX3 301B RECOVERED WITH GOOD AND BAD DATA
BX5 X4-X2
CX5 X5
NZ X5,RSE6 IF COMPARE ERROR
RSE3 SX3 B1
IX0 X0+X3 INCREMENT ECS ADDRESS
LX0 30
IX0 X0+X3 INCREMENT CM ADDRESS
SA0 X0+
LX0 30
SB4 B4-B1
NZ B4,RSE2 IF MORE WORDS TO CHECK
NZ B3,RSE4 IF ERRORS REPORTED
SA2 RSEA+1 (X0)
MX0 -24
BX5 -X0*X2 ECS ADDRESS
SX3 B1 RECOVERED - NO GOOD OR BAD DATA
LX2 -30
LX3 -18
BX0 -X0*X2 CM ADDRESS
BX6 X3+X5
LX0 24
BX6 X6+X0
SA6 A6 SET STATUS WORD IN BUFFER
RSE4 SA1 X1 SET BUFFER COMPLETE
MX6 1
BX6 X6+X1
SA6 A1
RSE5 SA1 RSEA RESTORE REGISTERS
BX6 X1 RESTORE (X6)
SA1 A1+B1
BX0 X1 RESTORE (X0)
SA2 A1+B1 RESTORE (X2)
SA3 A2+B1 RESTORE (X3)
SA4 A3+B1 RESTORE (X4)
SA1 A4+B1
BX5 X1 RESTORE (X5)
SA1 A1+B1
SA0 X1 RESTORE (A0)
EQ RSE RETURN
RSE6 GT B3,B1,RSE3 IF TWO ERRORS REPORTED
SB3 B3+B1
MX6 -24
BX7 -X6*X0 ECS ADDRESS
LX0 30
BX6 -X6*X0 CM ADDRESS
LX0 30
LX3 -18
LX6 24
BX7 X7+X3
BX6 X6+X7
SA6 A6 STATUS WORD
BX6 X2 BAD DATA
BX7 X4 GOOD DATA
SA6 A6+B1
SA7 A6+B1
BX6 X6-X6
SA6 A7+B1
EQ RSE3 PROCESS NEXT WORD
RSEA BSS 7 REGISTER SAVE AREA
RSEB BSS 1 *1MC* CALL DATA
TSM SPACE 4,10
** TSM - EXTENSION FOR EXTERNAL ECS PARITY ERROR PROCESSING
* DURING STORAGE MOVE.
*
* EXIT (X4) = RESTORED TO (SMRL) SHIFTED IF ENTRY AT *TSM4*.
* TO */MONITOR/BNJ1* IF ENTRY AT *TSM8*.
* TO */MONITOR/TSM1* IF ENTRY AT *TSM4*.
*
* USES X - 1, 2, 4, 6, 7.
* A - 1, 2, 4, 6, 7.
* B - 3, 4, 6.
*
* CALLS /MONITOR/APQ,/MONITOR/CAL.
TSM4 SA2 RSEB GET ERROR DATA
SA1 MC
SB4 B0 SET LIBRARY SEARCH NEEDED
BX7 X2
SA7 /MONITOR/APQA PARAMETER WORD (BUFFER ADDRESS)
AX2 24
BX6 X1+X2
SB6 TSM5 *CAL* RETURN ADDRESS - NO LIMIT
SB3 TSM6 *CAL* RETURN ADDRESS - IF LIMIT
EQ /MONITOR/CAL CHECK ACTIVITY LIMIT
TSM5 SB3 TSM7 *APQ* RETURN ADDRESS
EQ /MONITOR/APQ ASSIGN PP
TSM6 SA1 /MONITOR/APQA CLEAR BUFFER INTERLOCK
BX6 X6-X6
SA6 X1
TSM7 SA4 SMRL RESTORE (X4)
NO
LX4 59-37
EQ /MONITOR/TSM2 RE-ENTER MAIN PROCESSING
* ERROR OCCURED DURING STORAGE MOVE OF USER ECS.
* JOB MUST NOT BE RESTARTED, AND *MTR* WILL SET AN
* ERROR FLAG ON THE JOB AND ABORT IT.
TSM8 SX6 B1 SET XM ERROR RESPONSE
LX6 36
SA6 SMRL SET RESPONSE
EQ /MONITOR/BNJ1 BEGIN NEW JOB
TITLE EXTERNAL ECS PROGRAM MODE ROUTINES.
QUAL PROGRAM
MSE SPACE 4
** MSE - MOVE STORAGE THROUGH ECS.
*
* ENTRY (B7) = CP/PCP ADDRESS.
*
* EXIT TO *MST2* TO UPDATE REFERENCE ADDRESS.
*
* USES X - 0, 1, 3, 4, 5, 6, 7.
* B - 2, 3, 4, 5.
* A - 1, 5, 6, 7.
MSE TA1 EEN CHECK ECS STATUS
SB4 BTRI
LX1 59-49
NO
NG X1,MST IF EXTENDED MEMORY OFF OR DOWN
SB6 MSE1 SET *SFR* RETURN
TNO /ECS/SFR,MMF SET *BTRI* INTERLOCK
MSE1 NZ X7,MST IF UNABLE TO INTERLOCK FLAG REGISTER
SA5 SMIN
SA2 B7+FLSW GET FL STATUS WORD
MX1 -12
BX4 -X1*X2
LX5 6
LX2 -12
NO
LX4 6 FL
BX3 -X1*X2
LX2 12+12
LX3 6 RA
BX2 -X1*X2
LX2 6 NFL
SB5 X5+ SET MOVE INCREMENT
IX3 X3-X2 SUBTRACT NFL SIZE FROM RA
TX0 SMLT*100B,ECLT
TX0 X0,TCNT
IX4 X4+X2 ADD NFL SIZE TO FIELD LENGTH
MX6 30
SB4 X4
LX5 30
SB6 30
SX2 100B
NG X5,MSE3 IF DOWNWARD MOVE
IX3 X3+X4
IX3 X3-X2
BX2 -X2
SA0 X3
LX4 X3,B6
BX0 X4+X0
* MOVE 100B WORDS THROUGH ECS.
MSE2 WE 100B WRITE 100B WORDS
EQ MSE4 IF EXTENDED MEMORY ERROR
SA0 A0+B5 SET ADDRESS PLUS INCREMENT
IX0 X0+X5
RE 100B
EQ MSE4 IF EXTENDED MEMORY ERROR
IX3 X3+X2
SB4 B4-100B DECREMENT WORD COUNT
MSE3 LX4 X3,B6
BX0 -X6*X0
BX0 X4+X0
SA0 X3
NZ B4,MSE2 IF NOT END OF MOVE
SB4 BTRI SET FLAG BIT TO CLEAR
SB6 MST2 SET *CFR* RETURN
TEQ (/ECS/CFR,MMF,/PROGRAM/MST2)
* COMPLETE MOVE WITHOUT ECS.
MSE4 SX4 B1+
LX5 30 MOVE DIFFERENTIAL
IX1 X3-X4
SX6 MST DISABLE STORAGE MOVE THROUGH ECS
SA6 TMNR+MSTF
NG X5,MSE6 IF DOWNWARD MOVE
BX4 -X4
IX1 X1-X2
MSE6 IX1 X1+X4
ERX2 X1
SB4 B4-B1
IX7 X1+X5
BX6 X2
EWX6 X7
NZ B4,MSE6 IF MOVE NOT COMPLETE
SX1 100B WORD COUNT
RJ /ECS/RSE REPORT STORAGE MOVE EXTENDED MEMORY ERROR
SB5 MST2 *MSC* RETURN ADDRESS
SX1 MSEA * EXTENDED MEMORY ERROR - STORAGE MOVE.*
EQ /MONITOR/MSC ISSUE ERROR MESSAGE
MSEA DATA C* EXTENDED MEMORY ERROR - STORAGE MOVE.*
PER SPACE 4
** PER - PROCESS ECS PARITY ERROR. (PROGRAM MODE)
*
* ENTRY IS VIA RETURN JUMP FROM THE LOWER HALF OF THE ECS
* INSTRUCTION.
*
* EXIT RETURNS TO CALLER IF ERROR RECOVERED ON RETRY.
*
* USES X - NONE.
* B - NONE.
* A - 1, 2, 6, 7.
*
* CALLS RPE.
PERX SB7 X1+ RESTORE (B7)
SA1 A1+1 RESTORE (X1)
PER PS 0 ENTRY/EXIT
SA7 PERA SAVE REGISTERS
BX7 X5
SX5 B7
SB7 PERX *RPE* RETURN ADDRESS
EQ /ECS/RPE
PERA BSS 9 REGISTER SAVE BUFFER
TITLE ECS PARITY ERROR PROCESSING PARAMETERS.
QUAL ECS
TPER SPACE 4
** TPER - TABLE OF PROCESSORS FOR UNRECOVERED ERRORS.
* ENTRY 1 WORD.
*
*T 12/,18/ ADD,12/,18/ EXIT
* ADD ADDRESS + 1 OF ECS INSTRUCTION.
* EXIT UNRECOVERED ERROR EXIT ADDRESS.
TPER BSS 0
TPER HERE
CON 0
ENDBLK
BLOCK SUE,(SIMULTANEOUS UEM/ESM.)
SPACE 4,10
CME$ EQU 1 DEFINE CME INSTRUCTION BLOCK
RUM SPACE 4,10
** RUM - READ USER ECS DATA FROM UEM TO CM.
*
* ENTRY AT *RUM* IF PROGRAM MODE.
* AT *RUM1* IF MONITOR MODE.
* (B4) = WORD COUNT TO TRANSFER.
* (B6) = RETURN ADDRESS FOR *RUE* MACRO, OR
* COMPLEMENT OF RETURN ADDRESS FOR *WUE* MACRO.
* (X0) = 30/ ABSOLUTE CM ADDRESS, 30/ UEM ADDRESS.
*
* EXIT X0, X1, X2, X3, X4, X6, X7, B4, B5, B6 RESTORED.
*
* USES A - 2, 3, 6, 7.
* B - 4, 5, 6.
* X - 0, 1, 2, 3, 4, 6, 7.
*
* CALLS /CME/PSM.
RUM SA7 PMRG+4 SAVE PROGRAM MODE REGISTERS
EQ RUM2 SAVE REGISTERS
RUM1 SA7 MMRG+4 SAVE MONITOR MODE REGISTERS
* SAVE X0, X1, X4, X6, X7, B4, B5, B6, X2, X3
* IN PROGRAM OR MONITOR MODE BUFFER.
RUM2 SA6 A7-B1
SX7 B4
BX6 X4
SA7 A7+B1
SA6 A6-B1
SX7 B5
LX6 X1
SA7 A7+B1
MX4 -12
SX7 B6
SA7 A7+B1
SA6 A6-B1
BX7 X2
SA2 UEML GET UEM BASE ADDRESS
BX6 X0
LX2 12
SA7 A7+B1
LX7 X3
BX2 -X4*X2
SA6 A6-B1
LX2 9
SA7 A7+B1
IX0 X0+X2 ABSOLUTIZE UEM ADDRESS
PL B6,RUM3 IF TRANSFER DATA FROM UEM TO CM
LX0 30 TRANSFER DATA FROM CM TO UEM
SB6 -B6
SX7 B6+ SAVE RETURN ADDRESS
SA7 A7-2
RUM3 MX2 30
BX1 X2*X0 ADDRESS TO TRANSFER TO
SB6 RUM7 SET RETURN ADDRESS
BX0 -X2*X0 ADDRESS TO TRANSFER FROM
SB5 RUM4 SET RETURN ADDRESS
LX1 30
IX1 X0-X1
EQ /CME/PSM PRESET TRANSFER
* TRANSFER 10B WORD BLOCKS THROUGH REGISTERS.
RUM4 ERX2 X0
IX0 X0+X4
ERX3 X0
IX0 X0+X4
ERX6 X0
IX0 X0+X4
ERX7 X0
IX0 X0+X4
EQ B4,B1,RUM6 IF ONLY ONE BLOCK TO TRANSFER
RUM5 EWX2 X1
IX1 X1+X4
ERX2 X0
IX0 X0+X4
SB4 B4-1
EWX3 X1
IX1 X1+X4
ERX3 X0
IX0 X0+X4
EWX6 X1
IX1 X1+X4
ERX6 X0
IX0 X0+X4
EWX7 X1
IX1 X1+X4
ERX7 X0
IX0 X0+X4
EWX2 X1
IX1 X1+X4
ERX2 X0
IX0 X0+X4
EWX3 X1
IX1 X1+X4
ERX3 X0
IX0 X0+X4
EWX6 X1
IX1 X1+X4
ERX6 X0
IX0 X0+X4
EWX7 X1
IX1 X1+X4
ERX7 X0
IX0 X0+X4
GT B4,B1,RUM5 IF MORE 10B WORD BLOCKS TO TRANSFER
RUM6 EWX2 X1
IX1 X1+X4
ERX2 X0
IX0 X0+X4
EWX3 X1
IX1 X1+X4
ERX3 X0
IX0 X0+X4
EWX6 X1
IX1 X1+X4
ERX6 X0
IX0 X0+X4
EWX7 X1
IX1 X1+X4
ERX7 X0
EWX2 X1
IX1 X1+X4
EWX3 X1
IX1 X1+X4
EWX6 X1
IX1 X1+X4
EWX7 X1
* RESTORE REGISTERS.
RUM7 SA2 A6
SA3 A6+B1
BX0 X2
LX1 X3
SA2 A3+B1
SA3 A2+B1
BX4 X2
LX6 X3
SA2 A3+B1
SA3 A2+B1
BX7 X2
SB4 X3
SA2 A3+B1
SA3 A2+B1
SB5 X2
SB6 X3
SA2 A3+B1
SA3 A2+B1
JP B6 RETURN
WUM SPACE 4,10
** WUM - WRITE USER ECS DATA FROM CM TO UEM.
*
* ENTRY AT *WUM* IF PROGRAM MODE.
* AT *WUM1* IF MONITOR MODE.
* (B4) = WORD COUNT TO TRANSFER.
* (B6) = RETURN ADDRESS.
* (X0) = 30/ ABSOLUTE CM ADDRESS, 30/ UEM ADDRESS.
*
* EXIT TO *RUM* IF PROGRAM MODE.
* TO *RUM1* IF MONITOR MODE.
WUM SB6 -B6 INDICATE TRANSFER FROM CM TO UEM
EQ RUM TRANSFER DATA FOR PROGRAM MODE
WUM1 SB6 -B6 INDICATE TRANSFER FROM CM TO UEM
EQ RUM1 TRANSFER DATA FOR MONITOR MODE
SPACE 4,10
MMRG BSS 10 MONITOR MODE X0,X1,X4,X6,X7,B4,B5,B6,X2,X3
PMRG BSS 10 PROGRAM MODE X0,X1,X4,X6,X7,B4,B5,B6,X2,X3
ENDBLK
BLOCK ECSBUF,(ECS BUFFER SPACE.),PROGRAM
SPACE 4
PBUF BSS 21B PROGRAM MODE BUFFER
ENDBLK
BLOCK MMFBUF,(MMF BUFFER SPACE.),PROGRAM
* THIS BUFFER IS SHARED BY MMF AND USER ECS SUBROUTINES.
* THE BUFFER WILL BE ALLOCATED IF EITHER MMF OR USER ECS IS
* DEFINED OR IF BOTH ARE DEFINED.
SPACE 4
BSS MECB-21B
ENDBLK
BLOCK EXPACS,(EXCHANGE PACKAGES.),MONITOR
.EXPACS BSS 0 FWA OF BLOCK
MXP SPACE 4
** MXP - PPU MONITOR EXCHANGE PACKAGE.
MXP EXP P=PMN,FL=(,MCM),RAX=(,RXX),FLX=(,MEC),B1=1,B2=MXP,EM=(,
,XPFE)
BXP SPACE 4,10
** BXP - BREAKPOINT EXCHANGE PACKAGE.
BXP BSS /CPB/CPBAL REGISTERS / BREAKPOINT DATA
ORG BXP+/CPB/CPBA
VFD 60/0 CLEAR PREVIOUS BREAKPOINT ADDRESS
+ RJ /CPB/BKP BREAKPOINT PROTOTYPE
- VFD 30/0
ORG BXP+/CPB/CPBAL
IXP SPACE 4,10
** IXP - IDLE EXCHANGE PACKAGE.
IXP EXP P=2,RA=/PROGRAM/IDL,FL=5,MA=IXP,EM=EEMC,EA=IXP,X1=77B
* *STSW*.
VFD 3/ACPS *A* CPU STATUS
VFD 57/0
* *CWQW*.
VFD 2/1
VFD 7/IDCS CPU PRIORITY
VFD 1/0
VFD 1/1 CPU SLICE ACTIVE
VFD 1/0 RECALL FLAG
VFD 1/1 EXTENDED CPU SLICE INCOMPLETE
VFD 2/0
VFD 9/0 SERVICE CYCLE
VFD 9/SSSC*JCBE SERVICE PARAMETERS INDEX
VFD 1/0 *MTR* BYPASS FLAG
VFD 2/1 SELECT CPU 0
VFD 3/0
VFD 3/MIXT MAIN IDLE PACKAGE EXCHANGE PACKAGE TYPE
VFD 18/0 *WQ* LINKAGE
* *CSAW*.
VFD 60/0
* *CTMW*.
VFD 60/0
SPACE 4
** PXP - PPU EXCHANGE PACKAGES.
* COPIED ONCE FOR EACH PPU EXCEPT 0 AND 1.
* (A5) = PPU OUTPUT REGISTER ADDRESS.
PXP EXP P=PPR,FL=(,MCM),RAX=(,RXX),FLX=(,MEC),B1=1,B2=PXP,A5=(2
,1B,FP),EM=(,XPFE)
VFD 60/10RPPU EXPACK
ERRNZ MXP-.EXPACS-/EXPACS/MXP *COMSMSC* MUST BE CHANGED
ERRNZ BXP-.EXPACS-/EXPACS/BXP *COMSMSC* MUST BE CHANGED
ERRNZ IXP-.EXPACS-/EXPACS/IXP *COMSMSC* MUST BE CHANGED
ERRNZ PXP-.EXPACS-/EXPACS/PXP *COMSMSC* MUST BE CHANGED
LBAT SPACE 4,10
** LBAT - LOADED *CPUMTR* BLOCK ADDRESS TABLE.
*
* ONE ENTRY FOR EACH BLOCK LOADED. SPACE IS ALLOCATED FOR THE
* MAXIMUM POSSIBLE NUMBER OF BLOCKS.
*
*T W0 VFD 42/ 0,18/ FWA *CPUMTR* MAIN BLOCK
*T WN VFD 42/ NAME,18/ FWA ADDITIONAL ENTRIES
*T VFD 60/ 0 END OF TABLE
*
* NAME NAME OF BLOCK LOADED.
* FWA ABSOLUTE CM ADDRESS OF BLOCK.
LBAT BSS /DSL/CPBL
SPACE 4,10
ENDBLK
BLOCK XP176,(CYBER 176 EXCHANGE PACKAGES.),MONITOR
MCU SPACE 4
** MCU - DEAD START EXCHANGE PACKAGE.
MCU EXP P=CXJ,FL=(,MCM),EM=EEMC+20B,MA=IXP
CXP SPACE 4
** CXP - CLOCK EXCHANGE PACKAGE.
CXP EXP P=CXJ,FL=(,MCM),FLX=(,MEC),B1=1,B2=CXP,EM=(,EXPFEB),X0=
,400000B,MA=CXP
EEA SPACE 4
** EEA - ERROR EXIT EXCHANGE PACKAGE.
EEA EXP P=EXP+1,B1=1,FL=(,MCM),B2=EEA,EM=(,EXPFEB),MA=EEA,EA=40
,0000B,X0=77770000777777777777B,X4=1
SPACE 4,10
BSS 20B
ENDBLK
BLOCK XP819,(CYBER 176/FLPP INTERRUPT PACKAGES.),IH819
XP819 SPACE 4,10
MCU EQU /MONITOR/MCU
XP819 SPACE 4,10
** CHANNEL 2 INPUT PACKAGE.
C2I EXP P=IOA,FL=(,MCM),EM=(,EXPFEB),FLX=(,MEC),B1=1,MA=C2I,A0=
,(MCU+400B),A1=C3I,B2=3,B4=2
SPACE 4,10
** CHANNEL 2 OUTPUT PACKAGE.
C2O EXP P=WRT1,FL=(,MCM),EM=(,EXPFEB),FLX=(,MEC),B1=1,MA=C2O,A0
,=(MCU+400B),A1=C3O,B2=3,B4=2
SPACE 4,10
** CHANNEL 3 INPUT PACKAGE.
C3I EXP P=IOL,FL=(,MCM),EM=(,EXPFEB),FLX=(,MEC),B1=1,MA=C3I,A0=
,(MCU+400B),A1=C2I,B2=2,B4=3
SPACE 4,10
** CHANNEL 3 OUTPUT PACKAGE.
C3O EXP P=WRT1,FL=(,MCM),EM=(,EXPFEB),FLX=(,MEC),B1=1,MA=C3O,A0
,=(MCU+400B),A1=C2O,B2=2,B4=3
SPACE 4,10
** CHANNEL 4 INPUT PACKAGE.
C4I EXP P=IOA,FL=(,MCM),EM=(,EXPFEB),FLX=(,MEC),B1=1,MA=C4I,A0=
,(MCU+1000B),A1=C5I,B2=5,B4=4
SPACE 4,10
** CHANNEL 4 OUTPUT PACKAGE.
C4O EXP P=WRT1,FL=(,MCM),EM=(,EXPFEB),FLX=(,MEC),B1=1,MA=C4O,A0
,=(MCU+1000B),A1=C5O,B2=5,B4=4
SPACE 4,10
** CHANNEL 5 INPUT PACKAGE.
C5I EXP P=IOL,FL=(,MCM),EM=(,EXPFEB),FLX=(,MEC),B1=1,MA=C5I,A0=
,(MCU+1000B),A1=C4I,B2=4,B4=5
SPACE 4,10
** CHANNEL 5 OUTPUT PACKAGE.
C5O EXP P=WRT1,FL=(,MCM),EM=(,EXPFEB),FLX=(,MEC),B1=1,MA=C5O,A0
,=(MCU+1000B),A1=C4O,B2=4,B4=5
SPACE 4,10
** CHANNEL 6 INPUT PACKAGE.
C6I EXP P=IOA,FL=(,MCM),EM=(,EXPFEB),FLX=(,MEC),B1=1,MA=C6I,A0=
,(MCU+1400B),A1=C7I,B2=7,B4=6
SPACE 4,10
** CHANNEL 6 OUTPUT PACKAGE.
C6O EXP P=WRT1,FL=(,MCM),EM=(,EXPFEB),FLX=(,MEC),B1=1,MA=C6O,A0
,=(MCU+1400B),A1=C7O,B2=7,B4=6
SPACE 4,10
** CHANNEL 7 INPUT PACKAGE.
C7I EXP P=IOL,FL=(,MCM),EM=(,EXPFEB),FLX=(,MEC),B1=1,MA=C7I,A0=
,(MCU+1400B),A1=C6I,B2=6,B4=7
SPACE 4,10
** CHANNEL 7 OUTPUT PACKAGE.
C7O EXP P=WRT1,FL=(,MCM),EM=(,EXPFEB),FLX=(,MEC),B1=1,MA=C7O,A0
,=(MCU+1400B),A1=C6O,B2=6,B4=7
ENDBLK
BLOCK PRESET,(PRESET.)
PRSB EQU * DEFINE BEGINNING OF *PRESET* BLOCK
*CALL COMSMST
QUAL DEFINE SYMBOLS USED GLOBALLY
LPTU EQU /PRESET/LPTU
QUAL *
*CALL COMS1DS
PRS SPACE 4
** PRS - PRESET MONITOR.
*
* PRESET IS OVERLAYED BY PPU EXCHANGE PACKAGES.
*
* ENTRY (X4) = MACHINE CM FL.
* (X5) = MACHINE ECS FL.
* (EFRL) = 30/,6/ LS,12/,12/ LT.
* LS = 40, IF TO INITIALIZE LINK DEVICE.
* LS = 20, IF TO PRESET LINK DEVICE.
* LT = LABEL TRACK OF LINK DEVICE.
*
* EXIT (0) = RUNNING LENGTH OF CPUMTR.
* (ACPL) = EXCHANGE ADDRESS FOR CPU 0.
* (ACPL+1) = EXCHANGE ADDRESS FOR CPU 1.
PRS SB1 1 (B1) = 1
RJ DBL DETERMINE BLOCKS LOADED
RJ SSP SET SYSTEM PARAMETERS
RJ SAC SET ADDRESS CONSTANTS
RJ SDT SET DATE AND TIME
* COPY SYSTEM EXCHANGE PACKAGE TO CP AREA.
SB2 17B
TB3 SCA
PRS1 SA1 SXP+B2
BX6 X1
SA6 B3+B2
SB2 B2-1
PL B2,PRS1
RJ CIR CLEAR INTERLOCKS
RJ SCM SET CPU MULTIPLIERS
RJ SJB SETUP JOB CONTROL BLOCKS
RJ SCS SET CPU STATUS
RJ CLE CLEAR EXTENDED MEMORY
RJ IBO INITIALIZE BUFFERED I/O
RJ SCD SET CHANNEL DATA
RJ SDT SET DATE AND TIME AGAIN
* INITIALIZE OPTICAL DISK SCANNER TIMER.
SA1 OSTP READ *OSTP*
MX2 48
BX6 X2*X1 CLEAR SCAN INTERVAL COUNTER
SX2 63 SET LONG TIMER AT DEAD START
IX6 X6+X2
SA6 A1 REWRITE *OSTP*
* CLEAR SYSTEM CONTROL POINT MESSAGES.
SX6 B0+
TA6 SNSW,SCA
TA6 MS2W,SCA
* TERMINATE CPU WAIT AND RECALL QUEUES.
SX6 /MONITOR/WT TERMINATE *WQ*
SA6 WQRL
SX6 PTMF BUILD RECALL ENTRY
MX2 36
LX6 -12
LX2 -12
BX0 X2+X6
SX6 3REND PP NAME
SB3 PRSX SET *AQR* RETURN ADDRESS
LX6 -18
R= X2,/MONITOR/RQ SET QUEUE TYPE
TB7 SCA SET SYSTEM CONTROL POINT
EQ /MONITOR/AQR ASSIGN QUEUE REQUEST
SPACE 4
** SXP - SYSTEM JOB EXCHANGE PACKAGE. (PROGRAM MODE MONITOR)
* COPIED TO SYSTEM CONTROL POINT.
SXP EXP P=/PROGRAM/PRG,FL=(,MCM),RAX=(,RXX),FLX=(,MECPRG),MA=(,
,SCA),B1=1,EM=(,PXPFE),EA=(,SCA)
TITLE PRESET SUBROUTINES.
SAC SPACE 4,10
** SAC - SET ADDRESS CONSTANTS.
SAC PS ENTRY/EXIT
MX0 -6
SA5 REL FIRST ENTRY
MX4 1
SAC1 SA1 X5 READ DATA WORD
LX5 6 SET POSITION
BX2 -X0*X5
LX5 6 SET FIELD WIDTH
BX3 -X0*X5
LX5 18 SET RELOCATION VALUE ADDRESS
SB3 X3
SA3 X5 READ RELOCATION VALUE
UX5,B5 X5 GET NUMBER OF CONDITIONS
SB4 B3-B1 GENERATE MASK
SB2 X2 SET MASK SHIFT COUNT
AX6 X4,B4
SB3 B2-B3
LX6 X6,B2 POSITION MASK
AX5 48
BX7 X6*X1 EXTRACT ORIGINAL FIELD
BX2 X3-X5
SA5 A5+B1 READ NEXT WORD
ZR B5,SAC4 IF NO CONDITIONAL VALUE SETTING
BX2 X5
BX7 X7-X7 CLEAR ORIGINAL VALUE
EQ B5,B1,SAC3 IF THIS IS THE LAST CONDITION
SAC2 NZ X3,SAC3 IF THE CONDITION IS MET
SA5 A5+B1 GET THE NEXT CONDITION
SB5 B5-B1
SA3 X5+
GT B5,B1,SAC2 IF NOT THE LAST CONDITION
SAC3 ZR X3,SAC4 IF CONDITION NOT MET
AX5 30
BX2 X5
SAC4 SA5 A5+B5 GET FIRST WORD OF NEXT ENTRY
LX3 X2,B3 SHIFT VALUE
BX1 -X6*X1 CLEAR FIELD
BX2 -X6+X3
IX3 X7+X2 RELOCATE FIELD
BX2 X6*X3
BX7 X1+X2 STORE RELOCATED WORD
SA7 A1
* CHECK IF THIS BLOCK WAS LOADED BY CPUMLD.
SAC5 NZ X5,SAC1 IF NOT END OF LIST
SA5 A5+B1
MX2 42
ZR X5,SAC IF END OF BLOCK LISTS
SA1 BLKT
SAC6 ZR X1,SAC7 IF BLOCK NOT LOADED
BX3 X2*X1
BX5 X2*X5
SA1 A1+B1
BX3 X5-X3
NZ X3,SAC6 IF NO MATCH ON BLOCK NAME
SA5 A5+B1
EQ SAC5 SET ADDRESS CONSTANTS FOR THIS BLOCK
* BLOCK WAS NOT LOADED - IGNORE ANY RELOCATION ADDRESSES.
SAC7 SA5 A5+1
NZ X5,SAC7 IF NOT END OF BLOCK TABLE
EQ SAC5 PROCESS NEXT BLOCK TABLE
* RELOCATION VALUES.
OB VFD 42/0,18/ORG
CX VFD 42/0,18/CL+CACX
ACAD CON 2 ADJUSTMENT FOR ACCOUNTING OVERHEAD
ACAD2 CON 1 ACAD/2
CMCF CON 0 CENTRAL MEMORY COPY FLAG
DCPC CON 0 DUAL CPU MACHINE WITH CACHE
DP CON 0 DAYFILE POINTERS FWA
DSCB CON 0 *DSCB* ADDRESS
ECCM CON 0 LOCATION OF ECS CLOCK FOR THIS MACHINE
ECLT CON 0 LOCATION OF EXTENDED MEMORY LABEL TRACK
ECSB CON 17000B PP/ECS BUFFER
ECSBL CON ECBL PP ECS I/O BUFFERS LENGTH
EEAD CON 0 ERROR EXIT ADDRESS FOR CYBER 176
EEN CON 0 ECS EST ADDRESS
EJT CON 0 FWA EJT
EJTM CON 0 MAXIMUM NUMBER OF ENTRIES IN EJT
EMS CON 0 MST ADDRESS OF ECS EQUIPMENT
EEM CON 0 EXTENDED MEMORY EST ORDINAL (CPU ACCESS)
ESM170 CON 0 170 ESM MODE FLAG
ESM CON 0 ESM MODE FLAG
EST CON 6500B FWA EST
ESTL CON 100B EST LENGTH
EMB CON 0 FWA OF ERROR MESSAGE BUFFER
EVT CON 0 FWA EVENT TABLE
EXPA CON 0 EXCHANGE PACKAGE ADDRESS FOR CYBER 176
CCMB CON 1 CLEAR CM BUFFER (0=LARGE MEMORY CYBER 990)
FNT CON 6600B FWA OF FNT
FNTLWA CON 7600B LWA OF FNT
FNTM CON 400B MAXIMUM NUMBER OF ENTRIES IN SYSTEM FNT
FP CON 0 ADDRESS OF FIRST PP COMMUNICATION AREA
FPC CON 0 ADDRESS OF FIRST CPP COMMUNICATION AREA
FP8 CON 0 ADDRESS OF FIRST PP COMMUNICATION AREA/8
FPX CON 0 ADDRESS OF FIRST EXTENDED PP COMM. BLOCK
JCB CON 0 FWA OF JOB CONTROL BLOCK TABLE
MCM CON 200000B MACHINE FL
MCT CON 0 FWA OF MEMORY CONTROL TABLE
NMCT CON 0 NUMBER OF MCT ENTRIES
RAE CON 0 XM BASE ADDRESS
RAEX CON 0 XM BASE ADDRESS SHIFTED
RXX CON 0 RAE/100 IN EXPANDED MODE, ELSE RAE
MEC CON 1000000B MACHINE FLX
MCMS CON 2000B MACHINE FL SHIFTED
MECS CON 0 MACHINE FLX FLAG BIT SHIFTED
MECNF CON 0 MACHINE FLE / 1000B
MECPRG CON 57000000B MACHINE FLX (PROGRAM MODE)
MESC CON 0 EM ADDRESSING SHIFT COUNT (-3,-4,-5,-6)
MID CON 2RAA MACHINE ID
MIN CON 0 MACHINE INDEX
MMK CON 0 MACHINE MASK
MIL CON 0 MIN*2+1 (MST INTERLOCKS)
MRT CON 0 MRT ADDRESS (MIN * 100B)
MSL CON 0 MST LOCAL AREA OFFSET (MIN * 6)
MSA CON 0 MASS STORAGE ALLOCATION AREA ADDRESS
MDWB CON 0 MAXIMUM DATA WRITTEN BUFFER COUNT
NCME CON 1 1 IF NOT CME MACHINE, 0 IF CME MACHINE
NDCPC CON 1 NOT A DUAL CPU MACHINE WITH CACHE
NTRACE CON 1 NON-ZERO IF TRACE DISABLED
OSSM CON 0 OPERATING SYSTEM SECURITY MODE
BDT CON 0 FWA - BDT
IBST CON 0 FWA - IBST NOTE - THESE ADDRESSES
PLT CON 0 FWA - PLT MUST BE CONSECUTIVE
CCT CON 0 FWA - CCT SO THAT THEY MATCH
PUT CON 0 FWA - PUT THE ORDER IN *BDT*.
FTT CON 0 FWA - FTT
HAT CON 0 FWA - HAT
CBT CON 0 FWA - CBT
BLMB CON 0 BUFFER LIST MANAGEMENT POINTERS
EMTB CON 0 EMPTY BUFFER LIST
DWTB CON 0 DATA WRITTEN LIST
DRDB CON 0 DATA READ LIST
WRTB CON 0 WRITE BUFFER LIST
IORQ CON ZERL I/O REQUEST
NIOB CON 0 NUMBER OF I/O BUFFERS
NRUN CON 0 NUMBER OF BUFFERED DEVICE UNITS
MXM CON 0 MAXIMUM MEMORY - CM + ECS/ESM/UEM
NOTDCE CON 1 DUAL CPU USER ECS TRANSFER NOT ALLOWED
NOTUEM CON 0 NON-UEM FLAG
UEM CON 0 UEM FLAG
UEM180 CON 0 FLAG FOR 180 IN EXTENDED MODE WITH UEM
XUEM CON 0 USER EM IN EXTERNAL EXTENDED MEMORY FLAG
CXPFE CON EEMC CPUCIO PSEUDO PP XP FLAGS AND EXIT MODE
EXPFEB CON 7027B 176 CHANNEL EXCHANGE PACKAGE FLAGS
EXPFEC CON 0
PXPFE CON EEMC-1 PROGRAM MODE XP FLAGS AND EXIT MODE
XPFE CON EEMC MONITOR MODE XP FLAGS AND EXIT MODE
PCPA CON 0 FWA OF PSEUDO CONTROL POINT AREA
NPCP CON 0 NUMBER OF PCP-S
PCM2 CON 0 (LAST PCP NUMBER + 1) * 200B
SCA CON 6000B ADDRESS OF SYSTEM CONTROL POINT
SC CON 30B SYSTEM CONTROL POINT NUMBER
SDA CON 0 FWA OF STATISTICAL DATA AREA
SFCS CON 4 SFCALL CM TRANSFER RATE SHIFT
SFES CON 3 SFCALL ECS TRANSFER RATE SHIFT
SFFO CON 70D*10B SFCALL FUNCTION OVERHEAD (MICROSEC*10B)
SMXF CON 0 STORAGE MOVE XP MODIFICATION FLAG
SP CON 0 PSEUDO-PP INPUT REGISTER ADDRESS
SPX CON 0 PSEUDO-PP EXTENDED COMM. BLOCK ADDRESS
SSCT CON 0 FWA TABLE OF SUBSYSTEM CONTROL POINTS
NVESS CON 0 *SSCT* WORD CONTAINING *NVE* BYTE
NVEOS CON 0 OFFSET OF *NVE* BYTE IN *SSCT* WORD
TNSC CON 0 TRACK SHIFT COUNT
TCNT CON 20B TRACK SIZE
TM64 VFD 42/0,18/MP64
TM66 VFD 42/0,18/MP66
T173 VFD 42/0,18/MP73
T175 VFD 42/0,18/MP75
T176 VFD 42/0,18/MP76
T810 VFD 42/0,18/MP10
T815 VFD 42/0,18/MP15
T825 VFD 42/0,18/MP25
T830 VFD 42/0,18/MP30
T835 VFD 42/0,18/MP35
T840 VFD 42/0,18/MP40
T845 VFD 42/0,18/MP45
T850 VFD 42/0,18/MP50
T855 VFD 42/0,18/MP55
T860 VFD 42/0,18/MP60
T865 VFD 42/0,18/MP86
T875 VFD 42/0,18/MP87
T961 VFD 42/0,18/MP961
T963 VFD 42/0,18/MP963
T990 VFD 42/0,18/MP90
UESC CON 0 USER EM SHIFT COUNT
** THE FOLLOWING LOCATIONS DEFINE CONDITIONS WHICH ARE PRESENT.
TDBL BSS 0 TABLE OF BLOCKS FOR LOAD
CME VFD 60/0LCME NON ZERO IF CME BLOCK PRESENT
CMU VFD 60/0LCMU NON-ZERO IF CMU PRESENT
CMUMTR VFD 60/0LCMUMTR NON-ZERO IF CMUMTR BLOCK PRESENT
CPB VFD 60/0LCPB NON-ZERO IF CPUMTR BREAKPOINT PRESENT
CPP VFD 60/0LCPP NON-ZERO IF CPP-S ARE PRESENT
CP176 VFD 60/0LCP176 NON-ZERO IF 176 CPU PRESENT
CP830 VFD 60/0LCP830 NON-ZERO IF CYBER 810/830 WITH 20 PP-S
DCP VFD 60/0LDCP NON-ZERO IF DUAL CPU PRESENT
ECS VFD 60/0LECS NON-ZERO IF ECS PRESENT
EEC VFD 60/0LEEC NONZERO IF EXTERNAL ECS PRESENT
EUE VFD 60/0LEUE NONZERO IF ECS OR USER ECS PRESENT
BIOMMF VFD 60/0LBIOMMF
BUFIO VFD 60/0LBUFIO NON-ZERO IF BUFFERED I/O IN USE
IH819 VFD 60/0LIH819 NON-ZERO IF 819 DEVICES IN USE
IHPFMD VFD 60/0LIHPFMD NON-ZERO IF 885-42 DEVICES IN USE
ISD VFD 60/0LISD NON-ZERO IF INDEPENDENT SHARED DEVICES
ISDMMF VFD 60/0LISDMMF NON-ZERO IF ISD OR MMF
LSPMMF VFD 60/0LLSPMMF NON-ZERO IF ONLY LSP ACCESS TO MMF LINK
MMF VFD 60/0LMMF NON-ZERO IF MMF VIA CPU ACCESS
NVE VFD 60/0LNVE NON-ZERO IF *DSCB* PRESENT
PCP VFD 60/0LPCP NON-ZERO IF PSEUDO-CONTROL POINTS PRESENT
SUBCP VFD 60/0LSUBCP NON-ZERO IF SUB-CONTROL POINTS ALLOWED
SCP VFD 60/0LSCP NON-ZERO IF SYSTEM CONTROL POINT PRESENT
SUE VFD 60/0LSUE NONZERO IF SIMULTANEOUS UEM/ESM PRESENT
PROBE VFD 60/0LPROBE NON-ZERO IF PROBE ENABLED
MCE VFD 60/0LMCE NON-ZERO IF MEMORY CLEARING ENABLED
TRACE VFD 60/0LTRACE NON-ZERO IF TRACE ENABLED
UEC VFD 60/0LUEC NON-ZERO IF USER ECS IS PRESENT
VMS VFD 60/0LVMS NON-ZERO IF MASS STORAGE VALIDATION ENABLED
TDBLL CON 0 END OF TABLE
ECM CON 0 NON-ZERO IF ECS PREFERRED FOR STORAGE MOVE
* WHICH IS ECS SIZE .GT. 256K OR NO CMU
SCM SPACE 4,10
** SCM - SET CP TIME MULTIPLIERS.
* ENTRY (CPUL) = CPU FLAGS.
* EXIT (/MONITOR/CPTA) = CPU 0 MULTIPLIER (S0).
* (/MONITOR/CPTA+1) = CPU 1 MULTIPLIER (S1).
*
* THE MULTIPLIERS ARE USED BY /MONITOR/CPT WHEN
* CALCULATING CP TIME (CP = S0*CP0 + S1*CP1). IF A
* MULTIPLIER IS DEFINED AS 0.0 OR 1.0, AN INTEGER ZERO (60/0)
* IS STORED AND THE MULTIPLY IS NOT PERFORMED. A MULTIPLY
* BY 0.0 WOULD NEGATE CP ACCUMULATION AND PREVENT TIME-SLICING.
* A MULTIPLY BY 1.0 IS REDUNDANT. /MONITOR/CPT PERFORMS A ZERO
* CHECK BEFORE PERFORMING THE MULTIPLY.
SCM PS ENTRY/EXIT
MX0 0
BX4 X4-X4
SA1 IPRL RETRIEVE IPRDECK PARAMETERS FROM CPM ENTRY
MX2 -6
LX1 6
BX3 -X2*X1
LX1 6
BX2 -X2*X1
ZR X2,SCM1 IF NO CPU0 PARAMETER
SX0 TIPR-1+X2 ADDRESS OF CPU0 VALUE
MX4 30
LX0 30 POSITION FOR CPU0
SCM1 ZR X3,SCM2 IF NO CPU1 VALUE
SX3 TIPR-1+X3 ADDRESS OF CPU1 VALUE
BX0 X3+X0
MX2 -18
BX4 -X2+X4
SCM2 ZR X4,SCM4 IF NO IPRDECK CHANGES
SB3 TCPML NUMBER OF ENTRIES TO MODIFY
SCM3 SB3 B3-B1
SA1 TCPM+B3 RETRIEVE ENTRY
BX6 -X4*X1 CLEAR ADDRESSES TO BE REPLACED
BX6 X0+X6 INSERT NEW ADDRESSES
SA6 A1 REPLACE ENTRY
NZ B3,SCM3 IF NOT END OF ENTRIES
SCM4 SA1 MABL FORM INDEX INTO MULTIPLIER TABLE
MX2 -2
LX1 59-47
NG X1,SCM7 IF NOT CYBER 170-8X5
SX7 4000 SET MULTIPLIERS FOR MICRO SECOND COUNTER
SA7 /MONITOR/CPTA
SA7 /MONITOR/CPTA+1
LX1 59-42-59+47
PL X1,SCM6 IF CYBER 170-865/875
SA1 TMNBA GET *TCPM* INDEX
ZR X1,SCM IF INDEX NOT FOUND
EQ SCM8 PROCESS CPU MULTIPLIER
SCM6 LX1 0-38-59+42 GET 865/875 FLAG
SX6 B1+
BX1 X6*X1
SX1 X1+TCPMH-TCPM
EQ SCM8 PROCESS CPU MULTIPLIER
SCM7 LX1 0-37-59+47
MX2 -1
BX3 -X2*X1 CPU 1 PRESENT FLAG
LX1 1-40-0+37
LX2 1-0
BX6 -X2*X1 INSTRUCTION STACK PRESENT FLAG
BX3 X3+X6
LX1 2-42-1+40
LX2 2-1
BX6 -X2*X1 CYBER 170 FLAG
BX3 X6+X3
MX2 -3
BX3 -X3 COMPLEMENT FLAGS
BX1 -X2*X3
SX6 X1-TCPML
PL X6,SCM IF INDEX OUT OF RANGE
TX3 EXPA
ZR X3,SCM8 IF NOT A CYBER 176
SX1 7 SET CYBER 176 INDEX
SX7 110 SET CONVERSION FACTOR TO CONVERT CLOCK
SA7 /MONITOR/CPTA CYCLES TO QUARTER NANOSECONDS
SA7 /MONITOR/CPTA+1
SCM8 SA1 TCPM+X1 GET TABLE ENTRY
SX2 X1 (X2) = CPU 1 MULTIPLIER ADDR
AX1 30 (X1) = CPU 0 MULTIPLIER ADDR
* SET CPU 0 MULTIPLIER (S0).
ZR X1,SCM9 IF NO CPU 0 MULTIPLIER
SA1 X1+ GET MULTIPLIER
SA3 SCMA
BX6 X1-X3
SA3 A3+B1
ZR X6,SCM9 IF NULTIPLIER = 0.0
BX6 X1-X3
ZR X6,SCM9 IF MULTIPLIER = 1.0
SA3 /MONITOR/CPTA BIAS CONSTANTS WITH CPU 0 MULTIPLIER
PX3 X3
NX3 X3
RX7 X3*X1
UX7,B3 X7
LX7 B3
SA7 A3+
* SET CPU 1 MULTIPLIER (S1).
SCM9 ZR X2,SCM10 IF NO CPU 1 MULTIPLIER
SA2 X2+ GET MULTIPLIER
SA3 SCMA
BX6 X2-X3
SA3 A3+B1
ZR X6,SCM10 IF MULTIPLIER = 0.0
BX6 X2-X3
ZR X6,SCM10 IF MULTIPLIER = 1.0
SA3 /MONITOR/CPTA+1 BIAS CONSTANT WITH CPU 1 MULTIPLIER
PX3 X3
NX3 X3
RX7 X3*X2
UX7,B3 X7
LX7 B3
SA7 A3
* SET MULTIPLIER FOR APPLICATION USAGE ACCOUNTING.
SCM10 SA4 ACPL CHECK FOR CPU 0
SA3 SCMB
NG X4,SCM11 IF CPU 0 OFF
ZR X1,SCM IF CPU 0 MULTIPLIER = 0.0
BX7 X1-X3
ZR X7,SCM IF CPU 0 MULTIPLIER = 1.0
BX6 X1
EQ SCM12 CALCULATE INVERSE MULTIPLIER
SCM11 ZR X2,SCM IF CPU 1 MULTIPLIER = 0.0
BX7 X2-X3
ZR X7,SCM IF CPU 1 MULTIPLIER = 1.0
BX6 X2
SCM12 RX6 X3/X6 CALCULATE RECIPROCAL OF CPU MULTIPLIER
SA6 /MONITOR/ACTC SET APPLICATION ACCOUNTING MULTIPLIER
EQ SCM EXIT
SCMA CON 0.0
SCMB CON 1.0
TCPM SPACE 4
** TABLE OF ADDRESSES FOR CPU 0 (S0) AND CPU 1 (S1) MULTIPLIERS.
*
* ENTRY FORMAT.
* 30/ ADDR OF CPU 0 MULTIPLIER,30/ ADDR OF CPU 1 MULTIPLIER
*
* INDEX TO ENTRY FOR CYBER 176 IS 7.
* INDEX TO ENTRY FOR CYBER 170-815/825/835/855 IS
* 12D + CYBER 865/875 FLAG (0 OR 1).
* INDEX FOR ALL OTHER CYBER 6000 AND CYBER 170
* MAINFRAMES IS CALCULATED BY THE FORMULA -
* 1/ X,1/ Y,1/ Z
* X = CYBER 170.
* Y = CPU 0 HAS INSTRUCTION STACK
* Z = CPU 1 EXISTS.
* X, Y, AND Z ARE EXTRACTED FROM CM WORD *MABL*.
TCPM BSS 0 FWA
TVFD 30/,TM64 6200/6400
VFD 30/0
TVFD 30/,TM64 6500
TVFD 30/,TM64
TVFD 30/,TM66 6600
VFD 30/0
TVFD 30/,TM66 6700
TVFD 30/,TM64
TVFD 30/,T173 CYBER 172/173
VFD 30/0
TVFD 30/,T173 CYBER 174
TVFD 30/,T173
TVFD 30/,T175 CYBER 175
VFD 30/0
TVFD 30/,T176 CYBER 176
VFD 30/0
TCPMA TVFD 30/,T815 CYBER 170-815
VFD 30/0
TCPMB TVFD 30/,T825 CYBER 170-825
VFD 30/0
TCPMC TVFD 30/,T835 CYBER 170-835
VFD 30/0
TCPMD TVFD 30/,T845 CYBER 170-845
VFD 30/0
TCPME TVFD 30/,T855 CYBER 170-855
VFD 30/0
TCPMF TVFD 30/,T810 CYBER 180-810
TVFD 30/,T810
TCPMG TVFD 30/,T830 CYBER 180-830
TVFD 30/,T830
TCPMI TVFD 30/,T840 CYBER 180-840
VFD 30/0
TCPMJ TVFD 30/,T850 CYBER 180-850
VFD 30/0
TCPMK TVFD 30/,T860 CYBER 180-860
TVFD 30/,T860
TCPMH TVFD 30/,T865 CYBER 170-865
TVFD 30/,T865
TVFD 30/,T875 CYBER 170-875
TVFD 30/,T875
TCPMN TVFD 30/,T961 CYBER 180-960-11
VFD 30/0
TCPMO TVFD 30/,T963 CYBER 180-960-31/32
TVFD 30/,T963
TCPMM TVFD 30/,T990 CYBER 180-990
TVFD 30/,T990
TCPML EQU *-TCPM NUMBER OF ENTRIES
TMNB SPACE 4,10
** TMNB - TABLE OF CYBER 180 MODEL NUMBERS.
*
* *TMNB* IS USED TO DETERMINE THE INDEX INTO
* THE *TCPM* TABLE BASED ON THE MODEL NUMBER
* ASSOCIATED WITH THE CYBER 180 PROCESSOR.
* *TMNB* ALSO CONTAINS THE ACCOUNTING ADJUSTMENT
* FOR THE ASSOCIATED PROCESSORS.
*
*T 12/ ACCT ADJ,18/ *TCPM* INDEX,30/ MODEL NUMBER
TMNB BSS 0
VFD 12/38,18/TCPMF-TCPM,30/0#14 CYBER 180-810
VFD 12/38,18/TCPMA-TCPM,30/0#11 CYBER 170-815
VFD 12/38,18/TCPMA-TCPM,30/0#15 CYBER 180-815S
VFD 12/34,18/TCPMB-TCPM,30/0#10 CYBER 170-825
VFD 12/34,18/TCPMB-TCPM,30/0#12 CYBER 170-825
VFD 12/34,18/TCPMB-TCPM,30/0#16 CYBER 180-825S
VFD 12/34,18/TCPMG-TCPM,30/0#13 CYBER 180-830
VFD 12/28,18/TCPMC-TCPM,30/0#20 CYBER 170-835
VFD 12/28,18/TCPMI-TCPM,30/0#34 CYBER 180-840
VFD 12/28,18/TCPMD-TCPM,30/0#37 CYBER 180-840S
VFD 12/24,18/TCPMD-TCPM,30/0#31 CYBER 170-845
VFD 12/24,18/TCPMD-TCPM,30/0#35 CYBER 180-845S
VFD 12/24,18/TCPMJ-TCPM,30/0#33 CYBER 180-850
VFD 12/20,18/TCPME-TCPM,30/0#30 CYBER 170-855
VFD 12/20,18/TCPME-TCPM,30/0#36 CYBER 180-855S
VFD 12/20,18/TCPMK-TCPM,30/0#32 CYBER 180-860
VFD 12/18,18/TCPMN-TCPM,30/0#3B CYBER 180-960-11
VFD 12/12,18/TCPMO-TCPM,30/0#3A CYBER 180-960-31/32
VFD 12/06,18/TCPMM-TCPM,30/0#40 CYBER 180-990
VFD 12/06,18/TCPMM-TCPM,30/0#41 CYBER 180-990 MODEL B
VFD 12/06,18/TCPMM-TCPM,30/0#44 CYBER 180-994
CON 0 END OF TABLE
TMNBA CON 0 *TCPM* INDEX SET BY *SSP*
* HARDWARE DETECTABLE CPU HEAD TYPES.
MP64 CON "CP64M" 6200/6400
MP66 CON "CP66M" 6600
MP73 CON "C173M" CYBER 172/173
MP75 CON "C175M" CYBER 175
MP76 CON "C176M" CYBER 176
MP10 CON "C810M" CYBER 180-810
MP15 CON "C815M" CYBER 170-815
MP25 CON "C825M" CYBER 170-825
MP30 CON "C830M" CYBER 180-830
MP35 CON "C835M" CYBER 170-835
MP40 CON "C840M" CYBER 180-840
MP45 CON "C845M" CYBER 170-845
MP50 CON "C850M" CYBER 180-850
MP55 CON "C855M" CYBER 170-855
MP60 CON "C860M" CYBER 180-860
MP86 CON "C865M" CYBER 170-865
MP87 CON "C875M" CYBER 170-875
MP961 CON "C961M" CYBER 180-960-11
MP963 CON "C963M" CYBER 180-960-31/32
MP90 CON "C990M" CYBER 180-990
TIPR SPACE 4
* SELECTABLE (VIA IPRDECK ENTRY CPM) CPU HEAD TYPES.
*
* THIS LIST MUST BE IN THE SAME ORDER AS THE LIST IN *COMSSRU*.
TIPR BSS 0
LOC 1
CON "CP62M" 6200
CON "CP64M" 6400
CON "CP65M" 6500
CON "CP66M" 6600
CON "CP67M" 6700
CON "CP71M" CYBER 71
CON "CP72M" CYBER 72
CON "CP73M" CYBER 73
CON "CP74M" CYBER 74
CON "C171M" CYBER 171
CON "C172M" CYBER 172
CON "C173M" CYBER 173
CON "C174M" CYBER 174
CON "C175M" CYBER 175
CON "C176M" CYBER 176
CON "C720M" CYBER 170-720
CON "C730M" CYBER 170-730
CON "C740M" CYBER 170-740
CON "C750M" CYBER 170-750
CON "C760M" CYBER 170-760
CON "C810M" CYBER 180-810
CON "C815M" CYBER 170-815
CON "C825M" CYBER 170-825
CON "C830M" CYBER 180-830
CON "C835M" CYBER 170-835
CON "C840M" CYBER 180-840
CON "C845M" CYBER 170-845
CON "C850M" CYBER 180-850
CON "C855M" CYBER 170-855
CON "C860M" CYBER 180-860
CON "C865M" CYBER 170-865
CON "C875M" CYBER 170-875
CON "C961M" CYBER 180-960-11
CON "C963M" CYBER 180-960-31/32
CON "C990M" CYBER 180-990
CON "ICM1M" INSTALLATION DEFINED - 1
CON "ICM2M" INSTALLATION DEFINED - 2
CON "ICM3M" INSTALLATION DEFINED - 3
CON "ICM4M" INSTALLATION DEFINED - 4
CON "ICM5M" INSTALLATION DEFINED - 5
ERRNZ *-TIPRL TABLE SIZE CHANGED
LOC *O
SCD SPACE 4,10
** SCD - SET CHANNEL DATA.
*
* THIS SUBROUTINE RECONSTRUCTS THE CHANNEL ACCESS BYTE IN EACH
* MST ENTRY, CLEARS THE IDLE FLAG IN EACH CHANNEL STATUS TABLE
* ENTRY AND ENSURES THAT ALL CHANNEL STATES ARE EITHER *UP* OR
* *DOWN*.
*
* CALLS /MONITOR/RCB, /MONITOR/SCH.
SCD PS ENTRY/EXIT
SX7 3 CHANNEL STATE MASK
SB4 NOPE
SA2 ESTP
MX0 -12
AX2 12
BX2 -X0*X2 LAST MASS STORAGE ORDINAL + 1
SB7 X2-1
SCD1 LT B7,B4,SCD4 IF END OF EST SCAN
SX1 B7
SB7 B7-B1 DECREMENT EST ORDINAL
SB5 48
SB2 B5+B1
CX3 X1,EST CONVERT EST ORDINAL TO OFFSET
TA3 X3+EQDE,EST READ EST ENTRY
PL X3,SCD1 IF NOT MASS STORAGE
SCD2 SB5 B5-12
SB3 B5-12
SB6 SCD1 *RCB* EXIT ADDRESS
EQ B3,B0,SCD3 IF BOTH CHANNELS PROCESSED
SB3 B2-B5
LX6 X3,B3
AX6 59
BX6 X6*X7 =0 IF *UP*/*IDLE*, =3 IF *DOWN*
SB6 SCD2 *SCH* EXIT ADDRESS
EQ /MONITOR/SCH SET CHANNEL STATE
SCD3 BX5 -X0*X3
LX5 3 MST ADDRESS
EQ /MONITOR/RCB RECONSTRUCT CHANNEL ACCESS BYTE IN MST
SCD4 SA2 CHTP
SA3 SCDA IDLE FLAG MASK
SB6 CTALL CHANNEL TABLE LENGTH
SB7 B0
AX2 12
SCD5 SA4 X2+B7 READ NEXT CHANNEL TABLE WORD
SB7 B7+B1 ADVANCE CHANNEL TABLE INDEX
BX7 -X3*X4 CLEAR IDLE FLAGS
SA7 A4
EQ B7,B6,SCD IF END OF CHANNEL TABLE
EQ SCD5 PROCESS NEXT CHANNEL TABLE WORD
SCDA CON 01000100010001000100B IDLE FLAG MASK
SCS SPACE 4
** SCS - SET CPU STATUS.
*
* EXIT (A0) = NEXT EXCHANGE ADDRESS.
SCS PS ENTRY/EXIT
SA2 ACPL SET CPU 0 IDLE
SA3 A2+B1
BX6 X2+X3
SX7 B1
BX1 X3
PL X6,SCS2 IF 2 CPU,S
SX7 B0
SB4 TPPR CLEAR CPU SELECTION BITS
SB5 TPPRL
SX4 B1
LX4 58-0
TJP (/PRESET/SCS0,SUBCP,/PRESET/SCS1) CHECK SUBCP
SCS0 SA3 /MONITOR/TXJP DISABLE SUBCONTROL POINT XP FOR CPU1
BX6 X3
SA6 A3+B1
SCS1 SA3 B4
BX6 -X4*X3
SB4 B4+B1
SA6 A3
NE B4,B5,SCS1 IF NOT END OF TABLE
SCS2 TA3 CWQW,SCA SET CPU SELECTION FOR PROGRAM MODE
LX7 24-0
BX7 X3+X7
SA7 A3
SX3 /MONITOR/IXP
SX4 MIXT
BX6 X2+X3
NG X6,SCS3 IF CPU 0 TURNED OFF
NG X1,SCS4 IF 1 CPU
SA6 A2
LX4 42
BX6 X4+X3 SET EXCHANGE PACKAGE TYPE AND ADDRESS
SA3 SCA
LX3 24
BX6 X6+X3 SET SYSTEM CONTROL POINT
SA6 CPAL
SA3 SCSC ENABLE DUAL-CP EXTENSIONS
BX7 X3
SA3 A3+B1
ERRNZ SCSD-SCSC-1
SA7 /MONITOR/BNJ15
NO
BX7 X3
SA7 /MONITOR/RCCB
SX3 /DCP/IXP1
SX4 DIXT
SCS3 SA2 A2+1 SET CPU 1 IDLE PACKAGE
BX6 X2+X3
SCS4 SA6 A2
LX4 42
BX6 X4+X3 SET EXCHANGE PACKAGE TYPE AND ADDRESS
SA3 SCA
LX3 24
BX6 X6+X3 SET SYSTEM CONTROL POINT
SA6 A2+CPAL-ACPL
SA1 DCPC
ZR X1,SCS5 IF NOT DUAL CPU MACHINE WITH CACHE
SA1 EIBP SET EXCHANGE PACKAGE ADDRESS
MX7 42
LX7 32
SX6 /DCP/SCX1 EXCHANGE PACKAGE FOR IDLE PROGRAM STARTUP
BX1 X7*X1
LX6 32
BX6 X1+X6
SA6 A1
SA1 SCSE SET IDLE PACKAGE PROGRAM FOR CPU1
BX6 X1
SA6 /DCP/IDL1+2
SCS5 SA0 /MONITOR/PXP
EQ SCS RETURN
SCSC EQ /DCP/BNJ
SCSD EQ /DCP/RCC
SCSE EQ 2 LOOP WITHOUT DELAY
SDT SPACE 4,20
** SDT - SET DATE AND TIME FROM *CTI*-SUPPLIED VALUES.
*
* IN ORDER TO PROVIDE A VALID DATE AND TIME ON THE DISPLAY
* AS SOON AS POSSIBLE, THIS ROUTINE IS CALLED AT THE BEGINNING
* OF *CPUMTR* PRESET. BECAUSE OF THE LENGTH OF TIME REQUIRED
* TO EXECUTE *CPUMTR* PRESET, THIS ROUTINE WILL BE CALLED AGAIN
* AT THE END OF *CPUMTR* PRESET TO MAINTAIN CLOCK PRECISION.
*
* THIS CODE IS DERIVED FROM THE *FTN5* COMPILER OBJECT
* CODE PRODUCED FOR A FORTRAN VERSION OF THE ALGORITHM
* DEVELOPED IN *CYBIL* FOR NOS/VE.
*
* ENTRY (TIML) = *CTI*-SUPPLIED PACKED BASE TIME (FIRST CALL).
* (DTEL) = *CTI*-SUPPLIED PACKED BASE DATE (FIRST CALL).
* (PDTL) = *CTI*-SUPPLIED *FRC* BASE VALUE (FIRST CALL).
*
* EXIT (DTEL) = CURRENT DISPLAY CODE DATE.
* (TIML) = CURRENT DISPLAY CODE TIME.
*
* USES X - ALL.
* A - 1, 2, 3, 4, 5, 6, 7.
* B - 2, 7.
*
* MACROS EDATE, ETIME.
SDT SUBR ENTRY/EXIT
* SAVE *CTI*-SUPPLIED VALUES ON INITIAL CALL.
SA1 SDTB
NZ X1,SDT0 IF NOT FIRST CALL TO *SDT*
SA1 TIML SAVE *CTI*-SUPPLIED PACKED BASE TIME
SA2 DTEL SAVE *CTI*-SUPPLIED PACKED BASE DATE
BX6 X1
LX7 X2
SA1 PDTL SAVE *CTI*-SUPPLIED *FRC* BASE VALUE
SA6 SDTA
SA7 SDTB
BX6 X1
SA6 SDTC
* CHECK MAINFRAME TYPE.
SDT0 SA1 MABL
LX1 59-47
NG X1,SDTX IF NOT A CME MAINFRAME
* INITIALIZE *RTC* VARIABLES.
SA3 /CME/RTCC INITIALIZE REAL TIME CLOCK
RC X6 GET CURRENT *FRC* VALUE
BX7 X3
SA6 /CME/RTCA INITIALIZE WHOLE MILLISECOND BASE TIME
SA7 RTCL
SA6 /CME/RTCB INITIALIZE WHOLE SECOND BASE TIME
LX1 59-42-59+47
PL X1,SDTX IF CYBER 865/875
* CALCULATE ELAPSED TIME SINCE CTI-SUPPLIED DATE/TIME.
SA5 SDTC GET CTI-SUPPLIED *FRC* VALUE
IX6 X6-X5
PL X6,SDT1 IF CTI *FRC* VALID (.LT. CURRENT *FRC*)
SX6 0 USE CTI-SUPPLIED DATE/TIME INTACT
SDT1 SA6 FRC
SA4 =500000 ROUND UP TO NEAREST WHOLE SECOND
SA3 =1000000.0
IX0 X6+X4
PX7 X0
FX0 X7/X3
UX7,B2 X0
* CALCULATE CURRENT TIME.
SA5 =60.0 ADVANCE SECONDS
LX0 B2,X7
PX7 X0
FX6 X7/X5
UX7,B2 X6
SA5 SDTA CONVERT PACKED DECIMAL SECONDS AND MINUTES
BX6 X5
BX4 X5
MX3 -4
LX6 56
LX4 44
BX2 -X3*X6
BX6 -X3*X4
BX4 X2
LX7 B2,X7 UPDATE *FRC* TO BE ELAPSED MINUTES
SX1 60
LX4 2
IX2 X4+X2
BX4 X6
LX4 2
IX6 X4+X6
DX4 X7*X1
LX2 1
IX0 X0-X4 CALCULATE NUMBER OF SECONDS TO ADVANCE
BX4 X5
BX5 -X3*X5
LX4 48
LX6 1
IX2 X5+X2
BX5 -X3*X4
IX6 X5+X6
SA7 FRC
IX7 X0+X2
SA6 MN
SA7 SS
IX7 X7-X1
NG X7,SDT2 IF NO MINUTE CHANGE
SA7 A7
SX0 B1
IX7 X0+X6
SA7 A6
SDT2 SA5 FRC ADVANCE MINUTES
SA4 =60.0
PX0 X5
FX7 X0/X4
SA4 SDTA CONVERT PACKED DECIMAL HOURS
BX0 X4
LX0 32
UX2,B2 X7
BX7 -X3*X0
SX0 60
LX6 B2,X2 UPDATE *FRC* TO BE ELAPSED HOURS
BX2 X7
DX1 X6*X0
LX2 2
IX7 X2+X7
SA2 MN
LX4 36
IX1 X5-X1 CALCULATE NUMBER OF MINUTES TO ADVANCE
BX5 -X3*X4
LX7 1
IX7 X5+X7
SA6 A5
IX6 X2+X1
SA7 HH
SA6 A2
IX6 X6-X0
NG X6,SDT3 IF NO HOUR CHANGE
SX0 B1
IX7 X0+X7
SA6 A6
SA7 A7
SDT3 SA5 FRC ADVANCE HOURS
SA4 =24.0
PX0 X5
FX7 X0/X4
SA4 SDTB CONVERT PACKED DECIMAL DAYS
BX0 X4
LX0 56
UX2,B2 X7
BX7 -X3*X0
SX0 24
LX6 B2,X2 UPDATE *FRC* TO ELAPSED DAYS
BX2 X7
DX1 X6*X0
LX2 2
IX7 X2+X7
SA2 HH
BX3 -X3*X4
IX4 X5-X1 CALCULATE NUMBER OF HOURS TO ADVANCE
LX7 1
IX7 X3+X7
SA6 A5
IX6 X2+X4
SA7 DD
SA6 A2
IX6 X6-X0
NG X6,SDT4 IF NO DAY CHANGE
SA6 A6
SX0 B1
IX6 X0+X7
SA6 A7
* CALCULATE CURRENT DATE.
SDT4 SA5 SDTB ADVANCE DATE
BX0 X5
LX0 32
MX7 -4 CONVERT PACKED DECIMAL MONTH AND YEAR
BX4 X5
BX3 -X7*X0
LX4 44
BX0 X3
BX2 -X7*X4
LX0 2
BX4 X2
BX1 X5
IX3 X0+X3
LX4 2
LX1 36
IX0 X4+X2
BX4 -X7*X1
LX3 1
LX5 48
IX6 X4+X3
BX4 -X7*X5
LX0 1
SA6 YY
IX6 X4+X0
SA6 MM
* CALCULATE CURRENT MONTH AND DAY.
SA5 MM
SA4 YY
SA3 DD
SA2 FRC
IX3 X3+X2
* ADJUST YEAR, MONTH, DAY UNTIL DAY FITS WITHIN MONTH.
SDT5 MX7 -2 CHECK FOR LEAP YEAR
SX6 28
BX7 -X7*X4
NZ X7,SDT5.1 IF NOT LEAP YEAR
SX6 29
SDT5.1 SA6 DAYS+1 RESET NUMBER OF DAYS IN FEBRUARY
SDT6 SA1 X5+DAYS-1 ADJUST ELAPSED DAYS BY DAYS IN MONTH
IX2 X1-X3
PL X2,SDT7 IF DAYS FIT WITHIN CURRENT MONTH
SX5 X5+B1 ADVANCE MONTH
IX3 X3-X1 DECREMENT ELAPSED DAYS
SB7 X5-13
NG B7,SDT6 IF NOT YEAR ROLLOVER
SX5 B1 RESET MONTH TO JANUARY
SX4 X4+B1 ADVANCE YEAR
EQ SDT5 RECHECK FOR LEAP YEAR
* CONVERT CALCULATED VALUES TO DISPLAY WALL CLOCK DATE/TIME.
SDT7 SX1 X4-70 BIAS YEAR BY 1970
PL X1,SDT8 IF YEAR BEFORE 2000
SX1 X1+100 ADJUST BIAS FOR YEARS 2000 - 2033
SDT8 LX1 12 PACK DATE
LX5 6
BX1 X1+X5
BX1 X1+X3
EDATE X1 CONVERT PACKED DATE TO DISPLAY CODE
SA6 DTEL
SA1 HH PACK TIME
LX1 12
SA2 MN
LX2 6
SA3 SS
BX1 X1+X2
BX1 X1+X3
ETIME X1 EDIT TIME
SA6 TIML
EQ SDTX RETURN
SDTA CON 0 *CTI*-SUPPLIED PACKED BASE TIME
SDTB CON 0 *CTI*-SUPPLIED PACKED BASE DATE
SDTC CON 0 *CTI*-SUPPLIED BASE *FRC* VALUE
* DATE/TIME CELLS.
YY BSS 1 YEAR
MM BSS 1 MONTH
DD BSS 1 DAY
HH BSS 1 HOUR
MN BSS 1 MINUTE
SS BSS 1 SECOND
FRC BSS 1 FREE RUNNING CLOCK
* ARRAY CONTAINING THE NUMBER OF DAYS IN EACH MONTH.
DAYS DATA 31,28,31,30,31,30,31,31,30,31,30,31
*DAYS DATA 31,29,31,30,31,30,31,31,30,31,30,31 (LEAP YEAR)
SJB SPACE 4,10
** SJB - SETUP JOB CONTROL BLOCK TABLE.
*
* EXIT JCB SET UP FOR ALL SERVICE CLASSES.
*
* USES X - 4.
* B - 3.
*
* CALLS /MONITOR/CCP.
SJB SUBR ENTRY/EXIT
SX4 MXJC SET MAXIMUM SERVICE CLASS
SB3 SJB1 SET RETURN ADDRESS
SJB1 SX4 X4-1
ZR X4,SJBX IF ALL SERVICE CLASSES PROCESSED
EQ /MONITOR/CCP CONVERT CPU SCHEDULING PARAMETERS
SSP SPACE 4,10
** SSP - SET SYSTEM PARAMETERS.
SSP7.9 SA1 BIOL
AX1 24
SX7 X1
ZR X7,SSP IF NO BUFFERED I/O
SB6 X1+CBTP LAST ENTRY
SA7 BDT
MX3 -18
SX7 X7+BDTL
SA2 X1-1
SSP8 SA2 A2+B1 NEXT ENTRY
BX6 X7+X2
LX2 -24
SA7 A7+B1
SA6 A2
BX4 -X3*X2
IX7 X7+X4
SX4 A2-B6
NZ X4,SSP8 IF MORE ENTRIES TO PROCESS
SX6 X1+EMTP
SX7 X1+DWTP
SA6 EMTB
SA7 DWTB
SX6 X6-1
SA6 BLMB
SX6 X1+DRDP
SX7 X1+WRTP
SA6 DRDB
SA7 WRTB
SA2 X1+CBTP GET NUMBER OF I/O BUFFERS
SA4 X1+PUTP
SX7 X1+IORQP
LX2 12
MX3 -12
SA7 IORQ
BX6 -X3*X2
LX4 12
SA6 NIOB
BX7 -X3*X4
AX6 2 SET MAXIMUM DATA WRITTEN TO 1/4 OF TOTAL
SA7 NRUN
SA6 MDWB
SSP PS ENTRY/EXIT
SA2 EMBP
LX2 -24 SET *EMB* POINTER
SX7 X2
SA7 EMB
* SET CONTROL POINT AND PSEUDO-CONTROL POINT PARAMETERS.
SA1 PCPP
SX6 X1 SET PCP AREA ADDRESS
MX0 -12
ERRNZ MCTP-PCPP CODE DEPENDS ON VALUE
AX1 24
BX7 -X0*X1 NUMBER OF MCT ENTRIES
SA6 PCPA
AX1 12 POSITION TO MCT ADDRESS
BX6 X1
SA7 NMCT SET MCT ENTRY COUNT
SA6 MCT
SA1 NCPL SET SYSTEM CONTROL POINT NUMBER
AX1 36
BX6 -X0*X1
SX6 X6+B1
SA6 SC
SX2 X6+B1 NUMBER OF CP-S (INCLUDING CP-0)
LX6 7
SA6 SCA SET SYSTEM CONTROL POINT ADDRESS
IX6 X7-X2 CALCULATE PCP COUNT
SA6 NPCP
LX7 7
SA7 PCM2 SET MAXIMUM PCP OFFSET
* SET PP CONFIGURATION PARAMETERS.
SA2 PPCP SET FIRST PP COMMUNICATION ADDRESS
BX7 -X0*X2
SA7 FP
BX6 X7 SET FIRST PP COMMUNICATION ADDRESS/8
AX6 3
SA6 FP8
LX2 -36
SX6 X2
SX3 X2
SA6 FPX SET EXTENDED PP COMMUNICATION BLOCKS FWA
SA1 PPUL SET CPP-S COMMUNICATION ADDRESS
SX2 X1 GET NUMBER OF PHYSICALLY PRESENT CPP-S
AX2 12D
LX1 -24
BX1 -X0*X1
SX6 20D NUMBER OF PP-S IN 2 BARREL SYSTEM
SB2 X1-11D
PL B2,SSP.0 IF NOT 2 BARRELS
SX6 10D
SSP.0 LX6 3
IX6 X6+X7
SA6 FPC ADDRESS OF CPP COMMUNICATION AREA
ZR X2,SSP0.1 IF NO CPP-S
LX2 3
IX6 X2+X6
SSP0.1 SA6 SP ADDRESS OF PSEUDO PP COMMUNICATION AREA
IX7 X6-X7
LX7 PPXES-PPCES
IX7 X3+X7
SA7 SPX SET PSEUDO PP EXTENDED BLOCK ADDRESS
SX7 0 CLEAR INPUT REGISTER
SA7 X6+
* SET CENTRAL AND EXTENDED MEMORY CONFIGURATION PARAMETERS.
SA1 CFGL GET HARDWARE ECS/ESM MODE
SX6 B1+
AX1 22
BX6 X6*X1
SA6 ESM SET ESM MODE IF BIT IS SET
SA1 MABL CHECK FOR 8XX
ZR X6,SSP0.11 IF NOT ESM MODE
LX1 59-47
NG X1,SSP0.10 IF NOT CYBER 8XX
LX1 59-42-59+47
NG X1,SSP0.11 IF NOT CYBER 865/875
SSP0.10 SA6 ESM170 SET 170 ESM MODE
SSP0.11 BX6 X4 SET FL
AX6 36
BX7 X5 SET FLX
LX7 -36
SA6 MCM
SA1 MEFL GET EXPANDED ADDRESSING FLAG
SA7 MEC
SA7 MXM SET MAXIMUM MEMORY
AX6 6 SET FL SHIFTED
SA6 MCMS
LX1 59-31
MX4 37
SA3 EEC
BX4 X4*X7
BX7 X4-X7
PL X1,SSP0.12 IF NOT EXPANDED ADDRESSING
SA6 ESM170 SET EXPANDED ADDRESSING INDICATOR
LX7 6
SSP0.12 AX4 9
AX7 9 SET FLE / 1000B
SA7 MECNF
BX7 X4+X7 SET FLX FLAG BIT SHIFTED
SA7 MECS
MX4 -2 SET EXTENDED MEMORY SHIFT COUNT
LX1 0-29-59+31
BX7 -X4*X1
SA7 TNSC
SB4 X7
SX7 X7-6 (0 TO 3)-6 = (-6 TO -3)
MX4 -3 SET USER EM SHIFT COUNT
SA7 MESC
LX1 0-33-0+29 POSITION USER EM SHIFT COUNT
BX7 -X4*X1
SA7 UESC STORE USER EM SHIFT COUNT
SX1 20B
LX7 B4,X1
SA7 TCNT SET TRACK SIZE
SA1 MABL
LX1 59-47
NG X1,SSP0.3 IF NOT CME
LX6 6 SET MAXIMUM MEMORY
SA6 MXM
SX6 B0+ CLEAR THE NON-CME INDICATOR
SA6 NCME
SA1 MABL
LX1 59-42
MX7 -8
PL X1,SSP0.15 IF 170 - 865/875
SA1 EABL+CPEI GET PROCESSOR DESCRIPTOR POINTER
LX1 18
SA4 X1 ISOLATE MODEL NUMBER
AX4 28
SX2 TMNB
SA1 X1+3 GET CYBER 990 LARGE MEMORY INDICATOR
LX1 59-12
PL X1,SSP0.14 IF NOT A LARGE MEMORY CYBER 990
SX6 B0+
SA6 CCMB
SA1 MEC SET PROGRAM MODE FLE TO MACHINE FLE
BX6 X1
SA6 MECPRG
SSP0.14 SA1 X2
ZR X1,SSP0.16 IF END OF TABLE
SX2 X2+B1
BX6 X1-X4
BX6 -X7*X6
NZ X6,SSP0.14 IF NO MATCH ON MODEL NUMBER
AX1 30 SET *TCPM* INDEX
SX7 X1
SA7 TMNBA
MX7 -12
AX1 18 SET ACCOUNTING ADJUSTMENT
BX7 -X7*X1
AX6 X7,B1
SA7 ACAD
SA6 ACAD2
EQ SSP0.16 SET/CLEAR CM COPY FLAG
SSP0.15 SA4 UEML SET USER EM IN EXTERNAL EM FLAG
SX2 B1+B1
BX6 X2*X4
SA6 XUEM
SSP0.16 SX6 EEMC+100B CLEAR CM COPY FLAG TO ACCESS EXTERNAL EM
SX7 EEMC+100B-1
SX2 B1+B1
SX4 B1+B1
NZ X3,SSP0.2 IF EXTERNAL ECS PRESENT
SX6 EEMC+500B SET CM COPY FLAG TO ACCESS INTERNAL ECS
SX7 EEMC+500B-1
SX4 B0+
SSP0.2 SA1 ESM170 GET ADDRESSING MODE
ZR X1,SSP0.21 IF NOT EXPANDED ADDRESSING
SX1 200B SET EXPANDED ADDRESSING FLAG
BX6 X6+X1
BX7 X7+X1
SSP0.21 SA6 XPFE
SA7 PXPFE
SA6 CXPFE
SX6 EEMC-1+400B+100B
BX6 X6+X1
SA6 EXPFEC
SA1 UEML
BX2 X2*X1
BX6 -X2*X4
LX6 59-1
AX6 18
SA4 UEC SET STORAGE MOVE XP FLAG IF EXTERNAL UEC
LX1 12
BX6 X6*X4
SA6 SMXF
ZR X2,SSP0.3 IF UEM NOT PRESENT
NZ X3,SSP0.3 IF SIMULTANEOUS UEM/ESM
BX6 -X0*X1
SA2 MABL CHECK FOR CYBER 180
LX2 59-42
SA1 ESM170 PICK UP EXPANDED MODE FLAG
PL X2,SSP0.22 IF CY170-865/875
ZR X1,SSP0.22 IF NOT IN EXPANDED MODE
SA6 UEM180 SET 180 EXPANDED MODE FOR FAKE READ
SSP0.22 BX2 X6 PRESERVE RAE/1000
LX6 3 RAE/100
NZ X1,SSP0.23 IF EXPANDED MODE
LX6 6 RAE
SSP0.23 SA6 RXX SET RXX VALUE FOR EXCHANGE PACKAGES
BX6 X2 RESTORE RAE/1000 TO X6
SA6 RAEX
LX6 9
SA1 MCM INCLUDE UEM IN MAXIMUM MACHINE FL
SA2 MEC
SA6 A6-B1
ERRNZ RAEX-RAE-1 CODE DEPENDS ON CONSECUTIVE LOCATIONS
IX6 X1+X2
SA6 MXM
* SET TABLE POINTERS.
SSP0.3 SA1 SSTL
LX1 59-29
NG X1,SSP0.32 IF TRACE DISABLED
SX7 B0+
SA7 NTRACE CLEAR NON-TRACE INDICATOR
SSP0.32 SA1 ESTP READ EST POINTER
LX1 24 SET EST FWA
SX7 X1
LX1 12 SET EST LENGTH
BX6 -X0*X1
SA7 EST
SA6 ESTL
LX1 12 SET LAST MASS STORAGE ORDINAL + 1
BX6 -X0*X1
SA6 IBOP SAVE IN ROUTINE *IBO*
SA1 EVTP GET EVENT TABLE POINTER
AX1 36
SX6 X1 FWA EVENT TABLE
SA6 EVT
SA1 EPBP GET ECS PP BUFFER POINTER
MX4 -6
SX6 X1 FWA ECS PP BUFFERS
SA6 ECSB
LX1 -18
SX2 ECBL LENGTH OF EACH PP ECS BUFFER
BX4 -X4*X1 NUMBER OF PP ECS BUFFERS
IX6 X4*X2
SA6 ECSBL SET PP ECS BUFFERS TOTAL LENGTH
SA1 SSML GET OPERATING SYSTEM SECURITY MODE
MX6 -6
LX1 12
BX6 -X6*X1
SA6 OSSM
SA1 EXML GET EXTENDED MEMORY EST ORDINAL
MX6 -9
BX6 -X6*X1
SA6 EEM
SA1 DFPP SET DAYFILE POINTERS FWA
LX1 24
SB6 X6 (B6) = EM EST ORDINAL (CPU ACCESS)
CX4 X6,EST CONVERT EST ORDINAL TO OFFSET
IX7 X7+X4
SX6 X1
SA6 DP
SA1 FNTP SET FWA/LWA OF FNT
MX4 -24
LX1 24
BX6 -X4*X1
BX2 X6
SA6 FNT
LX1 12
BX6 -X0*X1 EXTRACT NUMBER OF ENTRIES IN FNT
SA6 FNTM
CX1 X6,FNT LENGTH OF FNT
IX6 X2+X1
SA1 X7+ GET MST ADDRESS OF ECS
NZ B6,SSP0.4 IF ECS EQUIPMENT DEFINED
SX7 B0 CLEAR ECS EST AND MST ADDRESSES
BX1 X1-X1
SSP0.4 SA6 FNTLWA LWA+1 OF SYSTEM FNT
SA7 EEN
BX7 -X0*X1
LX7 3 MST ADDRESS
SA7 EMS
SA1 EJTP GET FWA OF EJT
LX1 24
BX6 -X4*X1
SA6 EJT
LX1 12
BX6 -X0*X1 MAXIMUM NUMBER OF ENTRIES IN EJT
SA6 EJTM
SA1 SDAP SET FWA STATISTICAL DATA AREA
LX1 24
BX6 -X4*X1
SA6 SDA
SA2 SSCP GET FWA *SSCT* TABLE
LX2 -12
BX7 -X4*X2
SA7 SSCT
SA2 MABL CHECK FOR CMU
LX2 59-39
PL X2,SSP1 IF CMU PRESENT
BX1 X2 CHECK IF CPU 0 HAS INSTRUCTION STACK
LX1 59-40-59+39
NG X1,SSP2 IF NOT STACK MACHINE
SA4 SFFO DECREASE SFCALL FUNCTION TIME BY 1/2
AX6 X4,B1
SA6 A4
SX7 B1 875 CM TRANSFER RATE SHIFT
LX1 59-38-59+40
SA7 SFCS
NG X1,SSP2 IF AN 875
SSP1 SX7 2 SET SFCALL CM TRANSFER RATE SHIFT
SA7 SFCS
SSP2 SA4 UEML
LX4 0-1
SX6 B1
BX6 X6*X4
SA6 UEM SET/CLEAR UEM FLAG
NZ X6,SSP4.1 IF UEM
SX6 B1 SET NON-UEM FLAG
SA6 NOTUEM
ZR B6,SSP5 IF NO EXTERNAL ECS EQUIPMENT
SA1 MECNF
SX6 X1-500000/1000B
SX7 B0+
PL X6,SSP3 IF ECS SIZE .GE. 500K
SX6 X1-256000/1000B
SX7 B1
PL X6,SSP3 IF ECS SIZE .GE. 256K
SX7 B1+B1
SSP3 SA7 SFES SET SFCALL ECS TRANSFER RATE SHIFT
SA1 CME
NZ X1,SSP4.1 IF CME AVAILABLE
PL X6,SSP4 IF ECS SIZE .GE. 256K
PL X2,SSP4.1 IF CMU PRESENT
SSP4 SX7 B1+ SET TO USE ECS
SA7 ECM
SSP4.1 SA1 UEC
ZR X1,SSP5 IF USER ECS NOT PRESENT
BX7 X7-X7
SA7 NOTDCE ALLOW DUAL CPU USER ECS TRANSFER
SX7 B1
LX2 59-47-59+39
PL X2,SSP5 IF CM EXTENSION PRESENT
SA1 /PROGRAM/SMPXP+CWQW FORCE INTO CPU-0
SA7 A7 PREVENT DUAL CPU USER ECS TRANSFER
LX7 24
BX7 X1+X7
SA7 A1
SSP5 SA1 JBCP SET FWA OF JOB CONTROL BLOCK TABLE
AX1 36
BX6 X1
SA6 JCB
SA1 DSSL GET RECOVERY MODE
MX0 -2
BX7 -X0*X1
SA7 CIRA SET RECOVERY MODE
SA2 MCE
ZR X2,SSP5.1 IF MEMORY CLEARING NOT ENABLED
SA7 /MCE/PRSA SET RECOVERY LEVEL
SSP5.1 SA2 MSAP SET DEVICE SELECTION ADDRESS
AX2 36
BX6 X2
SA6 MSA
SA2 MABL CHECK MAINFRAME TYPE
MX3 2
LX2 59-46
BX2 X3*X2
BX2 X2-X3
NZ X2,SSP6 IF NOT CYBER 176 MAINFRAME
SX6 EEMC+60B-1 SET XP FLAG AND EXIT MODE FOR CYBER 176
SA6 XPFE
SA2 EST LOCATE CYBER 176 EXCHANGE PACKAGE AREA
SA3 ESTL
CX6 X3,EST LWA+1 OF EST
IX2 X2+X6
MX0 4
SX2 X2+777B
LX0 4+9
BX6 X0*X2
SX7 X6+/MONITOR/EEA-/MONITOR/MCU
SA6 EXPA
SA7 EEAD
SSP6 SA1 MMFL
LX1 15
AX1 60-9
ZR X1,SSP7 IF NOT MMF CONFIGURATION
RJ ILD INITIALIZE LINK DEVICE
NZ B6,SSP7 IF ERROR FOUND
SA1 SFES DECREASE ECS TRANSFER RATE BY 1/2
SX6 X1+B1
SA6 A1
MX0 -12
SA1 MMFL SET MMF PARAMETERS
BX6 -X0*X1
MX4 -MXMF
LX1 -12
SA6 MIN SET MACHINE INDEX
BX7 -X4*X1
LX2 X6,B1 SET MST INTERLOCKS
LX6 6
SA6 MRT SET MRT ADDRESS
SA7 MMK SET MACHINE MASK
SX7 X2+B1
SA7 MIL
LX1 -36
BX7 -X0*X1
SA7 MID SET MACHINE ID
BX1 X6 COMPUTE MST LOCAL AREA OFFSET
AX6 1
IX6 X1+X6
AX6 4
SA6 MSL
SSP7 SA1 EIBP SET FWA OF *EICB*
SX6 X1
SA6 DSCB
ZR X6,SSP7.9 IF NO *EICB*
RT X1,/DST/EICB TELL *EI* WHERE THE *EICB* IS
SX7 SVNL SET SYSTEM VERSION NAME POINTER IN *EICB*
SA7 X6+/DST/D7SV+2
SX7 SYTL SET SYSTEM TITLE LINE POINTER IN *EICB*
SA7 X6+/DST/D7SV+3
LX1 59-58
PL X1,SSP7.1 IF NOT DUAL CPU MACHINE WITH CACHE
SX6 B1
BX7 X7-X7
SA6 DCPC SET DUAL CPU MACHINE WITH CACHE FLAGS
SA7 NDCPC
SSP7.1 SA1 SSTL
LX1 59-44
NG X1,SSP7.2 IF HARDWARE FAULT INJECTION IS DISABLED
SA1 X6+/DST/D7JP SET *V1*, *V2* AND *V3* BITS IN *EICB*
MX6 3
LX6 16-57
BX6 X1+X6
SA6 A1
SSP7.2 SA1 SSCT
SX6 X1-1
SX1 NVSI-MXSI-1
SSP7.3 SX1 X1+5
SX6 X6+1
NG X1,SSP7.3 IF NOT TO *NVE* ENTRY WORD YET
SA6 NVESS ADDRESS OF WORD WITH *NVE* ENTRY
LX1 2
LX6 X1,B1
IX1 X1+X6
SX6 48
IX6 X6-X1
SA6 NVEOS SHIFT COUNT GETS *NVE* ENTRY IN BITS 59-48
EQ SSP7.9 CHECK FOR BUFFERED I/O
IBO SPACE 4,10
** IBO - INITIALIZE FOR BUFFERED I/O.
*
* ENTRY (CIRA) = RECOVERY LEVEL.
*
* CALLS RBT.
IBO21 RJ RBT RECOVER BUFFERED I/O TABLES
IBO PS ENTRY/EXIT
SA1 BIOL
AX1 24
SX1 X1
ZR X1,IBO IF NO BUFFERED I/O
SA1 CIRA GET RECOVERY LEVEL
SX1 X1-3
ZR X1,IBO21 IF CM RECOVERY
TA3 NOPE*ESTE-1*ESTE,EST
SB2 NOPE-1 INITIALIZE EQUIPMENT INDEX
SA5 IBOP
SB7 A0 SAVE (A0)
SB6 X5
TNO /PRESET/IBO2,IHPFMD IF NO 819 DEVICES
SX6 100B INITIALIZE CCT FOR 819-S
SX4 202B
LX6 36
LX4 36
TA6 CCNT,CCT SET UP CCT
SB3 NCCT-1
IBO1 IX6 X6+X4
SB3 B3-B1
SA6 A6+CCTL
NZ B3,IBO1 IF NOT COMPLETE
TX6 NCCT*CCTL,CCT
SA6 IBOD SET NEW LWA+1 OF *CCT*
IBO2 SA5 IBOA-1
SX0 7777B
IBO3 SA3 A3+ESTE CHECK NEXT EST ENTRY
SB2 B2+B1
BX4 X0*X3
EQ B2,B6,IBO15 IF END OF EST
PL X3,IBO3 IF NOT MASS STORAGE DEVICE
LX4 3
SA1 X4+DILL FETCH DRIVER WORD FROM MST
LX1 59-22
PL X1,IBO3 IF NOT BUFFERED DEVICE
MX0 -11
LX3 -12
IBO4 SA5 A5+B1
ZR X5,IBO2 IF END OF TABLE (NOT BUFFERED DEVICE)
BX6 X5-X3
BX6 -X0*X6
NZ X6,IBO4 IF NO DEVICE MATCH
BX6 -X0*X3
BX7 X5
SA6 IBOK DEVICE CODE
MX2 -6
LX1 22-59
SA7 IBOQ SAVE DRIVER NAME
BX6 -X2*X1 ALGORITHM INDEX
SX2 X6-AIAB
NG X2,IBO4.1 IF NOT DAS DEVICE
SX2 X6-AIAE
PL X2,IBO4.1 IF NOT DAS DEVICE
SA2 A1+STLL-DILL
PL X2,IBO4.1 IF FORMAT NOT PENDING
SX6 B0+
IBO4.1 SA6 IBOF SET DAS FORMAT PENDING FLAG
SA2 A1+DDLL-DILL
MX6 -3
BX7 X2
LX2 -48
BX6 -X6*X2 NUMBER OF UNITS - 1
SX6 X6+B1
LX3 12-24
SA7 IBOG UNIT LIST
LX2 -6
MX7 -3
BX7 -X7*X2
SA7 IBOR EQUIPMENT (CONTROLLER) NUMBER
BX1 -X0*X3
LX3 24-36
SA6 IBOH NUMBER OF UNITS
BX3 -X0*X3
LX1 12
SA2 A5+IBOS-IBOA SET READ AHEAD PARAMETERS
BX6 X1+X3
SA6 IBOM CHANNEL LIST
LX7 X2
SA2 A1+BDLL-DILL
MX6 -30
LX6 18
BX2 -X6*X2
BX7 X2+X7
SA1 A1+ *DILL* WORD OF CURRENT MST
SA7 A2
MX0 -12
LX1 -24
BX7 -X0*X1 PRIOR PARTITION EST ORDINAL
SA7 IBOT FLAG WHETHER *PUT* PREVIOUSLY ESTABLISHED
ZR X7,IBO5 IF NO PRIOR PARTITION
BX1 X0*X1 CLEAR ORDINAL FIELD
CX3 X7,EST CONVERT EST ORDINAL TO OFFSET
TA2 X3+EQDE,EST GET PRIOR PARTITION EST ENTRY
BX2 -X0*X2
LX2 3 PRIOR PARTITION MST ADDRESS
SA2 X2+DILL *DILL* WORD OF PRIOR PARTITION MST
LX2 -24
BX2 -X0*X2 *PUT* ORDINAL FROM PRIOR PARTITION MST
BX7 X1+X2 MERGE AND STORE *PUT* ORDINAL
LX7 24
SA7 A1+
IBO5 SA2 IBOH NUMBER OF UNITS
ZR X2,IBO2 IF NO MORE UNITS
SX6 X2-1
SA6 A2
SB3 B0 PRESET NO CHANNELS PROCESSED
SA2 IBOM SET CHANNELS FOR UNIT PROCESSING
SA1 IBOT
BX6 X2
SA6 IBOI
NZ X1,IBO8 IF *PUT*(S) ALREADY ESTABLISHED
SA1 IBOB NEXT AVAILABLE PUT ENTRY
SX6 X1+PUTL
SA6 A1+
SA2 IBOG UNIT LIST
MX6 -6
BX6 -X6*X2 NEXT UNIT
SA6 IBOL UNIT NUMBER
AX2 6
BX7 X2
SA7 A2
SX2 B2 EST ORDINAL
LX6 48
LX2 36
SA4 IBOR EQUIPMENT (CONTROLLER) NUMBER
BX6 X2+X6
LX4 54
BX6 X4+X6
MX0 -6
SA6 X1+UNCT UNIT CONTROL WORD OF *PUT*
SA2 IBOF
NZ X2,IBO5.1 IF NOT DAS DEVICE WITH FORMAT PENDING
MX7 1
LX7 16-59
SA7 X1+PILL SET *FORMAT* SPECIAL REQUEST FLAG
IBO5.1 SA1 IBOQ NUMBER OF PARTITIONS AND SECTORS/BUFFER
SA2 IBOC FWA OF NEXT AVAILABLE HAT ENTRY
MX3 6
LX1 42
SX4 HATLE
BX3 X3*X1 PHYSICAL SECTORS PER I/O BUFFER
BX1 -X0*X1 NUMBER OF PARTITIONS
IX6 X1*X4 *HAT* SPACE FOR ALL PARTITIONS OF DEVICE
IX7 X2+X6
LX2 24
SA7 A2 NEXT FWA OF NEXT AVAILABLE HAT
SX6 B1
BX2 X3+X2
IX6 X4-X6 HASHING MASK
LX6 42
BX6 X6+X2
SA6 A6+HSCT-UNCT HASH TABLE CONTROL
TX7 A6-HSCT,-PUT COMPUTE PUT ORDINAL
AX7 PUTLS
SA3 A3 EST ENTRY
MX6 -12
BX3 -X6*X3
LX3 3 MST ADDRESS
SA1 X3+DILL *PUT* ORDINAL OF FIRST UNIT IN CHAIN
LX1 -24
BX5 -X6*X1
NZ X5,IBO6 IF MORE UNITS IN CHAIN
BX7 X7+X1 SET *PUT* ORDINAL IN MST FOR FIRST UNIT
LX7 24
SA7 A1
EQ IBO8 PROCESS CHANNELS
IBO6 LX5 PUTLS
TA1 X5+HSCT,PUT CHECK NEXT *PUT* IN CHAIN
BX5 -X6*X1
NZ X5,IBO6 IF NOT END OF CHAIN
BX7 X7+X1 SET CURRENT *PUT* ORDINAL
SA7 A1
* PROCESS CHANNELS.
IBO8 SA2 IBOI
MX0 -6
BX1 -X0*X2 EXTRACT ONE CHANNEL
BX7 X2
AX7 12 REMOVE CHANNEL FROM LIST
SA7 IBOI
ZR B3,IBO9 IF NO CHANNELS PROCESSED
ZR X2,IBO5 IF NO CHANNEL PRESENT
IBO9 SA2 IBOD FWA OF NEXT AVAILABLE *CCT*
TX3 CCT FWA OF *CCT*
IBO10 BX6 X2-X3
ZR X6,IBO11 IF END OF CURRENT CCT-S
SA4 X3+CCNT
LX4 -36
BX7 -X0*X4
BX6 X1-X7
ZR X6,IBO12 IF CHANNEL MATCH
SX3 X3+CCTL ADVANCE *CCT* ADDRESS
TNO /PRESET/IBO10,IHPFMD IF NO 819 DEVICES
LX4 -6
BX7 -X0*X4
BX6 X1-X7
ZR X6,IBO12 IF CHANNEL MATCH
EQ IBO10 CONTINUE SEARCH
IBO11 BX7 X1 CHANNEL
LX7 36
SA7 X2+CCNT CREATE NEW *CCT* ENTRY
SX7 X2+CCTL ADVANCE CCT ADDRESS
SA7 A2
SA2 IBOQ DRIVER PP NAME(S)
SX7 40B
BX7 X7*X1
ZR X7,IBO11.1 IF NOT A CONCURRENT CHANNEL
LX2 18 SET FOR CONCURRENT PP DRIVER
IBO11.1 AX2 42 REMOVE ALL BUT PP NAME
LX2 42 (CODE ASSUMES VALID PP NAME)
BX7 X2+X1 MERGE PP NAME AND CHANNEL NUMBER
TX2 X3,-CCT
LX2 30-CCTLS *CCT* ORDINAL
BX7 X7+X2
SA7 X3+CUN1
IBO12 SB3 B3+B1 ADVANCE CHANNEL PROCESSED
TNO /PRESET/IBO14,IHPFMD IF NO 819 DEVICES
SA2 IBOL UNIT NUMBER
TX7 A6-HSCT,-PUT
AX7 PUTLS *PUT* ORDINAL
SX1 12 COMPUTE BYTE POSITION
IX1 X1*X2
SB4 X1
SB5 B4-4*12
NG B5,IBO13 IF UNITS 0 - 3
SB4 B5
SX3 X3+CUN2-CUN1
IBO13 SA1 X3+CUN1
LX7 B4 POSITION PUT ORDINAL
BX7 X7+X1
SA7 A1
IBO14 LE B3,B1,IBO8 IF BOTH CHANNELS NOT PROCESSED
EQ IBO5 PROCESS NEXT UNIT
* INITIALIZE CONTROL BUFFERS.
IBO15 SA0 IBOE READ IBDT
TX0 ETLT*100B+IBDT,ECLT
TX0 X0,TCNT
SX1 A0
LX1 30
BX0 X0+X1
RE MXMF
+ SA1 A0-B1
SA2 MMFL
MX0 12
SB2 MXMF
IBO16 SA1 A1+B1 SEARCH FOR ID
BX3 X1-X2
BX3 X0*X3
ZR X3,IBO17 IF ID MATCH
SB2 B2-B1
NZ B2,IBO16 IF NOT END OF IBDT
EQ * HANG - ID NOT FOUND
IBO17 MX0 -12
LX1 -12
BX7 -X0*X1 FWA OF I/O BUFFERS
TLX7 9,TNSC
SB6 B1
SX3 PSLB
LX3 9
TB2 1,NIOB
SB3 IOLK+CBTL
IBO18 TA7 B3,CBT I/O BUFFER ADDRESS
SX6 B1
LX6 21
SA6 A7+HSLK-IOLK LIST INDEX
IX7 X7+X3 INCREMENT I/O BUFFER ADDRESS
SX0 B6-B1
SB6 B6+B1
SX6 B6
LX0 36
LX6 24
BX6 X6+X0
SA6 A6+LSLK-HSLK CONTROL BUFFER LINK(S)
SB3 B3+CBTL NEXT BUFFER
LT B6,B2,IBO18 IF MORE BUFFERS
AX6 36
LX6 36
SA6 A6 CLEAR LAST LINK ON LIST
SX7 B6-B1
SX2 B1
LX7 18
BX2 X7+X2
LX7 18
BX7 X2+X7
TA7 EMTB SET EMPTY LIST CONTROL WORD
SA0 B7 RESTORE (A0)
* PROCESS SYSTEM DEVICE(S).
MX0 -12 SET UP SYSTEM DEVICE TABLES
SB3 B0
SX7 NOPE INITIALIZE EST ORDINAL FOR SEARCH
IBO19 CX1 X7,EST CONVERT EST ORDINAL TO OFFSET
TA1 X1+EQDE,EST READ EST ENTRY
PL X1,IBO20 IF NOT MASS STORAGE DEVICE
BX2 X1
LX1 59-58
PL X1,IBO20 IF NOT SYSTEM DEVICE
SA7 /BUFIO/RDBA+B3 SET EST ORDINAL IN TABLE
BX6 -X0*X2
LX6 3
SX6 X6+DALL
SA6 /BUFIO/RDBB+B3
SB3 B3+1 ADVANCE INDEX
IBO20 SX7 X7+B1 ADVANCE EST ORDINAL
SA1 IBOP
IX1 X7-X1
NG X1,IBO19 IF NOT END OF MASS STORAGE DEVICES
SX7 B0+
SA7 /BUFIO/RDBB+B3 TERMINATE TABLE
GT B3,B1,IBO IF MORE THAN ONE SYSTEM DEVICE
SA1 IBOO
BX6 X1
SA6 /BUFIO/RDB14
EQ IBO RETURN
TBLM SPACE 4,10
** TBLM - GENERATE TABLE OF BUFFERED I/O PARAMETERS.
PURGMAC TBLM
TBLM MACRO EQ
.A IFGE AI_EQ,AIBB
.B IFLT AI_EQ,AIBD
VFD 18/3R"NPP_EQ",18/3R"CPP_EQ",6/PNUN_EQ,6/PSBF_EQ,12/2R_EQ
IBOS RMT
VFD 42/0,6/BCT_EQ,6/RAT_EQ,6/RBT_EQ
IBOS RMT
.B ENDIF
.A ENDIF
ENDM
** BUFFERED I/O DEVICE SUPPORT TABLE *IBOA*.
*
*T,IBOA 18/ NPP, 18/ CPP, 6/ PUN, 6/ SS, 12/ DM
*
*
* NPP NIO PP DRIVER NAME.
* CPP CIO PP DRIVER NAME.
* PUN PARTITIONS PER PHYSICAL DEVICE.
* SS PHYSICAL SECTOR SIZE RELATIVE TO I/O BUFFER SIZE.
* DM DEVICE MNEMONIC.
IBOA BSS 0
LIST G
TBL "MSEQ"
CON 0
** BUFFERED I/O DEVICE SUPPORT TABLE *IBOS*.
*
*T,IBOS 42/ , 6/ BC, 6/ RT, 6/ RB
*
*
* BC DEFAULT BUFFER COUNT.
* RT READ-AHEAD THRESHOLD (NTH BUFFER IN).
* RB DEFAULT READ BUFFER THRESHOLD.
*
* NOTE - TABLE *IBOS* PARALLELS TABLE *IBOA*.
IBOS BSS 0
IBOS HERE
LIST *
PURGMAC TBLM
IBOB TVFD 60/PUTL,PUT CURRENT LWA+1 OF *PUT*
IBOC TVFD 60/0,HAT CURRENT LWA+1 OF *HAT*
IBOD TVFD 60/0,CCT CURRENT LWA+1 OF *CCT*
IBOE BSS MXMF *IBDT* BUFFER
IBOF CON 1 ZERO IF 583X DEVICE WITH FORMAT PENDING
IBOG CON 0 UNIT LIST
IBOH CON 0 NUMBER OF UNITS
IBOI CON 0 CHANNELS (DURING UNIT PROCESSING)
IBOK CON 0 DEVICE TYPE (CODE)
IBOL CON 0 UNIT NUMBER
IBOM CON 0 CHANNELS
IBOO SB0 0 NO OPERATION(S)
SB0 0
IBOP CON 0 LAST MASS STORAGE ORDINAL + 1 (*SSP*)
IBOQ CON 0 SAVE AREA FOR BUFFERED I/O DRIVER NAME
IBOR CON 0 EQUIPMENT (CONTROLLER) NUMBER
IBOT CON 0 ZERO IF *PUT* NOT ALREADY ESTABLISHED
RBS SPACE 4,10
** RBS - RECOVER BUFFER STATUS TABLES.
*
* EXIT READ ONLY ACCESS AND *MTE* REQUEST FLAGS CLEARED.
*
* USES X - 0, 1, 2, 3, 6, 7.
* A - 1, 3, 7.
* B - 2, 3, 4.
RBS PS ENTRY/EXIT
SA1 BIOMMF
ZR X1,RBS IF NO SHARED DEVICES PRESENT
SA1 IBOP
SB2 NOPE-1
SB3 X1+ LAST MASS STORAGE ORDINAL + 1
RBS1 SB2 B2+B1
EQ B2,B3,RBS IF ALL MASS STORAGE EQUIPMENTS CHECKED
SX1 B2
CX2 X1,EST
TA1 X2+EQDE,EST
MX0 -12
SX7 5040B
BX2 -X0*X1
LX1 12
BX1 X7*X1
IX1 X1-X7
NZ X1,RBS1 IF NOT SHARED BUFFERED MASS STORAGE DEVICE
LX2 3 SET MST ADDRESS
SA1 X2+BDLL GET BST POINTER
LX1 -24
SA3 RBSA GET WRITE ACCESS MASK
SA1 X1-1
SB4 BSTL
RBS2 SA1 A1+B1 GET BST WORD
SB4 B4-B1
ZR B4,RBS1 IF END OF BST
BX6 X3*X1
BX7 X3*X1 PRESERVE WRITE ACCESS
LX6 -1
BX7 X7+X6 SET READ ACCESS WITH WRITE ACCESS
SA7 A1 UPDATE BST
EQ RBS2 PROCESS NEXT BST WORD
RBSA DATA 44444444444444440000B
RBT SPACE 4,10
** RBT - RECOVER BUFFERED I/O TABLES.
*
* EXIT (EFRL) = 2000B IF ERROR FOUND DURING RECOVERY.
*
* CALLS RBS, RCB, VUQ, VWL.
RBT9 SA1 EFRL SET ABORT FLAG
SX6 2000B
BX6 X6+X1
SA6 A1
RBT PS ENTRY/EXIT
TA1 IBSP,BDT INITIALIZE TABLE ADDRESS
RBT1 SA2 A1+B1 READ NEXT ENTRY
MX3 6
LX3 18-54
BX6 -X3*X1 CLEAR INTERLOCKS
SA6 A1
MX7 12
BX6 X7*X1 NUMBER OF ENTRIES IN CURRENT TABLE (NE)
MX7 -6
LX1 18
LX6 12
TB3 A1-PUTP,-BDT
ZR B3,RBT2 IF *PUT* POINTER
SB3 B3+PUTP-FTTP
ZR B3,RBT2 IF *FTT* POINTER
SB3 B3+FTTP-CBTP
RBT2 NZ B3,RBT3 IF NOT *CBT* POINTER
SX6 X6+1
RBT3 BX5 -X7*X1 LENGTH OF ENTRY (LE)
LX1 18
MX7 -18
IX3 X6*X5 NE*LE
BX4 -X7*X1 TABLE LENGTH (LT)
IX3 X4-X3
NZ X3,RBT9 IF (NE*LE) .NE. (LT)
TB3 A1-CBTP,-BDT
ZR B3,RBT4 IF LAST ENTRY IN TABLE
LX1 24
BX3 -X7*X2 FWA OF NEXT TABLE
BX5 -X7*X1 FWA OF CURRENT TABLE
IX6 X5+X4 FWA + LT
BX7 X6-X3
NZ X7,RBT9 IF (FWA+LT) .NE. (NEXT FWA)
SA1 A2
EQ RBT1 LOOP
RBT4 RJ VUQ VALIDATE UNIT I/O QUEUES
RJ VWL VALIDATE WRITE LIST
RJ RCB RECOVER CBT
NZ X6,RBT9 IF ERROR FOUND
RJ RBS RECOVER BUFFER STATUS TABLES
* CLEAN UP CHANNEL CONTROL TABLE(S).
TA1 CCTP,BDT GET TABLE DESCRIPTOR
LX1 -24
SB2 X1 LENGTH OF TABLE
SB3 B0 INITIALIZE INDEX
MX0 -48
SX6 B0
RBT5 TA6 B3+CREQ,CCT CLEAR ENTRY
TA1 B3+CCNT,CCT
BX7 -X0*X1
SA7 A1
SB3 B3+CCTL INCREMENT INDEX
LT B3,B2,RBT5 IF NOT END OF TABLE
* CLEAN UP PHYSICAL UNIT AND FUNCTION TIMEOUT TABLES.
TA1 PUTP,BDT GET TABLE DESCRIPTOR
LX1 -24
SB2 X1 LENGTH OF TABLE
SB3 PUTL INITIALIZE INDEX
MX0 -54
TNO RBT5.1,IH819 CLEAR READ RECOVERY INDEX FOR 819-S
MX0 -57 PRESERVE EQUIPMENT NUMBER FOR 9853/*DAS*
RBT5.1 MX2 27
MX3 18
LX2 24+27
LX3 12+0
BX2 X2+X3
BX7 X7-X7
RBT6 TA1 B3+UNCT,PUT CLEAR INTERLOCK AND FLAGS
SX4 B3
BX6 -X0*X1
TA3 B3+HSCT,PUT
AX4 PUTLS-FTTLS
SA6 A1
TA7 X4,FTT CLEAR FTT ENTRY
BX6 X2*X3
SA6 A3
SB3 B3+PUTL INCREMENT INDEX
LT B3,B2,RBT6 IF NOT END OF TABLE
* CLEAN UP PLT.
SB2 PLTL LENGTH OF TABLE
SB3 B0+ INITIALIZE INDEX
SX7 B0+
SX6 B0+
RBT8 TA7 B3,PLT CLEAR TABLE
TA6 B3+1,PLT
SB3 B3+2
LT B3,B2,RBT8 IF NOT END OF TABLE
EQ RBT RETURN
RCB SPACE 4,15
** RCB - RECOVER CBT.
*
* EXIT (X6) = 0 IF NO ERROR.
* (X6) .NE. 0 IF ERROR DETECTED.
* BUFFER INTERLOCKS CLEARED.
* I/0 ACTIVITY FLAGS AND UNIT QUEUE LINKAGE CLEARED.
* READ BUFFERS DROPPED AND LINKED TO EMPTY LIST.
* WRITE BUFFERS LINKED TO WRITE LIST.
*
* USES X - ALL.
* A - 0, 1, 2, 3, 4, 6, 7.
* B - 2, 3, 6, 7.
*
* CALLS /BUFIO/DCH, /BUFIO/LCC.
RCB9 SX6 1 SET ERROR STATUS
RCB PS ENTRY/EXIT
* CLEAN UP BUFFER MANAGER LIST POINTERS.
SX6 B0+
TA6 EMTB CLEAR EMPTY LIST POINTER
TA6 DWTB CLEAR DATA WRITTEN LIST POINTER
TA6 DRDB CLEAR READ LIST POINTER
TA6 WRTB CLEAR WRITE LIST POINTER
* DETERMINE BASE ADDRESS OF DATA BUFFERS.
SB7 A0+ SAVE (A0)
SA0 IBOE CM BUFFER
TX0 ETLT*100B+IBDT,ECLT
TX0 X0,TCNT *IBDT* ADDRESS
SX1 A0
LX1 30
BX0 X0+X1
RE MXMF READ *IBDT*
EQ RCB9 RETURN ERROR ON HALF-EXIT
SA3 A0-B1
SA4 MMFL GET MACHINE ID
MX0 12
SB2 MXMF LENGTH OF *IBDT*
SA0 B7 RESTORE (A0)
RCB1 SA3 A3+1 NEXT ENTRY
BX5 X3-X4 CHECK MACHINE ID
BX5 X0*X5
ZR X5,RCB2 IF THIS MACHINE
SB2 B2-1
NZ B2,RCB1 IF NOT END OF TABLE
EQ RCB9 RETURN ERROR
RCB2 MX0 -12
LX3 -12
BX7 -X0*X3
TLX7 9,TNSC FWA OF I/O BUFFERS
SB3 RCBA SET REGISTER SAVE BUFFER ADDRESS
SX1 LSLB*100B
SX0 B0+ INITIALIZE BUFFER ORDINAL
IX7 X7-X1 INITIALIZE BUFER ADDRESS
* CHECK NEXT BUFFER.
RCB3 SX1 LSLB*100B
SX0 X0+B1 ADVANCE CBT ORDINAL
IX7 X7+X1 ADVANCE DATA BUFFER ADDRESS
BX5 X0
TX6 X0-1,-NIOB
LX5 CBTLS SET CBT OFFSET
ZR X6,RCB IF ALL BUFFERS PROCESSED
TA1 X5+IOLK,CBT
TA2 X5+HSLK,CBT
SX6 B0+
TA6 X5+LSLK,CBT CLEAR LIST LINKAGE AND FLAGS
MX6 -48
LX1 59-57
BX6 -X6*X2 CLEAR *HSLK* FLAGS
SA6 A2
PL X1,RCB5 IF NO WRITE DATA IN BUFFER
* PROCESS WRITE BUFFER.
LX1 59-54-59+57
NG X1,RCB4 IF RECOVERED FLAG SET
SA2 REML SET ERROR FLAG
SX6 WLNL *NON-LINKED WRITE BUFFER.*
BX6 X6+X2
SA6 A2
RCB4 LX1 54-54-59+54 RESTORE *IOLK*
MX3 -24
BX3 -X3*X1 DATA BUFFER ADDRESS
BX3 X3-X7
NZ X3,RCB9 IF DATA BUFFER ADDRESS INCORRECT
SX6 B1
LX6 57-0
BX6 X6+X7 SET WRITE FLAG AND BUFFER ADDRESS
SA6 A1 UPDATE *IOLK*
TX1 WRTB SET WRITE LIST
EQ RCB8 LINK BUFFER TO WRITE LIST
* PROCESS READ BUFFER.
RCB5 LX1 59-54-59+57
PL X1,RCB6 IF RECOVERED FLAG NOT SET
SA2 REML SET RECOVERY ERROR
SX6 WLRD *READ DATA ON WRITE LIST.*
BX6 X2+X6
SA6 A2
RCB6 SX6 B0
TA6 X5+PAD1,CBT CLEAN UP BUFFER
SA6 A6+B1
ERRNZ PAD2-PAD1-1
SA6 A6+B1
ERRNZ PAD3-PAD2-1
SA6 A6+B1
ERRNZ PAD4-PAD3-1
TA7 X5+IOLK,CBT SET BUFFER ADDRESS
SB6 RCB7 SET *DCH* RETURN ADDRESS
EQ /BUFIO/DCH DELINK BUFFER FROM HASH LIST
RCB7 TX1 EMTB SET EMPTY LIST
* LINK BUFFER TO WRITE OR EMPTY LIST.
RCB8 SB6 RCB3 SET *LCC* RETURN ADDRESS
EQ /BUFIO/LCC SET LIST LINKAGE
RCBA BSS 2 REGISTER SAVE BUFFER
VUQ SPACE 4,10
** VUQ - VALIDATE UNIT I/O QUEUE(S).
VUQ PS ENTRY/EXIT
SA1 REML CLEAR PREVIOUS ERRORS
MX7 48
BX7 X7*X1
SA7 A1
* SCAN PUT(S), DELETING READ REQUEST(S) FROM QUEUE(S).
TA1 PUTP,BDT TABLE DESCRIPTOR
LX1 -24
SB2 X1 LENGTH OF TABLE(S)
SB6 PUTL INITIALIZE INDEX
MX6 -12
VUQ1 TA2 B6+UNCT,PUT READ QUEUE CONTROL
BX7 X7-X7
SA7 A2+PILL-UNCT CLEAR PREVIOUS ERRORS, INTERLOCK, FLAGS
MX7 24 CLEAR I/O QUEUE
BX7 X7*X2
SA7 A2
LX2 -24
BX3 -X6*X2
LX2 24
BX0 -X6*X2 FIRST
LX0 CBTLS
NZ X3,VUQ1.1 IF QUEUE SIZE .NE. 0
* QUEUE SIZE IS ZERO - VERIFY IT IS EMPTY.
MX3 -24
BX2 -X3*X2
ZR X2,VUQ6 IF FIRST AND CURRENT .EQ. 0
SA3 A2+PILL-UNCT SET ERROR FLAG
SX7 IOQS *I/O QUEUE SIZE.*
LX7 48
BX7 X7+X3
SA7 A3
VUQ1.1 ZR X0,VUQ IF FIRST .EQ. 0
TA3 X0+IOLK,CBT
LX3 -36
BX2 -X6*X3
NZ X2,VUQ8 IF BACKWARD LINK OF FIRST BUFFER .NE. 0
VUQ2 TA3 X0+IOLK,CBT READ BUFFER
LX3 -24
BX7 X0
BX0 -X6*X3 NEXT BUFFER
ZR X0,VUQ3 IF END OF QUEUE
AX7 CBTLS
LX0 CBTLS
TA4 X0+IOLK,CBT CHECK BACKWARD LINK OF NEXT BUFFER
LX4 -36
BX4 -X6*X4
BX2 X4-X7
NZ X2,VUQ8 IF BACKWARD LINK NOT CORRECT
VUQ3 LX3 59-57+24
PL X3,VUQ5 IF NOT WRITE DATA IN BUFFER
* WRITE DATA FOUND IN BUFFER.
SA4 A3+HSLK-IOLK GET *PUT* ORDINAL
SX5 B6
BX4 -X6*X4
AX5 PUTLS
BX4 X5-X4
NZ X4,VUQ10 IF PUT ORDINAL INCORRECT
LX3 59-54-59+57
NG X3,VUQ8 IF RECOVERED FLAG ALREADY SET
MX7 1
BX7 X3+X7 SET RECOVERED FLAG
LX7 54-59
PL X7,VUQ8 IF I/O INTERLOCK NOT SET
SA7 A3
VUQ5 MX6 -12
NZ X0,VUQ2 IF NOT END OF QUEUE
VUQ6 SB6 B6+PUTL INCREMENT *PUT* INDEX
LT B6,B2,VUQ1 IF NOT END OF *PUT*-S
EQ VUQ RETURN
VUQ8 SX7 IOQL * I/O QUEUE LINKAGE.*
VUQ9 LX7 48
SA3 A2+PILL-UNCT SET ERROR FLAG
BX7 X7+X3
SA7 A3
EQ VUQ6 CHECK NEXT *PUT*
VUQ10 SX7 IOQP * I/O QUEUE *PUT* ORDINAL.*
EQ VUQ9 CONTINUE
VWL SPACE 4,10
** VWL - VALIDATE WRITE LIST.
VWL7 SA1 REML SET ERROR FLAG
BX7 X7+X1
SA7 A1
VWL PS ENTRY/EXIT
TA2 WRTB WRITE LIST POINTER(S)
LX2 -36
SB2 X2 BUFFER COUNT
ZR B2,VWL IF NO WRITE BUFFERS
TA1 WRTB
SX3 X1 FIRST
SB4 B0 PRESET BUFFER COUNT
SX5 B0 PRESET BACKWARD LINK
MX0 -12
ZR X3,VWL3 IF FIRST BUFFER .EQ. 0
VWL1 LX3 CBTLS
TA3 X3+LSLK,CBT READ BUFFER
LX3 -36
BX4 -X0*X3
BX5 X5-X4
NZ X5,VWL3 IF BACKWARD LINK INCORRECT
SA5 A3+IOLK-LSLK
LX5 59-54
NG X5,VWL3 IF RECOVERED FLAG ALREADY SET
MX7 1
BX7 X5+X7 SET RECOVERED FLAG
LX7 59-57-59+54
PL X7,VWL4 IF NOT WRITE DATA
LX7 57-59
NG X7,VWL5 IF I/O INTERLOCK SET
SA7 A5
SB4 B4+B1 COUNT BUFFER
LX3 12
BX3 -X0*X3
TX5 A5-IOLK,-CBT
AX5 CBTLS
NZ X3,VWL1 IF FORWARD LINK .NE. 0
NE B4,B2,VWL6 IF COUNT NOT CORRECT
LX1 -18
SX1 X1
BX5 X1-X5
ZR X5,VWL IF LAST POINTER CORRECT
VWL3 SX7 WLLE * WRITE LIST LINKAGE.*
EQ VWL7 CONTINUE
VWL4 SX7 WLRD * READ DATA ON WRITE LIST.*
EQ VWL7 CONTINUE
VWL5 SX7 WLIB * INTERLOCKED BUFFER ON WRITE LIST.*
EQ VWL7 CONTINUE
VWL6 SX7 WLBC * WRITE LIST BUFFER COUNT.*
EQ VWL7 CONTINUE
CIR SPACE 4
** CIR - CLEAR INTERLOCKS.
CIRX SA0 B3+ RESTORE (A0)
CIR PS ENTRY/EXIT
SA1 CIRA CHECK RECOVERY MODE
SB2 1000B INTERLOCK RETRY COUNT
SX1 X1-3
NZ X1,CIR IF NOT LEVEL THREE RECOVERY
SB3 A0+ SAVE (A0)
* CLEAR FLAG REGISTER BITS IF MMF PRESENT.
TX5 MMK
SB4 CIRI
CIR1 SB6 CIR2
TJP (/ECS/SFR,MMF,/PRESET/CIR11)
CIR2 SA0 /MMF/MBUF
TX0 ETLT*100B+FRET,ECLT
TX0 X0,TCNT
SX2 A0+
LX2 30
BX0 X0+X2
RE 18
EQ CIR9 IF PARITY ERROR
SB6 CIR5
TSX0 (402B,ESM,6B)
LX0 21
BX0 X0+X5
ZR X7,CIR4 IF INTERLOCK OBTAINED
SA2 A0+B4
LX2 6
SX2 X2
AX2 6
TX2 X2,-MIN
NZ X2,CIR4 IF INTERLOCK HELD BY THIS MACHINE
SB2 B2-B1 DECREMENT RETRY COUNT
PL B2,CIR1 IF NOT END OF RETRY COUNT
JP CIR11
CIR3 SX2 X5+.TRTI CLEAR TRTI INTERLOCK
TSX0 (403B,ESM,7B)
LX0 21
BX0 X0+X2
CIR4 RE /ECS/FRWC
EQ CIR3
SB4 18
CIR5 SB4 B4-B1
SA0 /MMF/MBUF
SA3 A0+B4
NG B4,CIR9 IF END OF FLAG BITS
AX3 12
BX3 X5*X3
NZ X3,/ECS/CFR IF INTERLOCK HELD BY THIS MACHINE
EQ CIR5
* CLEAR DEVICE INTERLOCKS FOR SHARED DEVICES IN ECS.
CIR9 TX5 MIN SET MACHINE INDEX
MX7 -6
SB7 B0-B1 SET START OF EST SEARCH
SA0 /MMF/MBUF
SB5 CIR10 *SSD* RETURN
JP /PROGRAM/SSD SEARCH FOR SHARED DEVICE
CIR10 NG B7,CIR11 IF END OF SHARED DEVICES
SX1 A0+
SX0 X4+SDGL
LX1 30
BX0 X0+X1
RE 1 READ DEVICE INTERLOCK
JP /PROGRAM/SSD
SA1 A0
BX2 -X7*X1
AX2 B1
BX2 X5-X2
NZ X2,/PROGRAM/SSD IF NOT INTERLOCKED BY THIS MACHINE
BX6 X7*X1
SA6 A1
WE 1 WRITE CLEARED INTERLOCK
JP /PROGRAM/SSD
CIR11 SA2 ESTP SET LAST MASS STORAGE ORDINAL + 1
MX4 -12
AX2 12
BX2 -X4*X2
SB7 X2+
CIR12 ZR B7,CIR13 IF END OF DEVICES
SX2 B7-B1
CX1 X2,EST CONVERT EST ORDINAL TO OFFSET
TA1 X1+EQDE,EST READ EST ENTRY
SB7 B7-B1
BX2 -X4*X1
PL X1,CIR12 IF NOT MASS STORAGE
LX2 3
MX6 12
SA1 X2+DULL CLEAR INTERLOCKS
LX6 -12
BX6 -X6*X1
SA6 A1
BX6 X6-X1
SA1 X2+TDGL
IX6 X1-X6
SA6 A1
EQ CIR12
* CLEAR INTERLOCKS AND EXIT.
CIR13 NG B2,CIRX IF NO INTERLOCK TO CLEAR
SB6 CIRX
SB4 CIRI
TJP (/ECS/CFR,MMF,/PRESET/CIRX) CLEAR INTERLOCK IF MMF
CIRA CON 0 RECOVERY MODE
CLE SPACE 4,10
** CLE - CLEAR ECS.
*
* FOR UEM AND ESM, WRITE MEMORY WITH ALL ZEROS. FOR ECS AND
* LCME, WRITE MEMORY WITH ALL ONES AND REWRITE WITH ALL ZEROS.
*
* EXIT (A0) RESTORED.
* (X0) RESTORED.
*
* USES A - 0, 1, 2, 4, 6, 7.
* B - 2, 4, 5, 6, 7.
* X - ALL.
CLE15 SA1 CCMB
NZ X1,CLE IF NOT LARGE MEMORY 990
SA0 CLEE
LX2 X0 SAVE (X0)
BX6 X6-X6
SX0 A0 SET BUFFER ADDRESS
SB6 377B
LX0 30
CLE16 SA6 A0+B6 CLEAR BUFFER
SB6 B6-B1
PL B6,CLE16 IF MORE TO CLEAR
WE 400B
+ SA0 B2 RESTORE REGISTERS
BX0 X2
SA7 CLEA SET *CLE* RAN INDICATOR
CLE PS ENTRY/EXIT
SA1 CLEA
NZ X1,CLE IF *CLE* HAS BEEN RUN
SA1 EMS CHECK FOR FULL INITIALIZE PENDING
MX7 -3
SB2 A0
ZR X1,CLE15 IF NO XM EQUIPMENT
SA1 X1+DILL
AX1 18 EXTRACT XM TYPE
BX7 -X7*X1
SA0 CLEE
BX6 X0 SAVE (X0)
SX7 X7-5
SA6 A0-B1
NZ X7,CLE1 IF NOT ESM
SA2 ESM
SA4 CLEB
LX2 3+21 FUNCTION TO MATCH *POWER ON* STATUS
BX0 X4+X2
RE /ECS/FRWC
CLE1 SA1 A1+STLL-DILL
SX7 X7+1
AX7 60 = 0 FOR ESM/UEM, -0 FOR ECS/LCME
LX1 59-LIAL
PL X1,CLE9 IF FULL INITIALIZE NOT SELECTED
SA2 MECNF
SX4 400B EXTENDED MEMORY INCREMENT
LX2 1
SB4 X2 NUMBER OF 400 WORD BLOCKS TO TEST
SA1 CLEC
SB5 B0
BX6 X1 SET MESSAGE FOR DISPLAY
SA6 DSCP*CPAS+MS1W
SA1 A1+1
SA2 A1+1
BX6 X1
MX3 -3
SA6 A6+B1
BX6 X2
SA1 A2+B1
SA6 A6+B1
BX6 X1
SA6 A6+B1
CLE2 SX0 A0 SET ADDRESSES FOR TRANSFER
SB6 377B
LX0 30
CLE3 SA7 A0+B6 STORE TEST PATTERN IN BUFFER
SB6 B6-B1
PL B6,CLE3 IF NOT END OF BUFFER
CLE4 SX1 B5
BX6 X2
LX1 2 EXTENDED MEMORY ADDRESS / 100B
SB7 B0
CLE5 BX5 -X3*X1 EXTRACT NEXT DIGIT
AX1 3
SX5 X5+1R0-1R
LX5 B7 CONVERT NUMBER FOR MESSAGE
SB7 B7+6
IX6 X6+X5
NZ X1,CLE5 IF MORE DIGITS
SA6 DSCP*CPAS+MS1W+2
WE 400B
- EQ * (HANG ON HALF-EXIT)
+ SB5 B5+B1 INCREMENT BLOCK COUNT
IX0 X0+X4
NE B5,B4,CLE4 IF NOT END OF EXTENDED MEMORY
CLE6 SX1 B5-B1
BX6 X2
LX1 2 EXTENDED MEMORY ADDRESS / 100B
SB7 B0
BX7 -X7
SA7 CLEE INSURE COMPARE ERROR IF NO TRANSFER
BX7 -X7
CLE7 BX5 -X3*X1 EXTRACT NEXT DIGIT
AX1 3
SX5 X5+1R0-1R
LX5 B7 CONVERT NUMBER FOR MESSAGE
SB7 B7+6
IX6 X6+X5
NZ X1,CLE7 IF MORE DIGITS
SB6 377B
SA6 DSCP*CPAS+MS1W+2
IX0 X0-X4 DECREMENT EXTENDED MEMORY ADDRESS
SB5 B5-B1
RE 400B FILL BUFFER
- EQ * (HANG ON HALF-EXIT)
CLE8 SA1 A0+B6
SB6 B6-1
BX1 X1-X7
+ NG X1,* IF COMPARE ERROR
- NZ X1,* IF COMPARE ERROR
PL B6,CLE8 IF NOT END OF BUFFER
NZ B5,CLE6 IF NOT END OF EXTENDED MEMORY
BX7 -X7
SX6 B0
PL X7,CLE2 IF BOTH PATTERNS NOT USED
SA6 DSCP*CPAS+MS1W
EQ CLE10 PROCESS *IBDT*
* CHECK FOR CYBER 8XX MACHINE AND LEVEL 1 OR 2 DEADSTART.
CLE9 SA1 MABL CHECK MACHINE TYPE
SA4 CIRA GET RECOVERY LEVEL
LX1 59-47
NG X1,CLE14 IF NOT CYBER 170-8X5
SX4 X4-1
ZR X4,CLE10 IF LEVEL 1 DEADSTART
SX4 X4-1
NZ X4,CLE14 IF NOT LEVEL 2 DEADSTART
* BUILD *IBDT* AND ENTER IN LABEL TRACK.
CLE10 SA1 EEM CHECK FOR LINK DEVICE
SA4 MMFL
MX6 -9 MASK FOR EST ORDINAL
AX4 36
BX4 X4-X1
BX4 -X6*X4
SB4 1 (B4) = IBDT LIMIT
SX6 1000B
NZ X4,CLE11 IF NOT LINK DEVICE
SB4 MXMF
CLE11 SA1 TNSC
SB7 60
SA2 TCNT EXTENDED MEMORY SECTOR LIMIT
SB5 X1
SB7 B7-B5
SA1 EMS GET TRACK COUNT FROM MST
LX6 B5
SA1 X1
ERRNZ TDGL CODE DEPENDS ON VALUE
SX4 20B*101B
AX1 48
LX4 B5
SX6 X6-1
IX1 X1*X4
IX4 X1+X6
AX4 9 FWA OF BUFFERS IS END OF DEVICE
LX4 B7
SA1 DSDL
MX0 -12
SB5 12
LX6 X0,B5 POSITION MASK
CLE12 SA1 A1+B1
MX0 -12
BX7 X6*X1 CLEAR FWA FIELD
BX0 -X0*X1 LENGTH
ZR X0,CLE13 IF NO I/O BUFFERS ON THIS MAINFRAME
LX1 X4,B5 POSITION FWA
BX7 X7+X1
CLE13 SA7 A1
IX4 X4+X0 NEW FWA
SB6 A1-DSDL
NE B4,B6,CLE12 IF NOT END OF *IBDT*
SA0 DSDL+1 WRITE TO LABEL TRACK
SA1 ECLT EXTENDED MEMORY LABEL TRACK ADDRESS
SX0 X1+ETLT*100B+IBDT
SX1 A0
IX0 X0+X2
LX1 30
BX0 X0+X1
WE B4
CLE14 SX6 B1 SET *CLE* RAN INDICATOR
BX7 X7-X7
SA6 CLEA
SA2 CLED RESTORE REGISTERS
BX0 X2
SA0 B2
EQ CLE RETURN
CLEA CON 0
CLEB VFD 36/0,3/2,21/377B
CLEC DATA C*TESTING EXTENDED MEMORY 00*
CLED CON 0
CLEE BSS 400B EXTENDED MEMORY PRESET BUFFER
DBL SPACE 4
** DBL - DETERMINE BLOCKS LOADED.
* *DBL* SETS THE CONDITION WORDS IN *TDBL* WHICH TELL IF A
* BLOCK HAS BEEN LOADED. THESE CONDITION WORDS ARE USED FOR
* SETTING THE CONDITIONAL VALUES IN THE *T* INSTRUCTIONS.
*
* EXIT TDBL IS SET ACCORDING TO THE BLOCKS LOADED.
DBL PS ENTRY/EXIT
SA1 TDBL-1 CONDITION WORDS TO SET
SB2 BLKT LOADED BLOCK TABLE ADDRESS
DBL1 SA1 A1+B1
ZR X1,DBL IF END OF CONDITION WORDS
SA2 B2-B1
DBL2 SA2 A2+B1 READ LOADED BLOCKS
BX6 X2-X1
AX6 18
BX7 X7-X7
ZR X6,DBL1 IF BLOCK PRESENT
NZ X2,DBL2 IF NOT END OF LOADED BLOCKS
SA7 A1 CLEAR CONDITION WORD - BLOCK NOT PRESENT
EQ DBL1
ILD SPACE 4
** ILD - INITIALIZE MULTI-MAINFRAME LINK DEVICE.
*
* ENTRY (EFRL) = 30/,6/ LS,12/,12/ LT.
* LS = 40, IF TO INITIALIZE LINK DEVICE.
* LS = 20, IF TO PRESET LINK DEVICE.
* LT = LABEL TRACK OF LINK DEVICE.
*
* EXIT ERROR CODES PASSED TO *RMS* IN (EFRL) -
* 1 = EXTENDED MEMORY LABEL TRACK NOT FOUND.
* 2 = RECOVERY DS. PREVENTED FOR THIS MACHINE ID.
* 3 = MACHINE ID IN USE.
* 4 = MMFL SLOT UNAVAILABLE.
* 5 = EXTENDED MEMORY READ/WRITE PARITY ERRORS.
* 6 = PRESET NOT ALLOWED.
*
* (B6) = ERROR CODE.
ILD33 SX6 /LSPMMF/TMMF MERGE MMF TABLE ADDRESS IN *EFRL*
LX6 36
MX7 24
BX7 -X7*X1
BX6 X6+X7
SA6 EFRL
ILD PS ENTRY/EXIT
SA1 DSSL SET RECOVERY LEVEL
MX7 -2
BX7 -X7*X1
SA1 EFRL GET PRESET, INITIALIZE FLAGS
SB2 X7
SB6 B0
SA2 LSPMMF CHECK FOR LSP LINK DEVICE
NZ X2,ILD33 IF NO CPU PATH
MX4 -12
BX7 -X4*X1 EXTENDED MEMORY LABEL TRACK
LX1 59-29
SX6 2020B
SA3 TNSC
SB5 X3
LX6 B5,X6
MX4 -11
BX0 -X4*X7
LX3 X1,B1 POSITION INITIALIZE BIT
SA0 /PROGRAM/PBUF SET ECS BUFFER ADDRESS
IX0 X0*X6
SX2 A0+
LX2 30
BX0 X2+X0
NG X3,ILD2 IF INITIALIZE OF LINK DEVICE
SA3 ILDA
* SEARCH FOR LABEL TRACK.
ILD1 RE 1 READ LABEL SECTOR LINK WORD
NO IGNORE EXTENDED MEMORY ERROR
+ SA2 A0
BX2 X2-X3
ZR X2,ILD2 IF LABEL TRACK FOUND
SX2 X7+1-LTKL
IX0 X0+X6 ADVANCE LABEL TRACK ADDRESS
SX7 X7+B1 ADVANCE LABEL TRACK NUMBER
NZ X2,ILD1 IF NOT AT LIMIT OF LABEL TRACK SEARCH
SB6 1
EQ ILD10 RETURN ERROR STATUS
ILD2 MX6 -24
BX6 -X6*X0 SET LABEL TRACK ADDRESS IN PRESET TABLE
SA7 A1 SET LABEL TRACK NUMBER IN EFRL
SA6 ECLT
ILD3 SX2 .PRSI SET PRESET INTERLOCK
SA3 ESM
SX0 400B
NZ X3,ILD3.1 IF ESM ENABLED
SX0 4B
ILD3.1 LX0 21
BX0 X0+X2
RE /ECS/FRWC
PL X1,ILD3 IF NOT PRESET
SA3 MMFL
BX7 X7-X7
SB4 B1+B1
PL X1,ILD11 IF NO PRESET OF LINK DEVICE
* VALIDATE NO ACTIVITY IN ECS.
SA4 TCNT
IX4 X6+X4
SX0 X4+ETLT*100B+SMET
SX4 A0
LX4 30
BX0 X0+X4
RE MXMF
EQ ILD6 PRESET VALID IF EXTENDED MEMORY ERROR
SA4 RTCL
SB5 X4+1200 WAIT 1.2 SECONDS
ILD4 CX4 X4 DELAY
CX4 X4
SA4 RTCL
SB6 X4
LT B6,B5,ILD4 IF NOT END OF WAIT
SA0 A0+MXMF
SB6 5
SX4 MXMF
LX4 30
IX0 X0+X4
RE MXMF
EQ ILD9 RETURN EXTENDED MEMORY ERROR STATUS
SB6 6 *PRESET NOT ALLOWED.*
SA1 A0
SB4 A1
ILD5 SA1 A1-B1 VALIDATE THAT CLOCKS ARE THE SAME
SA4 A1+MXMF
SB5 A4
BX1 X1-X4
SA0 A1 RESET A0
NZ X1,ILD9 IF MACHINE ACTIVE
GT B5,B4,ILD5 IF MORE MACHINES TO CHECK
SB6 5 SET EXTENDED MEMORY ERROR STATUS
ILD6 BX1 X0 CLEAR FLAG REGISTER EXCEPT *PRSI*
BX0 -X2
MX6 -18
BX0 -X6*X0
SA2 ESM
SX6 403B
NZ X2,ILD6.1 IF ESM ENABLED
SX6 7B
ILD6.1 LX6 21
BX0 X6+X0
RE /ECS/FRWC
EQ ILD9
BX0 X1 RESTORE X0
RJ CLE CLEAR ECS
* CLEAR ENVIRONMENT SECTOR.
SA3 A3 RESTORE (X3) = *MMFL*
SB5 77B
BX7 X7-X7
ILD7 SA7 A0+B5 CLEAR SECTOR OF DATA
SB5 B5-B1
PL B5,ILD7 IF MORE TO CLEAR
SX1 B1 SET MACHINE INDEX 1
SX0 X0-SMET
SX4 A0
LX4 30
BX0 X0+X4
WE IBDT
EQ ILD9 PROCESS ERROR
SX1 1 SET MACHINE INDEX
SB6 5 SET EXTENDED MEMORY ERROR RETURN
* SX0 X0+MFET
* WRITE MMFL WORD IN MFET SLOT.
ILD8 SB5 X1+11 SET MACHINE INDEX
SX4 B1
IX0 X0-X4
LX4 X4,B5 MACHINE MASK
IX0 X0+X1 ADDRESS IN MFET
IX4 X4+X1
BX6 X3+X4 SET MACHINE MASK AND INDEX IN MMFL
SA0 A3
SA6 A3
SX6 X0+SMET-MFET
MX2 -24
BX0 -X2*X0
SX2 A0
LX2 30
BX0 X2+X0
WE 1
EQ ILD9 EXTENDED MEMORY ERROR
IX0 X6-X1
SA0 /MMF/ARMA INITIALIZE MACHINE CLOCK TEMPORARIES
SX0 X0+B1 ADDRESS OF MACHINE CLOCKS
MX2 -24
BX0 -X2*X0
SX2 A0
LX2 30
BX0 X0+X2
RE MXMF
EQ ILD9 EXTENDED MEMORY ERROR
SB6 B0 CLEAR ERROR STATUS
SA6 ECCM SET MACHINE CLOCK LOCATION
* CLEAR FLAG REGISTER INTERLOCK AND RETURN IF NO ERROR.
ILD9 SA2 ESM
SX0 403B CLEAR FLAG BIT FUNCTION
NZ X2,ILD9.1 IF ESM ENABLED
SX0 7B
ILD9.1 LX0 21
SX2 .PRSI
BX0 X0+X2
RE /ECS/FRWC
ILD10 SX7 B6 SET ERROR CODE
SA7 EFRL
ZR B6,ILD IF NO ERROR
SX6 B0 CLEAR FURTHER MMF PROCESSING
SA6 MMF
EQ ILD RETURN
* ASSIGN/RECOVER MMFL SLOT IN ENVIRONMENT TABLE.
ILD11 SA2 TCNT
IX2 X6+X2
SX0 X2+ETLT*100B+MFET
SX1 A0
LX1 30
BX0 X1+X0
SB6 5 EXTENDED MEMORY ERROR FLAG
MX4 24
MX1 MXMF-1
RE MXMF
EQ ILD9 IF ERROR
SA2 A0 PRESET STATE TABLE
BX6 X4*X2
SA6 /MMF/TMMF+MFST
ILD11.1 SA2 A2+B1
BX6 X4*X2
LX1 1
SA6 A6+B1
NG X1,ILD11.1 IF NOT END OF MACHINES
MX1 -12
MX4 12
SB3 MXMF-1
LE B2,B4,ILD12 IF NOT LEVEL 3 RECOVERY
* VERIFY MMFL WITH MFET IF LEVEL 3 RECOVERY.
BX1 -X1*X3 MACHINE INDEX
MX4 24+12
SA2 /PROGRAM/PBUF-1+X1 VERIFY ENTRY
LX4 12
BX2 X2-X3
BX2 X4*X2
ZR X2,ILD8 IF ENTRY VERIFIES
JP ILD14
* CHECK IF ENTRY EXISTS OR IF EMPTY SLOT. (LEVEL 0, 1, 2.)
ILD12 SA2 A0+B3 READ ENTRY
NZ X2,ILD13 IF NOT EMPTY ENTRY
SX1 B3+B1 SET EMPTY SLOT FOUND
ILD13 BX6 X2-X3
BX5 X4*X6
ZR X5,ILD15 IF MATCHING MACHINE ID
SB3 B3-B1 CHECK NEXT ENTRY
PL B3,ILD12 IF NOT END OF ENTRIES
* MACHINE ID NOT FOUND - ASSIGN EMPTY ENTRY.
NZ B2,ILD14 IF NOT LEVEL ZERO
PL X1,ILD8 IF EMPTY ENTRY FOUND
SB6 4 *MID SPOT UNAVAILABLE.*
JP ILD9
ILD14 SB6 2 *RECOVERY DEADSTART PREVENTED THIS MID.*
JP ILD9
* MACHINE ID FOUND - VERIFY IF FOR THIS MACHINE.
ILD15 SX1 B3+B1 SET MACHINE INDEX
LX4 -12
BX6 X4*X2
NZ B2,ILD16 IF RECOVERY DEADSTART
ZR X6,ILD8 IF LINK EQUIPMENT NOT PRESENT
SB6 3 *MACHINE ID IN USE.*
JP ILD9
* LINK DEVICE MUST BE PRESENT IN *MFET* FOR RECOVERY DEADSTART.
ILD16 NZ X6,ILD8 IF LINK EQUIPMENT PRESENT
JP ILD14 *RECOVERY DEADSTART PREVENTED THIS MID.*
ILDA VFD 24/37770077B,36/0LLABEL
SPACE 4,10
* INSURE PP EXCHANGE PACKAGES AND TABLE OF LOADED BLOCKS FIT.
PRSO EQU *-PRSB LENGTH OF OVERLAYABLE PRESET CODE
ERRPL 21D*28D+/DSL/CPBL-PRSO OVERFLOW
COMMON SPACE 4,10
* COMMON DECKS.
QUAL
*CALL COMCCDD
*CALL COMCEDT
QUAL *
SPACE 4,10
TITLE NON-OVERLAYED PRESET.
SPACE 4
** PRSX - OVERLAY PRESET WITH PPU EXCHANGE PACKAGES.
PRSX RJ SPS SET PPU STATUS
SX6 CL
SA1 BLKT-1 *CPUMLD* LOADED BLOCKS TABLE
SA6 A0+B1 SET MAIN BLOCK ADDRESS IN BLOCK TABLE
SX7 A6
SA7 CL+CBLP SET *CPUMTR* LOADED BLOCK POINTER
PRSX1 SA1 A1+B1 MOVE LOADED BLOCK TABLE
BX6 X1
SA6 A6+B1
NZ X1,PRSX1 IF NOT END OF TABLE
TSX2 (/MONITOR/BXP,CPB,0)
SA0 A6 UPDATE (A0)
LX7 36
SA6 A6-B1 REMOVE *PRESET* FROM BLOCK TABLE
BX7 X7+X2
SA7 CMBL STORE BREAKPOINT POINTER WORD
TNO /MCE/PRS,MCE IF MEMORY CLEARING ENABLED
SX6 A0 SET LWA+1 OF CPUMTR
SA6 B0
EQ CPSL BRANCH TO STOP
SPS SPACE 4
** SPS - SET PPU STATUS.
*
* ENTRY (A0) = LAST ADDRESS OF CPUMTR.
*
* EXIT (A0) = LAST ADDRESS OF CPUMTR.
SPS PS ENTRY/EXIT
* ASSIGN SYSTEM CONTROL POINT PP-S.
TX1 0,SC SET SYSTEM CP FOR PP ASSIGNMENT
LX1 36
SX6 3RMTR
SX7 3RDSD
LX6 42
LX7 42
BX6 X6+X1
BX7 X7+X1
TA6 0,FP ASSIGN *MTR* TO PP 0
TA7 1*PPCE,FP ASSIGN *DSD* TO PP 1
SX6 3RSTL
SX7 3RDIO
LX6 42
LX7 42
BX6 X6+X1
BX7 X7+X1
TA6 2*PPCE,FP ASSIGN *STL* TO PP 2
TA7 10B*PPCE,FP ASSIGN *DIO* TO PP 10
TA1 STSW,SCA
SX2 4
LX2 48
IX6 X1+X2 INCREMENT SYSTEM CP PP COUNT
SA6 A1+
SA1 PPUL READ PPU STATUS
SB2 20-2 PRESET 20 PPU
LX1 -24
SB6 PPCE
MX3 -12
BX4 -X3*X1
SX3 X4-11
SB3 B1
MX6 1
BX7 X7-X7 CLEAR ASSEMBLY
LX6 -12-1 POSITION TO PP 1
TA1 1*PPCE,FP SET PPU 1
PL X3,SPS1 IF MORE THAN 10 PPU
SB2 10D-2 SET 10 PPU
* BUILD THE PP ALLOCATION BIT MAP.
SPS1 SA1 A1+B6 READ NEXT INPUT REGISTER
AX6 B3,X6 POSITION ALLOCATION BIT
SB4 B2-10D
NZ B4,SPS1.1 IF PP NOT PP20
SB3 -B1 SWITCH SHIFT DIRECTION
AX6 10D-1 REPOSITION PP AVAILABLE FLAG
SPS1.1 SB2 B2-B1
NZ X1,SPS2 IF NOT AVAILABLE
BX7 X7+X6 MERGE ALLOCATION BIT
SPS2 NZ B2,SPS1 IF NOT END OF PPU
SA5 /MONITOR/PXP SET EXCHANGE PACKAGE FIRST WORD
SB7 A1+B6 SET LAST PPU ADDRESS
* CALCULATE LENGTH OF ALL EXCHANGE PACKAGES FOR CPP-S
* AND CPP AVAILABLE COUNT.
SA2 CPPL
LX2 0-12
MX0 -6
BX2 -X0*X2
BX0 X0-X0
ZR X2,SPS2.3 IF NO CPP-S PRESENT
SB2 X2
SPS2.1 SA1 A1+B6 READ NEXT INPUT REGISTER
NZ X1,SPS2.2 IF CPP NOT AVAILABLE
SX0 X0+B1 INCREMENT CPP AVAILABLE COUNT
SPS2.2 SB2 B2-B1
NZ B2,SPS2.1 IF MORE CPP-S TO CHECK
LX0 12-0
BX7 X7+X0
LX2 PPCES
SB7 B7+X2 ADD IN CPP-S EXCHANGE PACKAGES
* GENERATE PPU EXCHANGE PACKAGES.
SPS2.3 SA7 PPAL SAVE ALLOCATION STATUS AND CPP COUNT
SX6 A0
SA6 PXPP SET ADDRESS OF FIRST PP EXCHANGE PACKAGE
BX6 X5
TB4 2*PPCE,FP PP 2 COMMUNICATION AREA ADDRESS
SA6 A6+B1
SA1 A0+20B PRESET (A6)
BX6 X1
SA6 A1
SX4 21B SET EXCHANGE PACKAGE ADDRESS INCREMENT
SX3 B6 SET A5 INCREMENT
LX3 18
SPS3 SB4 B4+B6 INCREMENT PP ADDRESS
MX7 -21B
GE B4,B7,SPS5 IF END OF PPU-S
SPS4 BX6 X5 COPY PREVIOUS EXCHANGE PACKAGE
AX7 1
SA6 A6+B1
SA5 A5+B1
NZ X7,SPS4 IF NOT END OF EXCHANGE PACKAGE
SA1 A6-20B+5 INCREMENT (A5)
IX7 X1+X3
SA7 A1
SA1 A1-5+2 INCREMENT (B2)
IX7 X1+X4
SA7 A1
SA2 B4
LX2 12
SX2 X2-2R**
ZR X2,SPS3 IF NO PP PRESENT
SA0 A6 SET LWA OF EXCHANGE PACKAGES IN USE
EQ SPS3
* INITIALIZE EXTENDED PP CONTROL BLOCKS.
SPS5 TX6 0,SCA
BX1 X6
LX1 48-7
BX7 X1+X6
LX6 24
BX6 X6+X7 *ACPP* FOR SYSTEM CP ASSIGNMENT
MX7 12
TB4 0,FP START OF PP COMMUNICATION AREA
TB3 0,FPX START OF EXTENDED PP CONTROL BLOCKS
SPS6 SA1 B4 READ NEXT INPUT REGISTER
SA7 B3+DRQP INITIALIZE PENDING DISK REQUEST STATUS
LX1 12
ZR X1,SPS7 IF NOT ASSIGNED PP
SX1 X1-2R**
ZR X1,SPS7 IF NOT ASSIGNED PP
SA6 B3+ACPP SET SYSTEM CP ASSIGNMENT
SPS7 SB4 B4+PPCE
SB3 B3+PPXE
LE B4,B7,SPS6 IF NOT PAST PSEUDO-PP
EQ SPS RETURN
PRBL EQU *-PRSB LENGTH OF *PRESET* BLOCK
REL SPACE 4
** TERMINATE THE *TREL* BLOCK WHICH CONTAINS THE RELOCATION
* INFORMATION FOR PRESET.
USE /TREL/
CON 0,0
TRELL EQU *-REL LENGTH OF *TREL* BLOCK
USE *
TJMP SPACE 4,10
** TERMINATE TJMP BLOCK.
USE /TJMP/
CON 0,0
TJMPL EQU *-TJMP LENGTH OF *TJMP* BLOCK
USE *
SPACE 4,10
** BLKT - LOADED BLOCK NAME TABLE DECLARATION.
USE /TBLK/
BLKT BSS 0 LOADED BLOCK NAME TABLE
TBLKL EQU /DSL/CPBL MAXIMUM LENGTH OF *TBLK* BLOCK
USE *
SPACE 4
PRSL EQU PRBL+TRELL+TJMPL+TBLKL
ERRNG /DSL/PRSL*100B-PRSL IF *PRESET* OVERFLOW
QUAL
CPUMTR EQU /PRESET/PRS
SPACE 4
TTL CPUMTR - CPU MONITOR.
SAC HERE
END CPUMTR