*DECK NS$N06
USETEXT CYB$NS
USETEXT DTSB$NS
USETEXT ERR$NS
USETEXT NAT$NS
USETEXT NDF$NS
USETEXT SMB$NS
USETEXT SMD$NS
PROC NS$N06(ERRCODE); # PROCESS NPU/DT/N (DUMP) #
# TITLE NS$N06 - PROCESS NPU/DT/N (DUMP). #
BEGIN # NS$N06 #
#
** NS$N06 - PROCESS NPU/DT/N (DUMP).
*
* J.C. LEE 1981
*
* THIS ROUTINE PROCESSES NPU/DT/N (DUMP).
*
*
* PROC NS$N06(ERRCODE)
*
* ENTRY:
* NONE.
*
* EXIT:
* ERRCODE.
*
* METHOD:
* DECREMENT DUMP BATCH COUNT (DBC)
* CALCULATE DUMP DATA HEX WORDS.
* IF DUMP DATA WITHIN LIMIT AND DBC NOT YET EXHAUSTED:
* CLEAR RETRY COUNT.
* FORMAT DUMP PACKET ENTRY.
* TRANSFER DUMP PACKET TO DUMP TSB.
* UPDATE DBC.
* IF DBC EQ 0
* IF DUMP DIRECTIVE COMPLETE
* PROCESS NEXT DPCB DIRECTIVE.
* ELSE
* START DUMP DATA.
* START LOCAL TIMER.
* ELSE
* SET ERRCODE TO "BAD DUMP RESPONSE FROM NPU".
*
#
ITEM ERRCODE U; # ERRCODE #
$BEGIN
XREF
BEGIN
PROC NS$DBG; # TRACE PROCEDURE CALL #
END
$END
XREF
BEGIN
FUNC NS$FEC U; # FORMAT ERROR CODE #
PROC NS$SDB; # SEND DUMP BATCH #
PROC NS$SLT; # START RESPONSE TIMER #
PROC NS$XPD; # PROCESS NEXT XPCB DIRECTIVE #
PROC TSBINFO; # LOCATE TSB #
PROC WRITEW; # WRITEW DATA TRANSFER MACRO CALL #
END
ITEM CMWORDS U; # NUMBER OF CM WORDS IN NPU DUMP DATA #
ITEM DBC U; # DUMP BATCH COUNT #
ITEM I I; # TEMPORARY VARIABLE #
ITEM J I; # TEMPORARY VARIABLE #
ITEM NPUWORDS U; # NUMBER OF NPU WORDS IN DUMP RESPONSE #
ITEM TSBFWA U; # FWA OF TSB #
ITEM TSBSIZE U; # TSB SIZE #
BASED ARRAY DSM$DATA [1:MAX$DPSIZE] S(1);
BEGIN # DUMP DATA WORD FORMAT IN DUMP RESPONSE #
ITEM DSM$DATA1 U(00,20,40); # DUMP DATA IN FIRST WORD #
ITEM DSM$DATA2 U(00,00,20); # DUMP DATA IN NEXT WORD #
END
BASED ARRAY NDF$DPDATA [1:MAX$DPSIZE] S(1);
BEGIN # DUMP PACKET DATA FORMAT #
ITEM DPD$DATAWD U(00,00,60);
ITEM DPD$DATA1 U(00,00,40);
ITEM DPD$DATA2 U(00,40,20);
END
CONTROL EJECT;
$BEGIN
NS$DBG("N06"); # TRACE CALL #
$END
ERRCODE = 0;
DBC = NAT$BC[0] - 1; # DECREMENT DUMP BATCH COUNT #
NPUWORDS = (ABHTLC[0] - LNPUDTDN + 1) / 2; # DUMP DATA HEX WORDS #
IF NPUWORDS LQ MAX$DPHWDS # DUMP DATA WITHIN ALLOWED LIMIT#
AND DBC GQ 0 # DUMP BATCH NOT YET EXHAUSTED #
THEN # VALID DUMP RESPONSE #
BEGIN
NAT$RETRYS[0] = 0;
#
FORMAT DUMP PACKET ENTRY
#
P<NDF$DPHDR> = LOC(ABH$WORD); # FWA OF DUMP PACKET HEADER #
CMWORDS = (NPUWORDS*16 + (WL-1)) / WL; # DUMP DATA CM WORDS #
DPH$WORD[0] = 0;
DPH$WC[0] = CMWORDS + L$DPHDR; # CM WORD COUNT OF ENTRY #
DPH$NC[0] = NPUWORDS; # HEX WORD COUNT OF ENTRY #
DPH$BA1[0] = NPUBA1[0]; # DUMP PACKET BEGINNING ADDRESS #
DPH$BA2[0] = NPUBA2[0];
P<NDF$DPDATA> = LOC(SMB$BUFFER); # FWA OF DUMP PACKET DATA #
P<DSM$DATA> = LOC(SMB$BUFFER) + (((2*LNPUDTDN+14)/15) - 1);
J = 1;
FOR I=1 STEP 1 UNTIL CMWORDS
DO
BEGIN # MOVE DUMP DATA FROM SM TO DUMP PACKET #
DPD$DATA1[I] = DSM$DATA1[J];
J = J + 1;
DPD$DATA2[I] = DSM$DATA2[J];
END
#
TRANSFER DUMP PACKET TO DUMP TSB
#
TSBINFO(TSBSIZE,TSBFWA,NAT$NDTSBN[0]); # LOCATE DUMP TSB #
P<DTSB$FET> = TSBFWA + L$DTSBHDR; # FWA OF FET #
WRITEW(DTSB$FET,NDF$DPHDR,L$DPHDR+CMWORDS); # TRANSFER PACKET #
NAT$BC[0] = DBC; # UPDATE DUMP BATCH COUNT #
IF DBC EQ 0
THEN # WHOLE DUMP BATCH RECEIVED #
BEGIN
IF NAT$F$DP[0]
THEN # DUMP DIRECTIVE COMPLETES #
BEGIN
NS$XPD(ERRCODE); # PROCESS NEXT DPCB DIRECTIVE #
END
ELSE # MORE DATA TO DUMP #
BEGIN
NS$SDB; # SEND DUMP BATCH #
NS$SLT; # START RESPONSE TIMER #
END
END
END
ELSE # BAD DUMP RESPONSE FROM NPU #
BEGIN
ERRCODE = NS$FEC(EC"ERR$SM",SMEC"NSM$DMP");
END
RETURN;
END # NS$N06 #
TERM