*DECK NS$INL
USETEXT ERR$NS
USETEXT NAT$NS
USETEXT PIC$NS
PROC NS$INL(ERRCODE); # INITIATE NPU LOAD #
# TITLE NS$INL - INITIATE NPU LOAD. #
BEGIN # NS$INL #
#
** NS$INL - INITIATE NPU LOAD.
*
* J.C. LEE 1981
*
* THIS ROUTINE INITIATES NPU LOAD.
*
* PROC NS$INL(ERRCODE)
*
* ENTRY:
* NONE.
*
* EXIT:
* ERRCODE - IF A BAD PICB RECORD FOUND.
*
* METHOD:
* CLEAR ACTIVITY-RETRY-COUNT.
* CLEAR NPU-STATE.
* SET NPU-PRIMARY-STATE TO "LOADING NPU".
* LOCATE PICB-TSB.
* IF PICB EXISTS:
* SET XPCB-DIRECTIVE-INDEX TO PICB-INDEX
* OF LPCB-HEADER.
* SET XPCB-END-DIRECTIVE-INDEX TO PICB-INDEX
* OF LPCB END DIRECTIVE.
* START GLOBAL TIMER.
* ELSE
* SET ERROR CODE.
*
#
ITEM ERRCODE U; # ERROR CODE #
$BEGIN
XREF
BEGIN
PROC NS$DBG; # TRACE PROCEDURE CALL #
END
$END
XREF
BEGIN
PROC TSBINFO; # LOCATE TSB #
PROC MOVEOK; # ALLOW TSB TO MOVE #
FUNC NS$FEC U; # FORMAT ERROR CODE #
PROC NS$LSN; # INCREMENT LOAD SEQUENCE NUMBER #
PROC NS$SGT; # START ACTIVITY TIMER #
END
ITEM I I; # PICB INDEX OF FIRST LPCB ENTRY #
ITEM K I; # PICB INDEX OF LAST LPCB ENTRY #
ITEM PICBTSBN U; # TSB NUMBER OF PICB #
ITEM TSBFWA U; # TSB FWA #
ITEM TSBSIZE U; # TSB SIZE #
CONTROL EJECT;
$BEGIN
NS$DBG("INL"); # TRACE CALL #
$END
ERRCODE = 0;
NAT$STATE[0] = 0; # CLEAR NPU STATE #
NAT$PSTATE[0] = S"NPS$LNPU"; # PRIMARY STATE - LOADING NPU #
PICBTSBN = NAT$PITSBN[0]; # PICB TSB NUMBER #
TSBINFO(TSBSIZE,TSBFWA,PICBTSBN); # LOCATE PICB TSB #
P<PICB> = TSBFWA; # FWA OF PICB #
I = PICB$HDRL + PICB$PARWL + PICB$LDPCB[PICB$HDRL]; # HEADER INDX#
K = I + PICB$LLPCB[PICB$HDRL] - 1; # INDEX TO LAST LPCB DIRECTIVE#
IF PICB$PCBID[I] EQ ID$LPCB # VALID IDENTIFIER #
AND K LQ PICB$BS[0] # LPCB SIZE OK #
AND PICB$CODE[K] EQ DIRCODE"ENDPCB" # END DIRECTIVE EXISTS#
THEN # VALID LPCB #
BEGIN # INITIATE NPU LOAD PROCEDURE #
NAT$PDIRI[0] = I; # CURRENT LPCB DIRECTIVE INDEX#
NAT$PENDI[0] = K; # LAST LPCB DIRECTIVE INDEX #
NS$LSN; # ASSIGN LSN FOR LOAD SEQUENCE #
NS$SGT; # START ACTIVITY TIMER #
END
ELSE # NLF ERROR-BAD LPCB #
BEGIN
ERRCODE = NS$FEC(EC"ERR$FILE",FEC"ERR$LPCB");
END
MOVEOK(PICBTSBN); # ALLOW PICB TO MOVE #
RETURN;
END # NS$INL #
TERM